vdr
1.7.27
|
00001 /* 00002 * dvbhdffdevice.h: The DVB HD Full Featured device interface 00003 * 00004 * See the README file for copyright information and how to reach the author. 00005 * 00006 * $Id: dvbhdffdevice.h 1.7 2011/09/10 10:17:32 kls Exp $ 00007 */ 00008 00009 #ifndef __DVBHDFFDEVICE_H 00010 #define __DVBHDFFDEVICE_H 00011 00012 #include "hdffcmd.h" 00013 #include "vdr/dvbdevice.h" 00014 #include "vdr/dvbspu.h" 00015 00017 00018 class cDvbHdFfDevice : public cDvbDevice { 00019 private: 00020 int fd_osd, fd_audio, fd_video; 00021 protected: 00022 virtual void MakePrimaryDevice(bool On); 00023 public: 00024 static bool Probe(int Adapter, int Frontend); 00025 cDvbHdFfDevice(int Adapter, int Frontend); 00026 virtual ~cDvbHdFfDevice(); 00027 virtual bool HasDecoder(void) const; 00028 00029 // SPU facilities 00030 00031 private: 00032 cDvbSpuDecoder *spuDecoder; 00033 public: 00034 virtual cSpuDecoder *GetSpuDecoder(void); 00035 00036 // Channel facilities 00037 00038 private: 00039 void TurnOffLiveMode(bool LiveView); 00040 protected: 00041 virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView); 00042 00043 // PID handle facilities 00044 00045 protected: 00046 virtual bool SetPid(cPidHandle *Handle, int Type, bool On); 00047 00048 // Image Grab facilities 00049 00050 public: 00051 virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1); 00052 00053 // Video format facilities 00054 00055 public: 00056 virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat); 00057 virtual void SetVideoFormat(bool VideoFormat16_9); 00058 virtual eVideoSystem GetVideoSystem(void); 00059 virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect); 00060 virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect); 00061 00062 // Track facilities 00063 00064 protected: 00065 virtual void SetAudioTrackDevice(eTrackType Type); 00066 00067 // Audio facilities 00068 00069 private: 00070 int audioChannel; 00071 protected: 00072 virtual int GetAudioChannelDevice(void); 00073 virtual void SetAudioChannelDevice(int AudioChannel); 00074 virtual void SetVolumeDevice(int Volume); 00075 virtual void SetDigitalAudioDevice(bool On); 00076 00077 // Player facilities 00078 00079 private: 00080 int playVideoPid; 00081 int playAudioPid; 00082 bool freezed; 00083 bool trickMode; 00084 00085 // Pes2Ts conversion stuff 00086 uint8_t videoCounter; 00087 uint8_t audioCounter; 00088 void BuildTsPacket(uint8_t * TsBuffer, bool PusiSet, uint16_t Pid, uint8_t Counter, const uint8_t * Data, uint32_t Length); 00089 uint32_t PesToTs(uint8_t * TsBuffer, uint16_t Pid, uint8_t & Counter, const uint8_t * Data, uint32_t Length); 00090 00091 protected: 00092 ePlayMode playMode; 00093 virtual bool CanReplay(void) const; 00094 virtual bool SetPlayMode(ePlayMode PlayMode); 00095 virtual int PlayVideo(const uchar *Data, int Length); 00096 virtual int PlayAudio(const uchar *Data, int Length, uchar Id); 00097 virtual int PlayTsVideo(const uchar *Data, int Length); 00098 virtual int PlayTsAudio(const uchar *Data, int Length); 00099 public: 00100 virtual int64_t GetSTC(void); 00101 virtual void TrickSpeed(int Speed); 00102 virtual void Clear(void); 00103 virtual void Play(void); 00104 virtual void Freeze(void); 00105 virtual void Mute(void); 00106 virtual void StillPicture(const uchar *Data, int Length); 00107 virtual bool Poll(cPoller &Poller, int TimeoutMs = 0); 00108 virtual bool Flush(int TimeoutMs = 0); 00109 00110 // HDFF specific things 00111 00112 public: 00113 static HDFF::cHdffCmdIf *GetHdffCmdHandler(void); 00114 private: 00115 static int devHdffOffset;//TODO 00116 bool isHdffPrimary;//TODO implicit! 00117 HDFF::cHdffCmdIf *mHdffCmdIf; 00118 }; 00119 00120 class cDvbHdFfDeviceProbe : public cDvbDeviceProbe { 00121 public: 00122 virtual bool Probe(int Adapter, int Frontend); 00123 }; 00124 00125 #endif //__DVBHDFFDEVICE_H