retune on lostlock is now working :)
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 19 Jan 2006 00:21:14 +0000 (00:21 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 19 Jan 2006 00:21:14 +0000 (00:21 +0000)
lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/dvb/frontend.cpp

index 5c8c2cf61d1dd86fe14d3883f3b2016706e9f9b4..32e19308fb561f4a230b5dfe8603aaec986eacb3 100644 (file)
@@ -591,8 +591,9 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
                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");
@@ -652,6 +653,7 @@ RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid, ePtr<iDVBFrontend
                        /* if tuning fails, shutdown the channel immediately. */
        int res;
        res = m_frontend->get().tune(*feparm);
+       m_feparm = feparm;
        
        if (res)
        {
index 511ef9aa26d94294ae7221dd81c7121b612cbf1c..5fc2f043d26ce3f34af0a4f1d1a18443bc2c2dfc 100644 (file)
@@ -225,6 +225,7 @@ public:
 
        int getUseCount() { return m_use_count; }
 private:
+       ePtr<iDVBFrontendParameters> m_feparm; // for retune on lostlock
        ePtr<eDVBAllocatedFrontend> m_frontend;
        ePtr<eDVBAllocatedDemux> m_demux, m_decoder_demux;
        
index a4a94a213de8fe78ac3537de8424d3a52385ba2c..f4cbd307d27ee4af0e02c5fa8ef2ae7d9c6347e3 100644 (file)
@@ -400,9 +400,7 @@ void eDVBFrontend::feEvent(int w)
                        else
                        {
                                state = stateLostLock;
-
-                               if (m_state != stateLostLock)
-                                       eDebug("FIXME: we lost lock, so we might have to retune.");
+                               m_data[0] = m_data[1] = m_data[2] = -1; // reset diseqc
                        }
                }
                if (m_state != state)