Merge branch 'bug_621_caid_info' into experimental
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 29 Nov 2010 13:17:37 +0000 (14:17 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Mon, 29 Nov 2010 13:17:37 +0000 (14:17 +0100)
lib/dvb/pmt.cpp
lib/dvb/pmt.h
lib/dvb_ci/dvbci.cpp

index ee6bb19..d673384 100644 (file)
@@ -173,13 +173,13 @@ PyObject *eDVBServicePMTHandler::getCaIds(bool pair)
 
        if ( !getProgramInfo(prog) )
        {
-               int cnt=prog.caids.size();
-               if (cnt)
+               if (pair)
                {
-                       ret=PyList_New(cnt);
-                       std::set<program::capid_pair>::iterator it(prog.caids.begin());
-                       if (pair)
+                       int cnt=prog.caids.size();
+                       if (cnt)
                        {
+                               ret=PyList_New(cnt);
+                               std::list<program::capid_pair>::iterator it(prog.caids.begin());
                                while(cnt--)
                                {
                                        ePyObject tuple = PyTuple_New(2);
@@ -188,11 +188,15 @@ PyObject *eDVBServicePMTHandler::getCaIds(bool pair)
                                        PyList_SET_ITEM(ret, cnt, tuple);
                                }
                        }
-                       else
-                       {
-                               while(cnt--)
-                                       PyList_SET_ITEM(ret, cnt, PyInt_FromLong((it++)->caid));
-                       }
+               }
+               else
+               {
+                       std::set<program::capid_pair> set(prog.caids.begin(), prog.caids.end());
+                       std::set<program::capid_pair>::iterator it(set.begin());
+                       int cnt=set.size();
+                       ret=PyList_New(cnt);
+                       while(cnt--)
+                               PyList_SET_ITEM(ret, cnt, PyInt_FromLong((it++)->caid));
                }
        }
 
@@ -255,7 +259,7 @@ int eDVBServicePMTHandler::getProgramInfo(program &program)
                                                program::capid_pair pair;
                                                pair.caid = descr->getCaSystemId();
                                                pair.capid = descr->getCaPid();
-                                               program.caids.insert(pair);
+                                               program.caids.push_back(pair);
                                        }
                                        else if ((*desc)->getTag() == REGISTRATION_DESCRIPTOR)
                                        {
@@ -522,7 +526,7 @@ int eDVBServicePMTHandler::getProgramInfo(program &program)
                                                                program::capid_pair pair;
                                                                pair.caid = descr->getCaSystemId();
                                                                pair.capid = descr->getCaPid();
-                                                               program.caids.insert(pair);
+                                                               program.caids.push_back(pair);
                                                                break;
                                                        }
                                                        default:
@@ -646,7 +650,7 @@ int eDVBServicePMTHandler::getProgramInfo(program &program)
                        program::capid_pair pair;
                        pair.caid = *it;
                        pair.capid = -1; // not known yet
-                       program.caids.insert(pair);
+                       program.caids.push_back(pair);
                }
                if ( cnt )
                        ret = 0;
index c4e4f3b..aa5d34d 100644 (file)
@@ -191,7 +191,7 @@ public:
                std::vector<audioStream> audioStreams;
                int defaultAudioStream;
                std::vector<subtitleStream> subtitleStreams;
-               std::set<capid_pair> caids;
+               std::list<capid_pair> caids;
                int pcrPid;
                int pmtPid;
                int textPid;
index 342f06a..8a43e5b 100644 (file)
@@ -297,7 +297,8 @@ void eDVBCIInterfaces::recheckPMTHandlers()
                if (!pmthandler->getProgramInfo(p))
                {
                        int cnt=0;
-                       for (std::set<eDVBServicePMTHandler::program::capid_pair>::reverse_iterator x(p.caids.rbegin()); x != p.caids.rend(); ++x, ++cnt)
+                       std::set<eDVBServicePMTHandler::program::capid_pair> set(p.caids.begin(), p.caids.end());
+                       for (std::set<eDVBServicePMTHandler::program::capid_pair>::reverse_iterator x(set.rbegin()); x != set.rend(); ++x, ++cnt)
                                caids.push_front(x->caid);
                        if (service && cnt)
                                service->m_ca = caids;