X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fnav%2Fcore.cpp;h=cfb132f4e8838efc99df165316063a4d73d39f1b;hb=4911a0121954f6b6657ba28fab8d9dd9031d9a59;hp=ad777660f5d3dc04d969a5468ecdf1e5da56e479;hpb=84007236ce796615a8e74432aad110164b23b8ec;p=vuplus_dvbapp diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index ad77766..cfb132f 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -1,6 +1,7 @@ #include #include #include +#include void eNavigation::serviceEvent(iPlayableService* service, int event) { @@ -24,12 +25,18 @@ void eNavigation::recordEvent(iRecordableService* 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(); } @@ -69,6 +76,8 @@ RESULT eNavigation::stopService(void) /* kill service. */ m_service_event_conn = 0; + + m_fccmgr->cleanupFCCService(); return 0; } @@ -146,10 +155,12 @@ RESULT eNavigation::pause(int dop) return p->unpause(); } -eNavigation::eNavigation(iServiceHandler *serviceHandler) +eNavigation::eNavigation(iServiceHandler *serviceHandler, int decoder) { ASSERT(serviceHandler); m_servicehandler = serviceHandler; + m_decoder = decoder; + m_fccmgr = new eFCCServiceManager(this); } eNavigation::~eNavigation()