Support turbo2.
[vuplus_dvbapp] / lib / service / servicedvbrecord.h
index c90d0c9..7662380 100644 (file)
 
 #include <lib/service/servicedvb.h>
 
-class eDVBServiceRecord: public iRecordableService, public Object
+class eDVBServiceRecord: public eDVBServiceBase,
+       public iRecordableService, 
+       public iStreamableService,
+       public iSubserviceList,
+       public Object
 {
-DECLARE_REF(eDVBServiceRecord);
+       DECLARE_REF(eDVBServiceRecord);
 public:
-       RESULT prepare();
-       RESULT start();
+       eDVBServicePMTHandler::serviceType m_serviceType;
+
+       RESULT connectEvent(const Slot2<void,iRecordableService*,int> &event, ePtr<eConnection> &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, bool descramble, bool recordecm);
+       RESULT prepareStreaming();
+       RESULT start(bool simulate=false);
        RESULT stop();
+       RESULT stream(ePtr<iStreamableService> &ptr);
+       RESULT getError(int &error) { error = m_error; return 0; }
+       RESULT frontendInfo(ePtr<iFrontendInformation> &ptr);
+       RESULT subServices(ePtr<iSubserviceList> &ptr);
+       RESULT getServiceType(int &serviceType) { serviceType = m_serviceType; return 0; };
+
+               // iStreamableService
+       PyObject *getStreamingData();
+
+               // iSubserviceList
+       int getNumberOfSubservices();
+       RESULT getSubservice(eServiceReference &subservice, unsigned int n);
+
+protected:
+       ePtr<iDVBDemux> m_decode_demux;
+       ePtr<iTSMPEGDecoder> m_decoder;
+
 private:
        enum { stateIdle, statePrepared, stateRecording };
+       bool m_simulate;
        int m_state, m_want_record;
+       bool m_record_ecm;
+       bool m_descramble;
+       bool m_pvr_descramble;
+       bool m_is_stream_client;
        friend class eServiceFactoryDVB;
-       eDVBServiceRecord(const eServiceReferenceDVB &ref);
+       eDVBServiceRecord(const eServiceReferenceDVB &ref, bool isstreamclient = false);
+       
+       eDVBServiceEITHandler m_event_handler;
        
-       eDVBServicePMTHandler m_service_handler;
        eServiceReferenceDVB m_ref;
-       void serviceEvent(int event);
        
        ePtr<iDVBTSRecorder> m_record;
+       ePtr<eConnection> m_con_record_event;
        
-       int m_recording;
+       int m_recording, m_tuned, m_error;
        std::set<int> m_pids_active;
+       std::string m_filename;
+
+       std::map<int,pts_t> m_event_timestamps;
+       int m_target_fd;
+       int m_streaming;
+       int m_last_event_id;
        
        int doPrepare();
        int doRecord();
+       void updateDecoder();
+
+                       /* events */
+       void serviceEvent(int event);
+       Signal2<void,iRecordableService*,int> m_event;
+       
+                       /* recorder events */
+       void recordEvent(int event);
+
+                       /* eit updates */
+       void gotNewEvent();
+       void saveCutlist();
 };
 
 #endif