#include <lib/nav/core.h>
#include <lib/base/eerror.h>
#include <lib/python/python.h>
+#include <lib/dvb/fcc.h>
void eNavigation::serviceEvent(iPlayableService* service, int event)
{
RESULT eNavigation::playService(const eServiceReference &service)
{
- stopService();
-
- assert(m_servicehandler);
- RESULT res = m_servicehandler->play(service, m_runningService);
+ RESULT res = -1;
+
+ if (m_fccmgr->tryFCCService(service, m_runningService) == -1)
+ {
+ stopService();
+ ASSERT(m_servicehandler);
+ res = m_servicehandler->play(service, m_runningService);
+ }
+
if (m_runningService)
{
+ m_runningService->setTarget(m_decoder);
m_runningService->connectEvent(slot(*this, &eNavigation::serviceEvent), m_service_event_conn);
res = m_runningService->start();
}
/* kill service. */
m_service_event_conn = 0;
+
+ m_fccmgr->cleanupFCCService();
return 0;
}
RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate)
{
- assert(m_servicehandler);
+ ASSERT(m_servicehandler);
RESULT res = m_servicehandler->record(ref, service);
eDebug("record: %d", res);
if (res)
return p->unpause();
}
-eNavigation::eNavigation(iServiceHandler *serviceHandler)
+eNavigation::eNavigation(iServiceHandler *serviceHandler, int decoder)
{
- assert(serviceHandler);
+ ASSERT(serviceHandler);
m_servicehandler = serviceHandler;
+ m_decoder = decoder;
+ m_fccmgr = new eFCCServiceManager(this);
}
eNavigation::~eNavigation()