1f8e6647deb0038db1b9ca1dd9492d6503410e4a
[vuplus_dvbapp] / lib / service / servicehdmi.h
1 #ifndef __servicehdmi_h
2 #define __servicehdmi_h
3
4 #include <lib/base/message.h>
5 #include <lib/service/iservice.h>
6 #include <lib/service/servicedvb.h>
7 #include <lib/nav/core.h>
8
9 class eStaticServiceHDMIInfo;
10
11 class eServiceFactoryHDMI: public iServiceHandler
12 {
13         DECLARE_REF(eServiceFactoryHDMI);
14 public:
15         eServiceFactoryHDMI();
16         virtual ~eServiceFactoryHDMI();
17         enum { id = 0x2000 };
18
19         RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
20         RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
21         RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
22         RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
23         RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
24         void getNavInstance(ePtr<eNavigation> &nav_instance);
25 private:
26         ePtr<eStaticServiceHDMIInfo> m_service_info;
27         ePtr<eNavigation> m_nav_instance;
28 };
29
30 class eStaticServiceHDMIInfo: public iStaticServiceInformation
31 {
32         DECLARE_REF(eStaticServiceHDMIInfo);
33         friend class eServiceFactoryHDMI;
34         eStaticServiceHDMIInfo();
35 public:
36         RESULT getName(const eServiceReference &ref, std::string &name);
37         int getLength(const eServiceReference &ref);
38         int getInfo(const eServiceReference &ref, int w);
39         int isPlayable(const eServiceReference &ref, const eServiceReference &ignore, bool simulate) { return 1; }
40         long long getFileSize(const eServiceReference &ref);
41 };
42
43 class eServiceHDMI: public iPlayableService, public iServiceInformation, public Object
44 {
45         DECLARE_REF(eServiceHDMI);
46 public:
47         virtual ~eServiceHDMI();
48
49         RESULT connectEvent(const Slot2<void, iPlayableService*, int> &event, ePtr<eConnection> &connection);
50         RESULT start();
51         RESULT stop();
52         RESULT setTarget(int target);
53
54         RESULT pause(ePtr<iPauseableService> &ptr) { ptr = 0; return -1; }
55         RESULT seek(ePtr<iSeekableService> &ptr) { ptr = 0; return -1; }
56         RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr) { ptr = 0; return -1; }
57         RESULT audioChannel(ePtr<iAudioChannelSelection> &ptr) { ptr = 0; return -1; }
58         RESULT subtitle(ePtr<iSubtitleOutput> &ptr) { ptr = 0; return -1; }
59         RESULT audioDelay(ePtr<iAudioDelay> &ptr) { ptr = 0; return -1; }
60
61         RESULT frontendInfo(ePtr<iFrontendInformation> &ptr) { ptr = 0; return -1; }
62         RESULT subServices(ePtr<iSubserviceList> &ptr) { ptr = 0; return -1; }
63         RESULT timeshift(ePtr<iTimeshiftService> &ptr) { ptr = 0; return -1; }
64         RESULT cueSheet(ePtr<iCueSheet> &ptr) { ptr = 0; return -1; }
65
66         RESULT rdsDecoder(ePtr<iRdsDecoder> &ptr) { ptr = 0; return -1; }
67         RESULT keys(ePtr<iServiceKeys> &ptr) { ptr = 0; return -1; }
68         RESULT stream(ePtr<iStreamableService> &ptr) { ptr = 0; return -1; }
69         RESULT streamed(ePtr<iStreamedService> &ptr) { ptr = 0; return -1; }
70
71         RESULT info(ePtr<iServiceInformation>&);
72
73         RESULT getName(std::string &name);
74         int getInfo(int w);
75         std::string getInfoString(int w);
76         PyObject *getInfoObject(int w);
77
78 private:
79         friend class eServiceFactoryHDMI;
80         eServiceHDMI(eServiceReference ref);
81         Signal2<void,iPlayableService*, int> m_event;
82         eServiceReference m_ref;
83         int m_decoder_index;
84         ePtr<iTSMPEGDecoder> m_decoder;
85 };
86
87 class eServiceHDMIRecord: public eDVBServiceBase, public iRecordableService, public Object
88 {
89         DECLARE_REF(eServiceHDMIRecord);
90 public:
91         eServiceHDMIRecord(const eServiceReference &ref, ePtr<eNavigation> &nav_instance);
92         RESULT connectEvent(const Slot2<void,iRecordableService*,int> &event, ePtr<eConnection> &connection);
93         RESULT prepare(const char *filename, time_t begTime, time_t endTime, int eit_event_id, const char *name, const char *descr, const char *tags, bool descramble, bool recordecm);
94         RESULT prepareStreaming();
95         RESULT start(bool simulate=false);
96         RESULT stop();
97         RESULT getError(int &error) { error = m_error; return 0; }
98         RESULT frontendInfo(ePtr<iFrontendInformation> &ptr);
99         RESULT stream(ePtr<iStreamableService> &ptr);
100         RESULT subServices(ePtr<iSubserviceList> &ptr);
101         RESULT getServiceType(int &serviceType) { serviceType = -1; return -1; };
102
103 private:
104         enum { stateIdle, statePrepared, stateRecording };
105         bool m_simulate;
106         int m_state;
107         eDVBRecordFileThread *m_thread;
108         eServiceReference m_ref;
109
110         int m_recording, m_error;
111         std::string m_filename;
112
113         int m_target_fd;
114         int m_encoder_fd;
115         int m_decoder;
116         ePtr<eNavigation> m_nav_instance;
117
118         int doPrepare();
119         int doRecord();
120
121         /* events */
122         Signal2<void,iRecordableService*,int> m_event;
123
124         /* recorder events */
125         void recordEvent(int event);
126 };
127
128 #endif