TranscodingSetup : add framerate settings (25k, 50k)
[vuplus_dvbapp] / lib / service / servicedvbrecord.h
1 #ifndef __servicedvbrecord_h
2 #define __servicedvbrecord_h
3
4 #include <lib/service/iservice.h>
5 #include <lib/dvb/idvb.h>
6
7 #include <lib/dvb/pmt.h>
8 #include <lib/dvb/eit.h>
9 #include <set>
10
11 #include <lib/service/servicedvb.h>
12
13 class eDVBServiceRecord: public eDVBServiceBase,
14         public iRecordableService, 
15         public iStreamableService,
16         public iSubserviceList,
17         public Object
18 {
19         DECLARE_REF(eDVBServiceRecord);
20 public:
21         RESULT connectEvent(const Slot2<void,iRecordableService*,int> &event, ePtr<eConnection> &connection);
22         RESULT prepare(const char *filename, time_t begTime, time_t endTime, int eit_event_id, const char *name, const char *descr, const char *tags);
23         RESULT prepareStreaming();
24         RESULT start(bool simulate=false);
25         RESULT stop();
26         RESULT stream(ePtr<iStreamableService> &ptr);
27         RESULT getError(int &error) { error = m_error; return 0; }
28         RESULT frontendInfo(ePtr<iFrontendInformation> &ptr);
29         RESULT subServices(ePtr<iSubserviceList> &ptr);
30
31                 // iStreamableService
32         PyObject *getStreamingData();
33
34                 // iSubserviceList
35         int getNumberOfSubservices();
36         RESULT getSubservice(eServiceReference &subservice, unsigned int n);
37 private:
38         enum { stateIdle, statePrepared, stateRecording };
39         bool m_simulate;
40         int m_state, m_want_record;
41         bool m_is_stream_client;
42         friend class eServiceFactoryDVB;
43         eDVBServiceRecord(const eServiceReferenceDVB &ref, bool isstreamclient = false);
44         
45         eDVBServiceEITHandler m_event_handler;
46         
47         eServiceReferenceDVB m_ref;
48         
49         ePtr<iDVBTSRecorder> m_record;
50         ePtr<eConnection> m_con_record_event;
51         
52         int m_recording, m_tuned, m_error;
53         std::set<int> m_pids_active;
54         std::string m_filename;
55
56         std::map<int,pts_t> m_event_timestamps;
57         int m_target_fd;
58         int m_streaming;
59         int m_last_event_id;
60         
61         int doPrepare();
62         int doRecord();
63
64                         /* events */
65         void serviceEvent(int event);
66         Signal2<void,iRecordableService*,int> m_event;
67         
68                         /* recorder events */
69         void recordEvent(int event);
70
71                         /* eit updates */
72         void gotNewEvent();
73         void saveCutlist();
74 };
75
76 #endif