rewrite wrap around
[vuplus_dvbapp] / lib / dvb / dvb.cpp
index f246936..ad865c0 100644 (file)
@@ -312,6 +312,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse
                }
                m_cached_channel_state_changed_conn.disconnect();
                m_cached_channel=0;
+               m_releaseCachedChannelTimer.stop();
        }
 
 //     eDebug("allocate channel.. %04x:%04x", channelid.transport_stream_id.get(), channelid.original_network_id.get());
@@ -391,8 +392,7 @@ void eDVBResourceManager::DVBChannelStateChanged(iDVBChannel *chan)
 
 void eDVBResourceManager::releaseCachedChannel()
 {
-       eDebug("release cached channel");
-       m_cached_channel_state_changed_conn.disconnect();
+       eDebug("release cached channel (timer timeout)");
        m_cached_channel=0;
 }
 
@@ -404,6 +404,7 @@ RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, in
        {
                m_cached_channel_state_changed_conn.disconnect();
                m_cached_channel=0;
+               m_releaseCachedChannelTimer.stop();
        }
 
        if (allocateFrontendByIndex(fe, frontend_index))
@@ -421,12 +422,6 @@ RESULT eDVBResourceManager::allocatePVRChannel(eUsePtr<iDVBPVRChannel> &channel)
 {
        ePtr<eDVBAllocatedDemux> demux;
 
-       if (m_cached_channel)
-       {
-               m_cached_channel_state_changed_conn.disconnect();
-               m_cached_channel=0;
-       }
-
        eDVBChannel *ch;
        ch = new eDVBChannel(this, 0);
        
@@ -1031,7 +1026,7 @@ RESULT eDVBChannel::getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos, in
        }
        
        if (now < pos) /* wrap around */
-               pos = now + ((pts_t)1)<<33 - pos;
+               pos = now + 0x200000000LL - pos;
        else
                pos = now - pos;