X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fservice%2Fservicehdmi.h;fp=lib%2Fservice%2Fservicehdmi.h;h=6db9c4371e63aa3f9c42ec22fa77987e774fc3b7;hp=0000000000000000000000000000000000000000;hb=4911a0121954f6b6657ba28fab8d9dd9031d9a59;hpb=e41f07f1d0855ff8e47059f109413a41a065268b diff --git a/lib/service/servicehdmi.h b/lib/service/servicehdmi.h new file mode 100644 index 0000000..6db9c43 --- /dev/null +++ b/lib/service/servicehdmi.h @@ -0,0 +1,127 @@ +#ifndef __servicehdmi_h +#define __servicehdmi_h + +#include +#include +#include +#include + +class eStaticServiceHDMIInfo; + +class eServiceFactoryHDMI: public iServiceHandler +{ + DECLARE_REF(eServiceFactoryHDMI); +public: + eServiceFactoryHDMI(); + virtual ~eServiceFactoryHDMI(); + enum { id = 0x2000 }; + + RESULT play(const eServiceReference &, ePtr &ptr); + RESULT record(const eServiceReference &, ePtr &ptr); + RESULT list(const eServiceReference &, ePtr &ptr); + RESULT info(const eServiceReference &, ePtr &ptr); + RESULT offlineOperations(const eServiceReference &, ePtr &ptr); + void getNavInstance(ePtr &nav_instance); +private: + ePtr m_service_info; + ePtr m_nav_instance; +}; + +class eStaticServiceHDMIInfo: public iStaticServiceInformation +{ + DECLARE_REF(eStaticServiceHDMIInfo); + friend class eServiceFactoryHDMI; + eStaticServiceHDMIInfo(); +public: + RESULT getName(const eServiceReference &ref, std::string &name); + int getLength(const eServiceReference &ref); + int getInfo(const eServiceReference &ref, int w); + int isPlayable(const eServiceReference &ref, const eServiceReference &ignore, bool simulate) { return 1; } + long long getFileSize(const eServiceReference &ref); +}; + +class eServiceHDMI: public iPlayableService, public iServiceInformation, public Object +{ + DECLARE_REF(eServiceHDMI); +public: + virtual ~eServiceHDMI(); + + RESULT connectEvent(const Slot2 &event, ePtr &connection); + RESULT start(); + RESULT stop(); + RESULT setTarget(int target); + + RESULT pause(ePtr &ptr) { ptr = 0; return -1; } + RESULT seek(ePtr &ptr) { ptr = 0; return -1; } + RESULT audioTracks(ePtr &ptr) { ptr = 0; return -1; } + RESULT audioChannel(ePtr &ptr) { ptr = 0; return -1; } + RESULT subtitle(ePtr &ptr) { ptr = 0; return -1; } + RESULT audioDelay(ePtr &ptr) { ptr = 0; return -1; } + + RESULT frontendInfo(ePtr &ptr) { ptr = 0; return -1; } + RESULT subServices(ePtr &ptr) { ptr = 0; return -1; } + RESULT timeshift(ePtr &ptr) { ptr = 0; return -1; } + RESULT cueSheet(ePtr &ptr) { ptr = 0; return -1; } + + RESULT rdsDecoder(ePtr &ptr) { ptr = 0; return -1; } + RESULT keys(ePtr &ptr) { ptr = 0; return -1; } + RESULT stream(ePtr &ptr) { ptr = 0; return -1; } + RESULT streamed(ePtr &ptr) { ptr = 0; return -1; } + + RESULT info(ePtr&); + + RESULT getName(std::string &name); + int getInfo(int w); + std::string getInfoString(int w); + PyObject *getInfoObject(int w); + +private: + friend class eServiceFactoryHDMI; + eServiceHDMI(eServiceReference ref); + Signal2 m_event; + eServiceReference m_ref; + int m_decoder_index; + ePtr m_decoder; +}; + +class eServiceHDMIRecord: public eDVBServiceBase, public iRecordableService, public Object +{ + DECLARE_REF(eServiceHDMIRecord); +public: + eServiceHDMIRecord(const eServiceReference &ref, ePtr &nav_instance); + RESULT connectEvent(const Slot2 &event, ePtr &connection); + RESULT prepare(const char *filename, time_t begTime, time_t endTime, int eit_event_id, const char *name, const char *descr, const char *tags); + RESULT prepareStreaming(); + RESULT start(bool simulate=false); + RESULT stop(); + RESULT getError(int &error) { error = m_error; return 0; } + RESULT frontendInfo(ePtr &ptr); + RESULT stream(ePtr &ptr); + RESULT subServices(ePtr &ptr); + +private: + enum { stateIdle, statePrepared, stateRecording }; + bool m_simulate; + int m_state; + eDVBRecordFileThread *m_thread; + eServiceReference m_ref; + + int m_recording, m_error; + std::string m_filename; + + int m_target_fd; + int m_encoder_fd; + int m_decoder; + ePtr m_nav_instance; + + int doPrepare(); + int doRecord(); + + /* events */ + Signal2 m_event; + + /* recorder events */ + void recordEvent(int event); +}; + +#endif