diff options
author | austriancoder <austriancoder> | 2004-08-05 23:05:21 +0000 |
---|---|---|
committer | austriancoder <austriancoder> | 2004-08-05 23:05:21 +0000 |
commit | c47666d42f7972e1b51f9de61ce0fa27c72f3127 (patch) | |
tree | e34a87e37901b7f892fb6f330ccb15bcba30039b /dxr3interface.h | |
download | vdr-plugin-dxr3-c47666d42f7972e1b51f9de61ce0fa27c72f3127.tar.gz vdr-plugin-dxr3-c47666d42f7972e1b51f9de61ce0fa27c72f3127.tar.bz2 |
initial import
Diffstat (limited to 'dxr3interface.h')
-rw-r--r-- | dxr3interface.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/dxr3interface.h b/dxr3interface.h new file mode 100644 index 0000000..d1df60e --- /dev/null +++ b/dxr3interface.h @@ -0,0 +1,136 @@ +#ifndef _DXR3_INTERFACE_H_ +#define _DXR3_INTERFACE_H_ + +#include <stdlib.h> +#include <stdint.h> +#include <unistd.h> +#include <linux/em8300.h> +#include <sys/ioctl.h> + +#include "dxr3vdrincludes.h" +#include "dxr3log.h" +#include "dxr3configdata.h" +#include "dxr3sysclock.h" +#include "dxr3osd.h" + +// ================================== +class cFixedLengthFrame; + +// ================================== +// interafce to dxr3-card +class cDxr3Interface : public Singleton<cDxr3Interface> +{ +public: + cDxr3Interface(); + ~cDxr3Interface(); + + // main + void Start(); + void Stop(); + + // audio + void SetAudioAnalog(); + void SetAudioDigitalPCM(); + void SetAudioDigitalAC3(); + void SetVolume(int volume) { m_volume = volume;} + void SetAudioSpeed(uint32_t speed); + void SetChannelCount(uint32_t count); + void SetAudioSampleSize(uint32_t sampleSize); + + // clock + void SetSysClock(uint32_t scr); + uint32_t GetSysClock() const; + void SetPts(uint32_t pts); + void SetSpuPts(uint32_t pts); + + // state changes + void EnableSPU(); + void DisableSPU(); + void EnableVideo() { m_VideoActive = true; } + void DisableVideo() { m_VideoActive = false; } + void EnableAudio() { m_AudioActive = true; } + void DisableAudio(); + void EnableOverlay(); + void DisanleOverlay(); + + // set/get functions + uint32_t GetAspectRatio() const; + void SetAspectRatio(uint32_t ratio); + uint32_t GetHorizontalSize() const { return m_horizontal; } + void SetHorizontalSize(uint32_t horizontal) { m_horizontal = horizontal;}; + + // play functions + void SetPlayMode(); + void Pause(); + void SingleStep(); + void PlayVideoFrame(cFixedLengthFrame* pFrame, int times = 1); + void PlayVideoFrame(const uint8_t* pBuf, int length, int times = 1); + void PlayAudioFrame(cFixedLengthFrame* pFrame); + void PlayAudioFrame(uint8_t* pBuf, int length); + void PlayAudioLpcmFrame(uint8_t* pBuf, int length); + + // external device access + void ExternalReleaseDevices(); + void ExternalReopenDevices(); + bool IsExternalReleased() const { return m_ExternalReleased; } + + // tools + void PlayBlackFrame(); + void ReOpenAudio(); + + // osd/spu + #if VDRVERSNUM < 10307 + cOsdBase* NewOsd(int x, int y); + #endif + + void ClearOsd(); + void WriteSpu(const uint8_t* pBuf, int length); + void SetButton(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t palette); + void ClearButton(); + void SetPalette(unsigned int *pal = NULL); + + // overlay functions + + // helper functions for dxr3 main osd screen + void ResetHardware(); + +private: + // file handles + int m_fdControl; + int m_fdVideo; + int m_fdSpu; + int m_fdAudio; + + // dxr3 clock + cDxr3SysClock* m_pClock; + + uint32_t m_audioChannelCount; + uint32_t m_audioDataRate; + int m_aspectDelayCounter; + uint32_t m_aspectRatio; + uint32_t m_horizontal; + uint32_t m_audioSampleSize; + uint32_t m_audioMode; + uint32_t m_spuMode; + bool m_ExternalReleased; // is dxr3 used by e.g. mplayer? + int m_volume; + bool m_AudioActive; + bool m_VideoActive; + bool m_OverlayActive; + + // spu +// cDxr3InterfaceSpu m_SpuInterface; + + void UploadMicroCode(); + void ConfigureDevice(); + void ResampleVolume(short* pcmbuf, int size); + void Resuscitation(); + +protected: + static cMutex* m_pMutex; + + static void Lock() { cDxr3Interface::m_pMutex->Lock(); } + static void Unlock() { cDxr3Interface::m_pMutex->Unlock(); } +}; + +#endif /*_DXR3_INTERFACE_H_*/ |