-
Notifications
You must be signed in to change notification settings - Fork 7
/
player.c
114 lines (96 loc) · 2.32 KB
/
player.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
* 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 5.1 2024/07/16 12:33:27 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;
cMutex cControl::mutex;
cControl::cControl(cPlayer *Player, bool Hidden)
{
attached = false;
hidden = Hidden;
player = Player;
}
cControl::~cControl()
{
if (this == control)
control = NULL;
}
cOsdObject *cControl::GetInfo(void)
{
return NULL;
}
const cRecording *cControl::GetRecording(void)
{
return NULL;
}
cString cControl::GetHeader(void)
{
return "";
}
#if DEPRECATED_CCONTROL
cControl *cControl::Control(bool Hidden)
{
cMutexLock MutexLock(&mutex);
return (control && (!control->hidden || Hidden)) ? control : NULL;
}
#endif
cControl *cControl::Control(cMutexLock &MutexLock, bool Hidden)
{
MutexLock.Lock(&mutex);
return (control && (!control->hidden || Hidden)) ? control : NULL;
}
void cControl::Launch(cControl *Control)
{
cMutexLock MutexLock(&mutex);
cControl *c = control; // keeps control from pointing to uninitialized memory TODO obsolete once DEPRECATED_CCONTROL is gone
control = Control;
delete c;
}
void cControl::Attach(void)
{
cMutexLock MutexLock(&mutex);
if (control && !control->attached && control->player && !control->player->IsAttached()) {
if (cDevice::PrimaryDevice()->AttachPlayer(control->player))
control->attached = true;
else {
Skins.Message(mtError, tr("Primary device has no MPEG decoder, can't attach player!"));
Shutdown();
}
}
}
void cControl::Shutdown(void)
{
cMutexLock MutexLock(&mutex);
cControl *c = control; // avoids recursions
control = NULL;
delete c;
}