1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00
vdr/player.c
2004-12-17 14:55:49 +01:00

86 lines
1.6 KiB
C

/*
* player.c: The basic player interface
*
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: player.c 1.9 2004/12/12 11:21:07 kls Exp $
*/
#include "player.h"
#include "i18n.h"
// --- cPlayer ---------------------------------------------------------------
cPlayer::cPlayer(ePlayMode PlayMode)
{
device = NULL;
playMode = PlayMode;
}
cPlayer::~cPlayer()
{
Detach();
}
int cPlayer::PlayPes(const uchar *Data, int Length, bool VideoOnly)
{
if (device)
return device->PlayPes(Data, Length, VideoOnly);
esyslog("ERROR: attempt to use cPlayer::PlayPes() without attaching to a cDevice!");
return -1;
}
void cPlayer::Detach(void)
{
if (device)
device->Detach(this);
}
// --- cControl --------------------------------------------------------------
cControl *cControl::control = NULL;
cControl::cControl(cPlayer *Player, bool Hidden)
{
attached = false;
hidden = Hidden;
player = Player;
}
cControl::~cControl()
{
if (this == control)
control = NULL;
}
cControl *cControl::Control(void)
{
return (control && !control->hidden) ? control : NULL;
}
void cControl::Launch(cControl *Control)
{
delete control;
control = Control;
}
void cControl::Attach(void)
{
if (control && !control->attached && control->player && !control->player->IsAttached()) {
if (cDevice::PrimaryDevice()->AttachPlayer(control->player))
control->attached = true;
else {
Skins.Message(mtError, tr("Channel locked (recording)!"));
Shutdown();
}
}
}
void cControl::Shutdown(void)
{
cControl *c = control; // avoids recursions
control = NULL;
delete c;
}