#ifndef __lib_dvb_dvbmid_h #define __lib_dvb_dvbmid_h #include #include #include #include #include #include #include #include #include #include #include #include class eDVBServicePMTHandler; typedef std::map CAServiceMap; class eDVBCAService: public Object { eServiceReferenceDVB m_service; uint8_t m_used_demux[10]; unsigned int m_prev_build_hash; int m_sock, m_clilen; struct sockaddr_un m_servaddr; unsigned int m_sendstate; unsigned char m_capmt[2048]; eTimer m_retryTimer; void sendCAPMT(); void Connect(); static CAServiceMap exist; eDVBCAService(); ~eDVBCAService(); public: static RESULT register_demux( const eServiceReferenceDVB &ref, int demux_num, eDVBCAService *&caservice ); static RESULT unregister_demux( const eServiceReferenceDVB &ref, int demux_num, eTable *ptr ); void buildCAPMT(eTable *ptr); }; class eDVBServicePMTHandler: public Object { friend class eDVBCAService; eServiceReferenceDVB m_reference; ePtr m_service; int m_last_channel_state; eDVBCAService *m_ca_servicePtr; eAUTable > m_PMT; eAUTable > m_PAT; eUsePtr m_channel; eUsePtr m_pvr_channel; ePtr m_resourceManager; ePtr m_demux; void channelStateChanged(iDVBChannel *); ePtr m_channelStateChanged_connection; void PMTready(int error); void PATready(int error); int m_record; public: eDVBServicePMTHandler(int record); ~eDVBServicePMTHandler(); enum { eventNoResources, // a requested resource couldn't be allocated eventTuneFailed, // tune failed eventNoPAT, // no pat could be received (timeout) eventNoPATEntry, // no pat entry for the corresponding SID could be found eventNoPMT, // no pmt could be received (timeout) eventNewProgramInfo, // we just received a PMT eventTuned // a channel was sucessfully (re-)tuned in, you may start additional filters now }; Signal1 serviceEvent; struct videoStream { int pid; }; struct audioStream { int pid; enum { atMPEG, atAC3, atDTS }; int type; // mpeg2, ac3, dts, ... // language code, ... }; struct program { std::vector videoStreams; std::vector audioStreams; // ca info int pcrPid; int pmtPid; }; int getProgramInfo(struct program &program); int getDemux(ePtr &demux); int getPVRChannel(ePtr &pvr_channel); int tune(eServiceReferenceDVB &ref); }; #endif