summaryrefslogtreecommitdiff
path: root/xineDevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'xineDevice.h')
-rw-r--r--xineDevice.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/xineDevice.h b/xineDevice.h
new file mode 100644
index 0000000..9a98837
--- /dev/null
+++ b/xineDevice.h
@@ -0,0 +1,197 @@
+
+#ifndef __XINEDEVICE_H
+#define __XINEDEVICE_H
+
+
+
+#include "xineCommon.h"
+
+#include <vdr/dvbspu.h>
+#include <vdr/device.h>
+
+#include "xineLib.h"
+
+
+
+class cPlugin;
+
+namespace PluginXine
+{
+ class cXineSettings;
+ class cXineOsd;
+ class cXineDevice;
+
+ class cXineSpuDecoder : public cDvbSpuDecoder
+ {
+ cXineDevice *const m_xineDevice;
+
+ void ptsAdjust(uint32_t &pts);
+
+ public:
+ cXineSpuDecoder(cXineDevice *const xineDevice)
+ : cDvbSpuDecoder()
+ , m_xineDevice(xineDevice)
+ {
+ }
+
+ virtual int setTime(uint32_t pts);
+ };
+
+ class cXineDevice : public cDevice, public cXineLibEvents
+ {
+ cXineSettings &m_settings;
+
+ bool m_osdUpdateLocked;
+ cXineOsd *m_currentOsd;
+ cXineSpuDecoder *m_spuDecoder;
+
+ virtual bool HasDecoder(void) const;
+ virtual cSpuDecoder *GetSpuDecoder(void);
+ virtual bool CanReplay(void) const;
+ virtual bool SetPlayMode(ePlayMode PlayMode);
+ virtual bool HasIBPTrickSpeed(void);
+ virtual void TrickSpeed(int Speed, bool IBP);
+ 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 PlayTs(const uchar *Data, int Length, bool VideoOnly = false);
+ virtual int PlayTsImpl(const uchar *Data, int Length, bool VideoOnly = false);
+ virtual int PlaySingleTs(const uchar *Data, int Length, bool VideoOnly = false);
+ virtual void PlayTsTrampoline(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 PlayVideo(const uchar *Data, int Length);
+ int PlayVideo1(const uchar *Data, int Length, const bool stillImageData);
+ int PlayVideo2(const uchar *Data, int Length, const bool stillImageData);
+ int PlayVideo3(const uchar *Data, int Length, const bool stillImageData);
+ int PlayAudio2(const uchar *Data, int Length);
+ int PlayAudio3(const uchar *Data, int Length);
+ int PlayCommon(const uchar *Data, int Length, const bool stillImageData);
+ int PlayCommon1(const uchar *Data, int Length, int64_t ptsForce);
+ int PlayCommon2(const uchar *Data, int Length, int64_t ptsForce);
+ int PlayCommon3(const uchar *Data, int Length, int64_t ptsForce);
+
+#if APIVERSNUM >= 10338
+ virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
+#else
+ virtual bool GrabImage(const char *FileName, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
+#endif
+
+ bool m_is16_9;
+ virtual void SetVideoFormat(bool VideoFormat16_9);
+ virtual void SetVolumeDevice(int Volume);
+#if APIVERSNUM >= 10707
+#if APIVERSNUM >= 10708
+ virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
+ virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
+#else
+ virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect);
+#endif
+#endif
+
+#if APIVERSNUM >= 10307
+ virtual void MakePrimaryDevice(bool On);
+#endif
+
+ int m_audioChannel;
+
+#if APIVERSNUM < 10318
+ virtual void PlayAudio(const uchar *Data, int Length);
+#else
+ virtual int GetAudioChannelDevice(void);
+ virtual void SetAudioChannelDevice(int AudioChannel);
+ virtual void SetDigitalAudioDevice(bool On);
+#if APIVERSNUM < 10342
+ virtual int PlayAudio(const uchar *Data, int Length);
+#else
+ virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
+#endif
+#endif
+
+ int PlayAudioCommon(const uchar *Data, int Length);
+
+ bool open();
+ void close();
+
+ int PushOut();
+ void initStream();
+ void reshowCurrentOsd(const bool dontOptimize = true, const int frameLeft = -1, const int frameTop = -1, const int frameWidth = -1, const int frameHeight = -1, const int frameZoomX = -1, const int frameZoomY = -1, const bool unlockOsdUpdate = false);
+ virtual void OnClientConnect();
+ virtual void OnClientDisconnect();
+ virtual void ReshowCurrentOSD(const int frameLeft, const int frameTop, const int frameWidth, const int frameHeight, const int frameZoomX, const int frameZoomY, const bool unlockOsdUpdate);
+ virtual void LockOsdUpdate();
+ virtual bool OsdUpdateLocked();
+ virtual void DiscontinuityDetected();
+ virtual bool DeviceReplayingOrTransferring();
+
+ cPlugin *const m_plugin;
+ int m_switchPrimaryDeviceDeviceNo;
+ cMutex m_switchPrimaryDeviceMutex;
+ cCondVar m_switchPrimaryDeviceCond;
+ void switchPrimaryDevice(const int deviceNo, const bool waitForExecution);
+ void mainMenuTrampoline();
+ cMutex m_playTsMutex;
+
+ public:
+ const cXineSettings &Settings() const
+ {
+ return m_settings;
+ }
+
+ virtual int64_t GetSTC(void);
+
+#if APIVERSNUM < 10307
+ virtual cOsdBase *NewOsd(int w, int h, int x, int y);
+#elif APIVERSNUM < 10509
+ virtual cOsd *NewOsd(int w, int h, int x, int y);
+#else
+ virtual cOsd *NewOsd(int w, int h, int x, int y, uint Level, bool TrueColor = false);
+#endif
+ bool ChangeCurrentOsd(cXineOsd *osd, bool on);
+
+ cXineDevice(cPlugin *const plugin, cXineSettings &settings, cXineRemote *remote);
+ virtual ~cXineDevice();
+
+#if APIVERSNUM < 10307
+ void OnFreeOsd(cOsdBase *const osd);
+#else
+ void OnFreeOsd(cOsd *const osd);
+#endif
+
+ cXineLib m_xineLib;
+ cMutex m_osdMutex;
+
+ cMutex m_pmMutex;
+ cCondVar m_pmCondVar;
+
+ static bool Create(cPlugin *const plugin, cXineSettings &settings, cXineRemote *remote);
+ static bool Open();
+ static void Stop();
+ static cXineDevice *GetDevice();
+
+ static void MainMenuTrampoline()
+ {
+ GetDevice()->mainMenuTrampoline();
+ }
+
+ bool hasNoSignalStream() const
+ {
+ return m_xineLib.hasNoSignalStream();
+ }
+
+ bool SupportsTrueColorOSD() const
+ {
+ return m_xineLib.SupportsTrueColorOSD();
+ }
+ };
+
+};
+
+
+
+#endif //__XINEDEVICE_H