remove unneeded signals ( eDVBChannel::m_stateChanged give us the same informations )
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 12 Jul 2005 21:10:02 +0000 (21:10 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 12 Jul 2005 21:10:02 +0000 (21:10 +0000)
lib/dvb/demux.cpp
lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/dvb/dvbtime.cpp
lib/dvb/dvbtime.h
lib/dvb/epgcache.cpp

index f6bdbd7b5602cf9766786cd2c35598504a1ef6e8..f50f4bb29a9a4d02ed8f9202f7f69e0bd57df2d9 100644 (file)
@@ -76,7 +76,10 @@ void eDVBSectionReader::data(int)
                if ((c = crc32((unsigned)-1, data, r)))
                        eFatal("crc32 failed! is %x\n", c);
        }
                if ((c = crc32((unsigned)-1, data, r)))
                        eFatal("crc32 failed! is %x\n", c);
        }
-       read(data);
+       if (active)
+               read(data);
+       else
+               eDebug("data.. but not active");
 }
 
 eDVBSectionReader::eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res): demux(demux)
 }
 
 eDVBSectionReader::eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res): demux(demux)
@@ -166,7 +169,8 @@ RESULT eDVBSectionReader::stop()
 {
        if (!active)
                return -1;
 {
        if (!active)
                return -1;
-       
+
+       active=0;
        ::ioctl(fd, DMX_STOP);
        
        return 0;
        ::ioctl(fd, DMX_STOP);
        
        return 0;
index 35849b4cfc4aff955429f8ee3d4e644f3ac75376..ea51d6a194f31ac912bf00f6fc8c944f7f9baf7d 100644 (file)
@@ -334,7 +334,6 @@ RESULT eDVBResourceManager::removeChannel(eDVBChannel *ch)
                {
                        i = m_active_channels.erase(i);
                        ++cnt;
                {
                        i = m_active_channels.erase(i);
                        ++cnt;
-                       /* emit */ m_channelRemoved(ch);
                } else
                        ++i;
        }
                } else
                        ++i;
        }
@@ -350,18 +349,6 @@ RESULT eDVBResourceManager::connectChannelAdded(const Slot1<void,eDVBChannel*> &
        return 0;
 }
 
        return 0;
 }
 
-RESULT eDVBResourceManager::connectChannelRemoved(const Slot1<void,eDVBChannel*> &channelRemoved, ePtr<eConnection> &connection)
-{
-       connection = new eConnection((eDVBResourceManager*)this, m_channelRemoved.connect(channelRemoved));
-       return 0;
-}
-
-RESULT eDVBResourceManager::connectChannelRunning(const Slot1<void,iDVBChannel*> &channelRunning, ePtr<eConnection> &connection)
-{
-       connection = new eConnection((eDVBResourceManager*)this, m_channelRunning.connect(channelRunning));
-       return 0;
-}
-
 DEFINE_REF(eDVBChannel);
 
 eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *frontend, eDVBAllocatedDemux *demux): m_state(state_idle), m_mgr(mgr)
 DEFINE_REF(eDVBChannel);
 
 eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *frontend, eDVBAllocatedDemux *demux): m_state(state_idle), m_mgr(mgr)
index bb9e268991a760f5fc6e41fe47ff491f6431b24f..d0deb2fc2a2f76c726f8dea4efe1fa78e0ece63f 100644 (file)
@@ -182,7 +182,8 @@ private:
        
        void frontendStateChanged(iDVBFrontend*fe);
        ePtr<eConnection> m_conn_frontendStateChanged;
        
        void frontendStateChanged(iDVBFrontend*fe);
        ePtr<eConnection> m_conn_frontendStateChanged;
-       
+
+       friend class eUsePtr<eDVBChannel>;
                /* use count */
        oRefCount m_use_count;
        void AddUse();
                /* use count */
        oRefCount m_use_count;
        void AddUse();
index 5167a01e36f6f409418bdfae67f0082736dfc92b..c8bdd01eaa47738bbd4f2140c92d909c7a3f4200 100644 (file)
@@ -129,18 +129,14 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler()
        if (!res_mgr)
                eDebug("[eDVBLocalTimerHandler] no resource manager !!!!!!!");
        else
        if (!res_mgr)
                eDebug("[eDVBLocalTimerHandler] no resource manager !!!!!!!");
        else
-       {
                res_mgr->connectChannelAdded(slot(*this,&eDVBLocalTimeHandler::DVBChannelAdded), m_chanAddedConn);
                res_mgr->connectChannelAdded(slot(*this,&eDVBLocalTimeHandler::DVBChannelAdded), m_chanAddedConn);
-               res_mgr->connectChannelRemoved(slot(*this,&eDVBLocalTimeHandler::DVBChannelRemoved), m_chanRemovedConn);
-               res_mgr->connectChannelRunning(slot(*this,&eDVBLocalTimeHandler::DVBChannelRunning), m_chanRunningConn);
-       }
 }
 
 eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
 {
        instance=0;
 }
 
 eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
 {
        instance=0;
-       for (std::map<iDVBChannel*, TDT*>::iterator it=m_active_tables.begin(); it != m_active_tables.end(); ++it)
-               delete it->second;
+       for (std::map<iDVBChannel*, channel_data>::iterator it=m_knownChannels.begin(); it != m_knownChannels.end(); ++it)
+               delete it->second.tdt;
 }
 
 void eDVBLocalTimeHandler::readTimeOffsetData( const char* filename )
 }
 
 void eDVBLocalTimeHandler::readTimeOffsetData( const char* filename )
@@ -347,52 +343,55 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan )
 
        if ( restart_tdt )
        {
 
        if ( restart_tdt )
        {
-               std::map<iDVBChannel*, TDT*>::iterator it =
-                       m_active_tables.find(chan);
-               if ( it != m_active_tables.end() )
+               std::map<iDVBChannel*, channel_data>::iterator it =
+                       m_knownChannels.find(chan);
+               if ( it != m_knownChannels.end() )
                {
                {
-                       delete it->second;
-                       it->second = new TDT(chan);
-                       it->second->startTimer(60*60*1000);  // restart TDT for this transponder in 60min
+                       delete it->second.tdt;
+                       it->second.tdt = new TDT(chan);
+                       it->second.tdt->startTimer(60*1000);  // restart TDT for this transponder in 60min
                }
        }
                }
        }
-
 }
 
 void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan)
 {
 }
 
 void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan)
 {
-       eDebug("[eDVBLocalTimerHandler] add channel %p", chan);
        if ( chan )
        {
        if ( chan )
        {
-               std::map<iDVBChannel*, TDT*>::iterator it =
-                       m_active_tables.find(chan);
-               if ( it != m_active_tables.end() )
-               {
-                       delete it->second;
-                       it->second = new TDT(chan);
-               }
-               else
-                       m_active_tables[chan] = new TDT(chan);
+               eDebug("[eDVBLocalTimerHandler] add channel %p", chan);
+               std::pair<std::map<iDVBChannel*, channel_data>::iterator, bool> tmp =
+                       m_knownChannels.insert( std::pair<iDVBChannel*, channel_data>(chan, channel_data()) );
+               tmp.first->second.tdt = new TDT(chan);
+               tmp.first->second.channel = chan;
+               chan->connectStateChange(slot(*this, &eDVBLocalTimeHandler::DVBChannelStateChanged), tmp.first->second.m_stateChangedConn);
        }
 }
 
        }
 }
 
-void eDVBLocalTimeHandler::DVBChannelRemoved(eDVBChannel *chan)
+void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan)
 {
 {
-       eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
-       std::map<iDVBChannel*, TDT*>::iterator it =
-               m_active_tables.find(chan);
-       if ( it != m_active_tables.end() )
+       std::map<iDVBChannel*, channel_data>::iterator it =
+               m_knownChannels.find(chan);
+       if ( it != m_knownChannels.end() )
        {
        {
-               delete it->second;
-               m_active_tables.erase(it);
+               int state=0;
+               chan->getState(state);
+               switch (state)
+               {
+                       case iDVBChannel::state_idle:
+                               break;
+                       case iDVBChannel::state_tuning:
+                               break;
+                       case iDVBChannel::state_unavailable:
+                               break;
+                       case iDVBChannel::state_ok:
+                               eDebug("[eDVBLocalTimerHandler] channel %p running", chan);
+                               it->second.tdt->start();
+                               break;
+                       case iDVBChannel::state_release:
+                               eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
+                               delete it->second.tdt;
+                               m_knownChannels.erase(it);
+                               break;
+               }
        }
 }
        }
 }
-
-void eDVBLocalTimeHandler::DVBChannelRunning(iDVBChannel *chan)
-{
-       eDebug("[eDVBLocalTimerHandler] start channel %p", chan);
-       std::map<iDVBChannel*, TDT*>::iterator it =
-               m_active_tables.find(chan);
-       if ( it != m_active_tables.end() )
-               it->second->start();
-}
index 59a26c2148698cc4a1e3ac986121b354f743f49d..3b92fd1e0c13aabc6d46a4ced7ba31fa778de4e6 100644 (file)
@@ -33,19 +33,22 @@ public:
 
 class eDVBLocalTimeHandler: public Object
 {
 
 class eDVBLocalTimeHandler: public Object
 {
+       struct channel_data
+       {
+               TDT *tdt;
+               ePtr<eDVBChannel> channel;
+               ePtr<eConnection> m_stateChangedConn;
+       };
        friend class TDT;
        DECLARE_REF(eDVBLocalTimeHandler)
        friend class TDT;
        DECLARE_REF(eDVBLocalTimeHandler)
-       std::map<iDVBChannel*, TDT*> m_active_tables;
+       std::map<iDVBChannel*, channel_data> m_knownChannels;
        std::map<eDVBChannelID,int> m_timeOffsetMap;
        ePtr<eConnection> m_chanAddedConn;
        std::map<eDVBChannelID,int> m_timeOffsetMap;
        ePtr<eConnection> m_chanAddedConn;
-       ePtr<eConnection> m_chanRemovedConn;
-       ePtr<eConnection> m_chanRunningConn;
        bool m_time_ready;
        int m_time_difference;
        int m_last_tp_time_difference;
        void DVBChannelAdded(eDVBChannel*);
        bool m_time_ready;
        int m_time_difference;
        int m_last_tp_time_difference;
        void DVBChannelAdded(eDVBChannel*);
-       void DVBChannelRemoved(eDVBChannel*);
-       void DVBChannelRunning(iDVBChannel*);
+       void DVBChannelStateChanged(iDVBChannel*);
        void readTimeOffsetData(const char*);
        void writeTimeOffsetData(const char*);
        void updateTime(time_t tp_time, eDVBChannel*);
        void readTimeOffsetData(const char*);
        void writeTimeOffsetData(const char*);
        void updateTime(time_t tp_time, eDVBChannel*);
index 41635b03ebdf2c909d3f25c299378570c691cd53..634aead35bab7f770d771faa0c7d116e03c62324 100644 (file)
@@ -641,7 +641,7 @@ void eEPGCache::startCache(const eServiceReferenceDVB& ref)
        else
        {
                ePtr<iDVBDemux> demux;
        else
        {
                ePtr<iDVBDemux> demux;
-               res_mgr->allocateChannel(chid, m_currentChannel);
+//             res_mgr->allocateChannel(chid, m_currentChannel);
                if ( m_currentChannel->getDemux(demux) )
                {
                        eDebug("[eEPGCache] no demux!!");
                if ( m_currentChannel->getDemux(demux) )
                {
                        eDebug("[eEPGCache] no demux!!");