Support fast channel change.
[vuplus_dvbapp] / lib / dvb / fcc.h
diff --git a/lib/dvb/fcc.h b/lib/dvb/fcc.h
new file mode 100644 (file)
index 0000000..aacd9d8
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef __dvb_fcc_h
+#define __dvb_fcc_h
+
+#include <lib/dvb/idvb.h>
+#include <lib/base/object.h>
+#include <lib/service/iservice.h>
+#include <connection.h>
+
+class eNavigation;
+
+class FCCServiceChannels
+{
+private:
+       std::map<eDVBChannelID, int> m_fcc_chids;
+
+public:
+       void addFCCService(const eServiceReference &service);
+       void removeFCCService(const eServiceReference &service);
+       int getFCCChannelID(std::map<eDVBChannelID, int> &fcc_chids);
+};
+
+typedef struct _tagFccElem
+{
+       eServiceReference m_service_reference;
+       ePtr<eConnection> m_service_event_conn;
+       int m_state;
+}FCCServiceElem;
+
+class eFCCServiceManager: public iObject, public Object
+{
+       DECLARE_REF(eFCCServiceManager);
+private:
+       eNavigation *m_core;
+       static eFCCServiceManager* m_instance;
+       std::map<ePtr<iPlayableService>, FCCServiceElem, std::less<iPlayableService*> > m_FCCServices;
+       FCCServiceChannels m_fccServiceChannels;
+
+       bool m_fcc_enable;
+
+       void FCCEvent(iPlayableService* service, int event);
+public:
+       PSignal1<void, int> m_fcc_event;
+       static eFCCServiceManager* getInstance();
+       eFCCServiceManager(eNavigation *navptr);
+       ~eFCCServiceManager();
+
+       enum
+       {
+               fcc_state_preparing,
+               fcc_state_decoding,
+               fcc_state_failed
+       };
+       SWIG_VOID(RESULT)  playFCCService(const eServiceReference &ref, ePtr<iPlayableService> &SWIG_OUTPUT);
+       RESULT stopFCCService(const eServiceReference &sref);
+       RESULT stopFCCService();
+       RESULT cleanupFCCService();
+       RESULT tryFCCService(const eServiceReference &service, ePtr<iPlayableService> &ptr);
+       int isLocked(ePtr<iPlayableService> service);
+       PyObject *getFCCServiceList();
+       void printFCCServices();
+       static int getFCCChannelID(std::map<eDVBChannelID, int> &fcc_chids);
+       static bool checkAvailable(const eServiceReference &ref);
+       void setFCCEnable(int enable) { m_fcc_enable = (enable != 0); }
+       bool isEnable() { return m_fcc_enable; }
+};
+
+#endif /* __dvb_fcc_h */