summaryrefslogtreecommitdiff
path: root/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'device.h')
-rw-r--r--device.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/device.h b/device.h
new file mode 100644
index 00000000..87971491
--- /dev/null
+++ b/device.h
@@ -0,0 +1,170 @@
+/*
+ * device.h:
+ *
+ * See the main source file 'xineliboutput.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: device.h,v 1.1 2006-06-03 09:50:54 phintuka Exp $
+ *
+ */
+
+#ifndef __XINELIB_DEVICE_H
+#define __XINELIB_DEVICE_H
+
+#include <vdr/config.h>
+#include <vdr/device.h>
+#include <vdr/tools.h>
+
+class cXinelibStatusMonitor;
+class cXinelibThread;
+class cChannel;
+
+class cXinelibDevice : public cDevice
+{
+ public:
+ static cXinelibDevice& Instance(void); // singleton
+ static void Dispose(void);
+
+ private:
+ static cXinelibDevice* m_pInstance; // singleton
+ cXinelibDevice(); //
+ cXinelibDevice(cXinelibDevice&); // no copy constructor
+
+ public:
+ virtual ~cXinelibDevice();
+
+ virtual bool HasDecoder(void) const { return true; };
+ virtual bool CanReplay(void) const { return true; };
+
+ virtual void MakePrimaryDevice(bool On);
+ void ForcePrimaryDevice(bool On);
+
+ virtual void Clear(void);
+ virtual void Play(void);
+ virtual void TrickSpeed(int Speed);
+ virtual void Freeze(void);
+
+ virtual void StillPicture(const uchar *Data, int Length);
+ virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
+ virtual bool Flush(int TimeoutMs = 0);
+ virtual int64_t GetSTC(void);
+
+ // Video format facilities
+ public:
+ virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
+ virtual void SetVideoFormat(bool VideoFormat16_9);
+ virtual eVideoSystem GetVideoSystem(void);
+
+ // Track facilities
+ protected:
+ virtual void SetAudioTrackDevice(eTrackType Type);
+
+ // Audio facilities
+ private:
+ int m_AudioChannel;
+ protected:
+ virtual int GetAudioChannelDevice(void) {return m_AudioChannel;}
+ virtual void SetAudioChannelDevice(int AudioChannel);
+ virtual void SetVolumeDevice(int Volume);
+ virtual void SetDigitalAudioDevice(bool On);
+ public:
+
+#if VDRVERSNUM < 10338
+ virtual bool GrabImage(const char *FileName, bool Jpeg = true,
+ int Quality = -1, int SizeX = -1, int SizeY = -1);
+
+#else
+ virtual uchar *GrabImage(int &Size, bool Jpeg = true,
+ int Quality = -1, int SizeX = -1, int SizeY = -1);
+#endif
+
+ virtual cSpuDecoder *GetSpuDecoder(void);
+
+ // Messages from StatusMonitor:
+ void SetTvMode(cChannel *Channel);
+ void SetReplayMode(void);
+ void StopOutput(void);
+
+ // device startup (from cPlugin)
+ bool StartDevice(void);
+ void StopDevice(void);
+
+ // Osd Commands (from cXinelibOsd)
+ void OsdCmd(void *cmd);
+
+ // Configuration
+ void ConfigureOSD(bool prescale_osd, bool unscaled_osd);
+ void ConfigurePostprocessing(char *deinterlace_method, int audio_delay,
+ int audio_compression, int *audio_equalizer,
+ int audio_surround);
+ void ConfigurePostprocessing(char *name, bool on=true, char *args=NULL);
+ void ConfigureVideo(int hue, int saturation, int brightness, int contrast);
+ // local mode:
+ void ConfigureWindow(int fullscreen, int width, int height,
+ int modeswitch, char *modeline,
+ int aspect, int scale_video, int field_order);
+ void ConfigureDecoder(int pes_buffers, int priority);
+ // remote mode:
+ void Listen(bool activate, int port);
+
+ // File playback
+ bool PlayFile(const char *Filename, int Position=0, bool LoopPlay=false);
+ int PlayFileCtrl(const char *Cmd);
+ bool EndOfStreamReached(void);
+
+#ifdef ENABLE_SUSPEND
+ // Suspend decoder
+ //void Housekeeping(void);
+ bool IsSuspended() {return m_suspended;};
+ void Suspend(bool onoff);
+ bool SuspendedAction(void);
+ void CheckInactivityTimer(void);
+#endif
+
+ private:
+
+ int PlayAny(const uchar *Data, int Length);
+
+ protected:
+ virtual int PlayVideo(const uchar *Data, int Length);
+ virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
+#if VDRVERSNUM< 10342
+ virtual int PlayAudio(const uchar *Data, int Length)
+ { return PlayAudio(Data, Length, 0); }
+#endif
+ virtual int PlaySpu(const uchar *Data, int Length, uchar Id);
+
+#if 0
+ // override cDevice to get DVD SPUs
+ virtual int PlayPesPacket(const uchar *Data, int Length,
+ bool VideoOnly = false);
+#endif
+
+ ePlayMode playMode;
+ virtual bool SetPlayMode(ePlayMode PlayMode);
+
+ cList<cXinelibThread> m_clients;
+ cXinelibThread *m_server;
+ cXinelibThread *m_local;
+ cXinelibStatusMonitor *m_statusMonitor;
+ cSpuDecoder *m_spuDecoder;
+
+ bool m_ac3Present;
+ bool m_spuPresent;
+#ifdef ENABLE_SUSPEND
+ bool m_suspended;
+ int m_inactivityTimer;
+#endif
+ bool m_liveMode;
+ int m_TrickSpeed;
+ int64_t m_TrickSpeedPts;
+ bool m_SkipAudio;
+ bool m_PlayingFile;
+ bool m_StreamStart;
+ bool m_RadioStream;
+ int m_AudioCount;
+
+ friend class cXineSpuDecoder;
+};
+
+#endif // __XINELIB_DEVICE_H