ourstate = state_tuning;
} else if (state == iDVBFrontend::stateLostLock)
{
- eDebug("OURSTATE: lost lock");
- ourstate = state_unavailable;
+ eDebug("OURSTATE: lost lock.. retune");
+ ourstate = state_tuning;
+ m_frontend->get().tune(*m_feparm);
} else if (state == iDVBFrontend::stateFailed)
{
eDebug("OURSTATE: failed");
}
}
+void eDVBChannel::pvrEvent(int event)
+{
+ switch (event)
+ {
+ case eFilePushThread::evtEOF:
+ eDebug("eDVBChannel: End of file!");
+ m_event(this, evtEOF);
+ break;
+ }
+}
+
void eDVBChannel::AddUse()
{
++m_use_count;
/* if tuning fails, shutdown the channel immediately. */
int res;
res = m_frontend->get().tune(*feparm);
+ m_feparm = feparm;
if (res)
{
return 0;
}
+RESULT eDVBChannel::connectEvent(const Slot2<void,iDVBChannel*,int> &event, ePtr<eConnection> &connection)
+{
+ connection = new eConnection((iDVBChannel*)this, m_event.connect(event));
+ return 0;
+}
+
RESULT eDVBChannel::getState(int &state)
{
state = m_state;
RESULT eDVBChannel::getDemux(ePtr<iDVBDemux> &demux, int cap)
{
- eDebug("get %d demux", cap);
ePtr<eDVBAllocatedDemux> &our_demux = (cap & capDecode) ? m_decoder_demux : m_demux;
if (!our_demux)
if (m_mgr->allocateDemux(m_frontend ? (eDVBRegisteredFrontend*)*m_frontend : (eDVBRegisteredFrontend*)0, our_demux, cap))
return -1;
-
}
demux = *our_demux;
+ /* don't hold a reference to the decoding demux, we don't need it. */
if (cap & capDecode)
- {
our_demux = 0;
- }
return 0;
}
m_stateChanged(this);
m_pvr_thread = new eFilePushThread();
+ m_pvr_thread->enablePVRCommit(1);
m_pvr_thread->start(m_pvr_fd_src, m_pvr_fd_dst);
+ CONNECT(m_pvr_thread->m_event, eDVBChannel::pvrEvent);
return 0;
}