summaryrefslogtreecommitdiff
path: root/dynamicdevice.h
blob: 1fe9831185ebe8014a4491c772876bd4166b1e89 (plain)
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
#ifndef __DYNAMITEDEVICE_H
#define __DYNAMITEDEVICE_H

#include <vdr/dvbdevice.h>

enum eDynamicDeviceReturnCode { ddrcSuccess,
                                ddrcNoFreeDynDev,
                                ddrcAlreadyAttached,
                                ddrcNotFound,
                                ddrcIsPrimaryDevice,
                                ddrcIsReceiving,
                                ddrcNotAllowed,
                                ddrcNotSupported
                             };

class cDynamicDevice : public cDevice {
private:
  static int defaultGetTSTimeout;

  static int numDynamicDevices;
  static cMutex arrayMutex;
  static cDynamicDevice *dynamicdevice[MAXDEVICES];
  static int IndexOf(const char *DevPath, int &NextFreeIndex);
public:
  static cDvbDeviceProbe *dvbprobe;
  static int NumDynamicDevices(void) { return numDynamicDevices; }
         ///< Returns the total number of dynamic devices.
  static bool ProcessQueuedCommands(void);
  static void DetachAllDevices(void);
  static cString ListAllDevices(int &ReplyCode); // for SVDRP command LSTD
  static cString AttachDevicePattern(const char *Pattern);
  static eDynamicDeviceReturnCode AttachDevice(const char *DevPath);
  static eDynamicDeviceReturnCode DetachDevice(const char *DevPath);
  static eDynamicDeviceReturnCode SetLockDevice(const char *DevPath, bool Lock);
  static eDynamicDeviceReturnCode SetGetTSTimeout(const char *DevPath, int Seconds);
  static void SetDefaultGetTSTimeout(int Seconds);
  static bool IsAttached(const char *DevPath);
private:
  int index;
  cString *devpath;
  bool     isDetachable;
  time_t   getTSWatchdog;
  int      getTSTimeout;
public:
  cDynamicDevice();
  void DeleteSubDevice(void);
protected:
  virtual ~cDynamicDevice();
  virtual bool Ready(void);
  virtual void MakePrimaryDevice(bool On);
public:
  virtual bool HasDecoder(void) const;
  virtual cSpuDecoder *GetSpuDecoder(void);
  virtual bool ProvidesSource(int Source) const;
  virtual bool ProvidesTransponder(const cChannel *Channel) const;
  virtual bool ProvidesTransponderExclusively(const cChannel *Channel) const;
  virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
  virtual int NumProvidedSystems(void) const;
  virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
  virtual bool IsTunedToTransponder(const cChannel *Channel);
  virtual bool MaySwitchTransponder(void);
protected:
  virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
public:
  virtual bool HasLock(int TimeoutMs = 0);
  virtual bool HasProgramme(void);
protected:
  virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
public:
  virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
  virtual void CloseFilter(int Handle);
  virtual bool HasCi(void);
  virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
  virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
  virtual void SetVideoFormat(bool VideoFormat16_9);
  virtual eVideoSystem GetVideoSystem(void);
  virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
  virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
protected:
  virtual void SetAudioTrackDevice(eTrackType Type);
  virtual void SetSubtitleTrackDevice(eTrackType Type);
  virtual int GetAudioChannelDevice(void);
  virtual void SetAudioChannelDevice(int AudioChannel);
  virtual void SetVolumeDevice(int Volume);
  virtual void SetDigitalAudioDevice(bool On);
  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 PlaySubtitle(const uchar *Data, int Length);
  virtual int PlayPesPacket(const uchar *Data, int Length, bool VideoOnly = false);
  virtual int PlayTsVideo(const uchar *Data, int Length);
  virtual int PlayTsAudio(const uchar *Data, int Length);
  virtual int PlayTsSubtitle(const uchar *Data, int Length);
public:
  virtual int64_t GetSTC(void);
  virtual bool IsPlayingVideo(void) const;
  virtual bool HasIBPTrickSpeed(void);
  virtual void TrickSpeed(int Speed);
  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);
  virtual int PlayPes(const uchar *Data, int Length, bool VideoOnly = false);
  virtual int PlayTs(const uchar *Data, int Length, bool VideoOnly = false);
protected:
  virtual bool OpenDvr(void);
  virtual void CloseDvr(void);
  virtual bool GetTSPacket(uchar *&Data);
  
#ifdef YAVDR_PATCHES
//opt-21_internal-cam-devices.dpatch
  virtual bool HasInternalCam(void);
//opt-44_rotor.dpatch 
  virtual bool SendDiseqcCmd(dvb_diseqc_master_cmd cmd);
//opt-64_lnb-sharing.dpatch 
  virtual void SetLnbNrFromSetup(void);
  virtual int LnbNr(void) const;
  virtual bool IsShareLnb(const cDevice *Device);
  virtual bool IsLnbConflict(const cChannel *Channel);
#endif
  };

#endif //__DYNAMITEDEVICE_H