vdr  2.4.1
dvbhdffdevice.h
Go to the documentation of this file.
1 /*
2  * dvbhdffdevice.h: The DVB HD Full Featured device interface
3  *
4  * See the README file for copyright information and how to reach the author.
5  */
6 
7 #ifndef AUDIO_GET_PTS
8 #define AUDIO_GET_PTS _IOR('o', 19, __u64)
9 #endif
10 #ifndef __DVBHDFFDEVICE_H
11 #define __DVBHDFFDEVICE_H
12 
13 #include "hdffcmd.h"
14 #include <vdr/dvbdevice.h>
15 #include <vdr/dvbspu.h>
16 
18 
19 class cDvbHdFfDevice : public cDvbDevice {
20 private:
22  bool outputOnly;
23 protected:
24  virtual void MakePrimaryDevice(bool On);
25 public:
26  static bool Probe(int Adapter, int Frontend);
27  cDvbHdFfDevice(int Adapter, int Frontend, bool OutputOnly);
28  virtual ~cDvbHdFfDevice();
29  virtual bool HasDecoder(void) const;
30 
31 // SPU facilities
32 
33 private:
35 public:
36  virtual cSpuDecoder *GetSpuDecoder(void);
37 
38 // Channel facilities
39 
40 public:
41  virtual bool ProvidesSource(int Source) const;
42  virtual int NumProvidedSystems(void) const;
43 private:
44  void TurnOffLiveMode(bool LiveView);
45 protected:
46  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
47 
48 // PID handle facilities
49 
50 protected:
51  virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
52 
53 // Image Grab facilities
54 
55 public:
56  virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
57 
58 // Video format facilities
59 
60 public:
61  virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
62  virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
63  virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
64 
65 // Track facilities
66 
67 protected:
68  virtual void SetAudioTrackDevice(eTrackType Type);
69 
70 // Audio facilities
71 
72 private:
74 protected:
75  virtual int GetAudioChannelDevice(void);
76  virtual void SetAudioChannelDevice(int AudioChannel);
77  virtual void SetVolumeDevice(int Volume);
78 
79 // Player facilities
80 
81 private:
85  bool freezed;
86  bool trickMode;
90 
91  // Pes2Ts conversion stuff
92  uint8_t videoCounter;
93  uint8_t audioCounter;
94  void BuildTsPacket(uint8_t * TsBuffer, bool PusiSet, uint16_t Pid, uint8_t Counter, const uint8_t * Data, uint32_t Length);
95  uint32_t PesToTs(uint8_t * TsBuffer, uint16_t Pid, uint8_t & Counter, const uint8_t * Data, uint32_t Length);
96 
97 protected:
99  virtual bool CanReplay(void) const;
100  virtual bool SetPlayMode(ePlayMode PlayMode);
101  virtual int PlayVideo(const uchar *Data, int Length);
102  virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
103  virtual int PlayTsVideo(const uchar *Data, int Length);
104  virtual int PlayTsAudio(const uchar *Data, int Length);
105 public:
106  virtual int64_t GetSTC(void);
107  virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter);
108  virtual void ScaleVideo(const cRect &Rect = cRect::Null);
109 #if (APIVERSNUM >= 20103)
110  virtual void TrickSpeed(int Speed, bool Forward);
111 #else
112  virtual void TrickSpeed(int Speed);
113 #endif
114  virtual void Clear(void);
115  virtual void Play(void);
116  virtual void Freeze(void);
117  virtual void Mute(void);
118  virtual void StillPicture(const uchar *Data, int Length);
119  virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
120  virtual bool Flush(int TimeoutMs = 0);
121 
122 // HDFF specific things
123 
124 public:
125  static HDFF::cHdffCmdIf *GetHdffCmdHandler(void);
126 private:
127  static int devHdffOffset;//TODO
128  bool isHdffPrimary;//TODO implicit!
130 };
131 
133 private:
135 public:
136  cDvbHdFfDeviceProbe(void);
137  virtual bool Probe(int Adapter, int Frontend);
138  void SetOutputOnly(bool On) { outputOnly = On; }
139  };
140 
141 #endif //__DVBHDFFDEVICE_H
cDvbHdFfDevice::GetSpuDecoder
virtual cSpuDecoder * GetSpuDecoder(void)
Returns a pointer to the device's SPU decoder (or NULL, if this device doesn't have an SPU decoder).
Definition: dvbhdffdevice.c:130
cPoller
Definition: tools.h:393
cDvbHdFfDevice::Mute
virtual void Mute(void)
Turns off audio while replaying.
Definition: dvbhdffdevice.c:674
cDvbHdFfDevice::CanScaleVideo
virtual cRect CanScaleVideo(const cRect &Rect, int Alignment=taCenter)
Asks the output device whether it can scale the currently shown video in such a way that it fits into...
Definition: dvbhdffdevice.c:584
cDvbHdFfDevice::GetAudioChannelDevice
virtual int GetAudioChannelDevice(void)
Gets the current audio channel, which is stereo (0), mono left (1) or mono right (2).
Definition: dvbhdffdevice.c:442
cDvbHdFfDevice::MakePrimaryDevice
virtual void MakePrimaryDevice(bool On)
Informs a device that it will be the primary device.
Definition: dvbhdffdevice.c:115
cDvbHdFfDevice::fd_audio
int fd_audio
Definition: dvbhdffdevice.h:21
cDvbHdFfDevice::SetPid
virtual bool SetPid(cPidHandle *Handle, int Type, bool On)
Does the actual PID setting on this device.
Definition: dvbhdffdevice.c:293
cDvbHdFfDevice::StillPicture
virtual void StillPicture(const uchar *Data, int Length)
Displays the given I-frame as a still picture.
Definition: dvbhdffdevice.c:690
cDvbHdFfDevice::playAudioPid
int playAudioPid
Definition: dvbhdffdevice.h:83
cDvbHdFfDevice::isHdffPrimary
bool isHdffPrimary
Definition: dvbhdffdevice.h:128
cDvbHdFfDevice::Clear
virtual void Clear(void)
Clears all video and audio data from the device.
Definition: dvbhdffdevice.c:644
cDvbHdFfDevice::PlayVideo
virtual int PlayVideo(const uchar *Data, int Length)
Plays the given data block as video.
Definition: dvbhdffdevice.c:829
cDvbHdFfDevice::GetOsdSize
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect)
Returns the Width, Height and PixelAspect ratio the OSD should use to best fit the resolution of the ...
Definition: dvbhdffdevice.c:288
cDvbHdFfDevice::playVideoPid
int playVideoPid
Definition: dvbhdffdevice.h:82
cDvbHdFfDevice::playMode
ePlayMode playMode
Definition: dvbhdffdevice.h:98
cDvbHdFfDevice::trickMode
bool trickMode
Definition: dvbhdffdevice.h:86
cDvbHdFfDevice::isPlayingVideo
bool isPlayingVideo
Definition: dvbhdffdevice.h:87
cDvbHdFfDevice
The cDvbHdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
Definition: dvbhdffdevice.h:19
cDvbDeviceProbe
Definition: dvbdevice.h:299
cDvbHdFfDevice::GetSTC
virtual int64_t GetSTC(void)
Gets the current System Time Counter, which can be used to synchronize audio, video and subtitles.
Definition: dvbhdffdevice.c:555
cDvbHdFfDevice::ScaleVideo
virtual void ScaleVideo(const cRect &Rect=cRect::Null)
Scales the currently shown video in such a way that it fits into the given Rect.
Definition: dvbhdffdevice.c:589
cDvbHdFfDevice::fd_osd
int fd_osd
Definition: dvbhdffdevice.h:21
cDvbHdFfDevice::TrickSpeed
virtual void TrickSpeed(int Speed)
Definition: dvbhdffdevice.c:632
cDvbHdFfDevice::PesToTs
uint32_t PesToTs(uint8_t *TsBuffer, uint16_t Pid, uint8_t &Counter, const uint8_t *Data, uint32_t Length)
Definition: dvbhdffdevice.c:808
cDvbHdFfDevice::HasDecoder
virtual bool HasDecoder(void) const
Tells whether this device has an MPEG decoder.
Definition: dvbhdffdevice.c:125
cDvbHdFfDevice::SetVideoDisplayFormat
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
Sets the video display format to the given one (only useful if this device has an MPEG decoder).
Definition: dvbhdffdevice.c:247
cDvbHdFfDevice::~cDvbHdFfDevice
virtual ~cDvbHdFfDevice()
Definition: dvbhdffdevice.c:104
cDvbHdFfDeviceProbe::SetOutputOnly
void SetOutputOnly(bool On)
Definition: dvbhdffdevice.h:138
cDvbHdFfDevice::Play
virtual void Play(void)
Sets the device into play mode (after a previous trick mode).
Definition: dvbhdffdevice.c:654
cDvbHdFfDevice::cDvbHdFfDevice
cDvbHdFfDevice(int Adapter, int Frontend, bool OutputOnly)
Definition: dvbhdffdevice.c:32
taCenter
@ taCenter
Definition: osd.h:158
cDvbHdFfDevice::SetAudioChannelDevice
virtual void SetAudioChannelDevice(int AudioChannel)
Sets the audio channel to stereo (0), mono left (1) or mono right (2).
Definition: dvbhdffdevice.c:447
uchar
unsigned char uchar
Definition: tools.h:31
cDevice::cPidHandle
Definition: device.h:391
ePlayMode
ePlayMode
Definition: device.h:39
eTrackType
eTrackType
Definition: device.h:63
cDvbHdFfDevice::Flush
virtual bool Flush(int TimeoutMs=0)
Returns true if the device's output buffers are empty, i.
Definition: dvbhdffdevice.c:775
cDvbHdFfDevice::playPcrPid
int playPcrPid
Definition: dvbhdffdevice.h:84
cDvbHdFfDevice::PlayAudio
virtual int PlayAudio(const uchar *Data, int Length, uchar Id)
Plays the given data block as audio.
Definition: dvbhdffdevice.c:859
cDvbHdFfDevice::PlayTsAudio
virtual int PlayTsAudio(const uchar *Data, int Length)
Plays the given data block as audio.
Definition: dvbhdffdevice.c:952
cDvbHdFfDevice::audioChannel
int audioChannel
Definition: dvbhdffdevice.h:73
cDvbHdFfDevice::SetPlayMode
virtual bool SetPlayMode(ePlayMode PlayMode)
Sets the device into the given play mode.
Definition: dvbhdffdevice.c:497
cDvbDevice
The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API.
Definition: dvbdevice.h:171
cDvbSpuDecoder
Definition: dvbspu.h:95
cChannel
Definition: channels.h:89
cDvbHdFfDeviceProbe::Probe
virtual bool Probe(int Adapter, int Frontend)
Probes for a DVB device at the given Adapter and creates the appropriate object derived from cDvbDevi...
Definition: dvbhdffdevice.c:997
cDvbHdFfDevice::SetChannelDevice
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView)
Sets the device to the given channel (actual physical setup).
Definition: dvbhdffdevice.c:390
cDvbHdFfDevice::BuildTsPacket
void BuildTsPacket(uint8_t *TsBuffer, bool PusiSet, uint16_t Pid, uint8_t Counter, const uint8_t *Data, uint32_t Length)
Definition: dvbhdffdevice.c:781
cSpuDecoder
Definition: spu.h:19
cRect::Null
static const cRect Null
Definition: osd.h:357
cDvbHdFfDevice::spuDecoder
cDvbSpuDecoder * spuDecoder
Definition: dvbhdffdevice.h:34
cDvbHdFfDeviceProbe::outputOnly
bool outputOnly
Definition: dvbhdffdevice.h:134
cDvbHdFfDevice::mHdffCmdIf
HDFF::cHdffCmdIf * mHdffCmdIf
Definition: dvbhdffdevice.h:129
cDvbHdFfDeviceProbe::cDvbHdFfDeviceProbe
cDvbHdFfDeviceProbe(void)
Definition: dvbhdffdevice.c:992
cDvbHdFfDevice::SetAudioTrackDevice
virtual void SetAudioTrackDevice(eTrackType Type)
Sets the current audio track to the given value.
Definition: dvbhdffdevice.c:458
cDvbHdFfDeviceProbe
Definition: dvbhdffdevice.h:132
cDvbHdFfDevice::CanReplay
virtual bool CanReplay(void) const
Returns true if this device can currently start a replay session.
Definition: dvbhdffdevice.c:492
cDvbHdFfDevice::TurnOffLiveMode
void TurnOffLiveMode(bool LiveView)
Definition: dvbhdffdevice.c:375
cDvbHdFfDevice::supportsPcrInTransferMode
bool supportsPcrInTransferMode
Definition: dvbhdffdevice.h:89
cDvbHdFfDevice::ProvidesSource
virtual bool ProvidesSource(int Source) const
Returns true if this device can provide the given source.
Definition: dvbhdffdevice.c:361
cDvbHdFfDevice::Poll
virtual bool Poll(cPoller &Poller, int TimeoutMs=0)
Returns true if the device itself or any of the file handles in Poller is ready for further action.
Definition: dvbhdffdevice.c:769
cDvbHdFfDevice::GetVideoSize
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect)
Returns the Width, Height and VideoAspect ratio of the currently displayed video material.
Definition: dvbhdffdevice.c:267
cDvbHdFfDevice::Probe
static bool Probe(int Adapter, int Frontend)
cDvbHdFfDevice::freezed
bool freezed
Definition: dvbhdffdevice.h:85
cDvbHdFfDevice::devHdffOffset
static int devHdffOffset
Definition: dvbhdffdevice.h:127
cDvbHdFfDevice::videoCounter
uint8_t videoCounter
Definition: dvbhdffdevice.h:92
cDvbHdFfDevice::GrabImage
virtual uchar * GrabImage(int &Size, bool Jpeg=true, int Quality=-1, int SizeX=-1, int SizeY=-1)
Grabs the currently visible screen image.
Definition: dvbhdffdevice.c:137
cDvbHdFfDevice::isTransferMode
bool isTransferMode
Definition: dvbhdffdevice.h:88
cDvbHdFfDevice::fd_video
int fd_video
Definition: dvbhdffdevice.h:21
cDvbHdFfDevice::audioCounter
uint8_t audioCounter
Definition: dvbhdffdevice.h:93
cDvbHdFfDevice::SetVolumeDevice
virtual void SetVolumeDevice(int Volume)
Sets the audio volume on this device (Volume = 0...255).
Definition: dvbhdffdevice.c:453
cDvbHdFfDevice::NumProvidedSystems
virtual int NumProvidedSystems(void) const
Returns the number of individual "delivery systems" this device provides.
Definition: dvbhdffdevice.c:368
eVideoDisplayFormat
eVideoDisplayFormat
Definition: device.h:58
cDvbHdFfDevice::GetHdffCmdHandler
static HDFF::cHdffCmdIf * GetHdffCmdHandler(void)
Definition: dvbhdffdevice.c:979
cDvbHdFfDevice::outputOnly
bool outputOnly
Definition: dvbhdffdevice.h:22
cDvbDevice::Adapter
int Adapter(void) const
Definition: dvbdevice.h:194
cDvbHdFfDevice::PlayTsVideo
virtual int PlayTsVideo(const uchar *Data, int Length)
Plays the given data block as video.
Definition: dvbhdffdevice.c:910
cDvbDevice::Frontend
int Frontend(void) const
Definition: dvbdevice.c:1877
hdffcmd.h
HDFF::cHdffCmdIf
Definition: hdffcmd.h:16
cRect
Definition: osd.h:352
cDvbHdFfDevice::Freeze
virtual void Freeze(void)
Puts the device into "freeze frame" mode.
Definition: dvbhdffdevice.c:666