[FCC] Fix to perform normal decoding for usb tuner on FCC mode.
[vuplus_dvbapp] / lib / dvb / fcc.h
1 #ifndef __dvb_fcc_h
2 #define __dvb_fcc_h
3
4 #include <lib/dvb/idvb.h>
5 #include <lib/base/object.h>
6 #include <lib/service/iservice.h>
7 #include <connection.h>
8
9 class eNavigation;
10
11 class FCCServiceChannels
12 {
13 private:
14         std::map<eDVBChannelID, int> m_fcc_chids;
15
16 public:
17         void addFCCService(const eServiceReference &service);
18         void removeFCCService(const eServiceReference &service);
19         int getFCCChannelID(std::map<eDVBChannelID, int> &fcc_chids);
20 };
21
22 typedef struct _tagFccElem
23 {
24         eServiceReference m_service_reference;
25         ePtr<eConnection> m_service_event_conn;
26         int m_state;
27         bool m_useNormalDecode;
28 }FCCServiceElem;
29
30 class eFCCServiceManager: public iObject, public Object
31 {
32         DECLARE_REF(eFCCServiceManager);
33 private:
34         eNavigation *m_core;
35         static eFCCServiceManager* m_instance;
36         std::map<ePtr<iPlayableService>, FCCServiceElem, std::less<iPlayableService*> > m_FCCServices;
37         FCCServiceChannels m_fccServiceChannels;
38
39         bool m_fcc_enable;
40
41         void FCCEvent(iPlayableService* service, int event);
42 public:
43         PSignal1<void, int> m_fcc_event;
44         static eFCCServiceManager* getInstance();
45         eFCCServiceManager(eNavigation *navptr);
46         ~eFCCServiceManager();
47
48         enum
49         {
50                 fcc_state_preparing,
51                 fcc_state_decoding,
52                 fcc_state_failed
53         };
54         SWIG_VOID(RESULT)  playFCCService(const eServiceReference &ref, ePtr<iPlayableService> &SWIG_OUTPUT);
55         RESULT stopFCCService(const eServiceReference &sref);
56         RESULT stopFCCService();
57         RESULT cleanupFCCService();
58         RESULT tryFCCService(const eServiceReference &service, ePtr<iPlayableService> &ptr);
59         int isLocked(ePtr<iPlayableService> service);
60         PyObject *getFCCServiceList();
61         void printFCCServices();
62         static int getFCCChannelID(std::map<eDVBChannelID, int> &fcc_chids);
63         static bool checkAvailable(const eServiceReference &ref);
64         void setFCCEnable(int enable) { m_fcc_enable = (enable != 0); }
65         bool isEnable() { return m_fcc_enable; }
66         bool isStateDecoding(iPlayableService* service);
67         void setNormalDecoding(iPlayableService* service);
68 };
69
70 #endif /* __dvb_fcc_h */