-
Notifications
You must be signed in to change notification settings - Fork 0
/
dvbhdffdevice.h
143 lines (116 loc) · 3.83 KB
/
dvbhdffdevice.h
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* dvbhdffdevice.h: The DVB HD Full Featured device interface
*
* See the README file for copyright information and how to reach the author.
*/
#ifndef __DVBHDFFDEVICE_H
#define __DVBHDFFDEVICE_H
#include "hdffcmd.h"
#include <vdr/dvbdevice.h>
#include <vdr/dvbspu.h>
// AUDIO_GET_PTS was dropped from the kernel!
#ifndef AUDIO_GET_PTS
#define AUDIO_GET_PTS _IOR('o', 19, __u64)
#endif
/// The cDvbHdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
class cDvbHdFfDevice : public cDvbDevice {
private:
int fd_osd, fd_audio, fd_video;
bool outputOnly;
protected:
virtual void MakePrimaryDevice(bool On);
public:
static bool Probe(int Adapter, int Frontend);
cDvbHdFfDevice(int Adapter, int Frontend, bool OutputOnly);
virtual ~cDvbHdFfDevice();
virtual bool HasDecoder(void) const;
// SPU facilities
private:
cDvbSpuDecoder *spuDecoder;
public:
virtual cSpuDecoder *GetSpuDecoder(void);
// Channel facilities
public:
virtual bool ProvidesSource(int Source) const;
virtual int NumProvidedSystems(void) const;
private:
void TurnOffLiveMode(bool LiveView);
protected:
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
// PID handle facilities
protected:
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
// Image Grab facilities
public:
virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
// Video format facilities
public:
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
// Track facilities
protected:
virtual void SetAudioTrackDevice(eTrackType Type);
// Audio facilities
private:
int audioChannel;
protected:
virtual int GetAudioChannelDevice(void);
virtual void SetAudioChannelDevice(int AudioChannel);
virtual void SetVolumeDevice(int Volume);
// Player facilities
private:
int playVideoPid;
int playAudioPid;
int playPcrPid;
bool freezed;
bool trickMode;
bool isPlayingVideo;
bool isTransferMode;
bool supportsPcrInTransferMode;
// Pes2Ts conversion stuff
uint8_t videoCounter;
uint8_t audioCounter;
void BuildTsPacket(uint8_t * TsBuffer, bool PusiSet, uint16_t Pid, uint8_t Counter, const uint8_t * Data, uint32_t Length);
uint32_t PesToTs(uint8_t * TsBuffer, uint16_t Pid, uint8_t & Counter, const uint8_t * Data, uint32_t Length);
protected:
ePlayMode playMode;
virtual bool CanReplay(void) const;
virtual bool SetPlayMode(ePlayMode PlayMode);
virtual int PlayVideo(const uchar *Data, int Length);
virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
virtual int PlayTsVideo(const uchar *Data, int Length);
virtual int PlayTsAudio(const uchar *Data, int Length);
public:
virtual int64_t GetSTC(void);
virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter);
virtual void ScaleVideo(const cRect &Rect = cRect::Null);
#if (APIVERSNUM >= 20103)
virtual void TrickSpeed(int Speed, bool Forward);
#else
virtual void TrickSpeed(int Speed);
#endif
virtual void Clear(void);
virtual void Play(void);
virtual void Freeze(void);
virtual void Mute(void);
virtual void StillPicture(const uchar *Data, int Length);
virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
virtual bool Flush(int TimeoutMs = 0);
// HDFF specific things
public:
static HDFF::cHdffCmdIf *GetHdffCmdHandler(void);
private:
static int devHdffOffset;//TODO
bool isHdffPrimary;//TODO implicit!
HDFF::cHdffCmdIf *mHdffCmdIf;
};
class cDvbHdFfDeviceProbe : public cDvbDeviceProbe {
private:
bool outputOnly;
public:
cDvbHdFfDeviceProbe(void);
virtual bool Probe(int Adapter, int Frontend);
void SetOutputOnly(bool On) { outputOnly = On; }
};
#endif //__DVBHDFFDEVICE_H