vdr  2.7.6
player.c
Go to the documentation of this file.
1 /*
2  * player.c: The basic player interface
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: player.c 5.2 2024/10/13 09:47:18 kls Exp $
8  */
9 
10 #include "player.h"
11 #include "i18n.h"
12 
13 // --- cPlayer ---------------------------------------------------------------
14 
16 {
17  device = NULL;
18  playMode = PlayMode;
19 }
20 
22 {
23  Detach();
24 }
25 
26 int cPlayer::PlayPes(const uchar *Data, int Length, bool VideoOnly)
27 {
28  if (device)
29  return device->PlayPes(Data, Length, VideoOnly);
30  esyslog("ERROR: attempt to use cPlayer::PlayPes() without attaching to a cDevice!");
31  return -1;
32 }
33 
34 void cPlayer::Detach(void)
35 {
36  if (device)
37  device->Detach(this);
38 }
39 
40 // --- cControl --------------------------------------------------------------
41 
44 
45 cControl::cControl(cPlayer *Player, bool Hidden)
46 {
47  attached = false;
48  hidden = Hidden;
49  player = Player;
50 }
51 
53 {
54  if (this == control)
55  control = NULL;
56 }
57 
59 {
60  return NULL;
61 }
62 
64 {
65  return NULL;
66 }
67 
69 {
70  return "";
71 }
72 
73 cControl *cControl::Control(cMutexLock &MutexLock, bool Hidden)
74 {
75  MutexLock.Lock(&mutex);
76  return (control && (!control->hidden || Hidden)) ? control : NULL;
77 }
78 
79 void cControl::Launch(cControl *Control)
80 {
81  cMutexLock MutexLock(&mutex);
82  delete control;
83  control = Control;
84 }
85 
86 void cControl::Attach(void)
87 {
88  cMutexLock MutexLock(&mutex);
90  if (cDevice::PrimaryDevice()->AttachPlayer(control->player))
91  control->attached = true;
92  else {
93  Skins.Message(mtError, tr("Primary device has no MPEG decoder, can't attach player!"));
94  Shutdown();
95  }
96  }
97 }
98 
100 {
101  cMutexLock MutexLock(&mutex);
102  cControl *c = control; // avoids recursions
103  control = NULL;
104  delete c;
105 }
static cControl * Control(cMutexLock &MutexLock, bool Hidden=false)
Returns the current replay control (if any) in case it is currently visible.
Definition: player.c:73
virtual cString GetHeader(void)
This can be used by players that don't play a cRecording, but rather do something completely differen...
Definition: player.c:68
static void Shutdown(void)
Definition: player.c:99
static cControl * control
Definition: player.h:85
virtual cOsdObject * GetInfo(void)
Returns an OSD object that displays information about the currently played programme.
Definition: player.c:58
static cMutex mutex
Definition: player.h:86
virtual const cRecording * GetRecording(void)
Returns the cRecording that is currently being replayed, or NULL if this player is not playing a cRec...
Definition: player.c:63
static void Attach(void)
Definition: player.c:86
bool hidden
Definition: player.h:88
virtual ~cControl() override
Definition: player.c:52
bool attached
Definition: player.h:87
static void Launch(cControl *Control)
Definition: player.c:79
cControl(cPlayer *Player, bool Hidden=false)
Definition: player.c:45
cPlayer * player
Definition: player.h:90
virtual int PlayPes(const uchar *Data, int Length, bool VideoOnly=false)
Plays all valid PES packets in Data with the given Length.
Definition: device.c:1571
void Detach(cFilter *Filter)
Detaches the given filter from this device.
Definition: device.c:718
static cDevice * PrimaryDevice(void)
Returns the primary device.
Definition: device.h:148
bool Lock(cMutex *Mutex)
Definition: thread.c:401
Definition: thread.h:67
Definition: player.h:16
void Detach(void)
Definition: player.c:34
int PlayPes(const uchar *Data, int Length, bool VideoOnly=false)
Definition: player.c:26
bool IsAttached(void)
Definition: player.h:55
virtual ~cPlayer()
Definition: player.c:21
ePlayMode playMode
Definition: player.h:20
cPlayer(ePlayMode PlayMode=pmAudioVideo)
Definition: player.c:15
cDevice * device
Definition: player.h:19
eKeys Message(eMessageType Type, const char *s, int Seconds=0)
Displays the given message, either through a currently visible display object that is capable of doin...
Definition: skins.c:284
Definition: tools.h:178
ePlayMode
Definition: device.h:39
#define tr(s)
Definition: i18n.h:85
cSkins Skins
Definition: skins.c:253
@ mtError
Definition: skins.h:37
unsigned char uchar
Definition: tools.h:31
#define esyslog(a...)
Definition: tools.h:35