update workaround for wrong transmitted private data
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sun, 6 Aug 2006 14:03:49 +0000 (14:03 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sun, 6 Aug 2006 14:03:49 +0000 (14:03 +0000)
lib/dvb/epgcache.cpp

index ebf9e2ea5af39fe2ca59cdb50338e11820439d04..46785de16864e45a03316d746c5353dd99de71a2 100644 (file)
@@ -2369,13 +2369,20 @@ void eEPGCache::privateSectionRead(const uniqueEPGKey &current_service, const __
                        int sid = data[ptr++] << 8;
                        sid |= data[ptr++];
 
-// WORKAROUND for wrong transmitted epg data
-                       if ( onid == 0x85 && tsid == 0x11 && sid == 0xd3 )  // premiere sends wrong tsid here
-                               tsid = 0x1;
-                       else if ( onid == 0x85 && tsid == 0x3 && sid == 0xf5 ) // premiere sends wrong sid here
-                               sid = 0xdc;
+// WORKAROUND for wrong transmitted epg data (01.08.2006)
+                       if ( onid == 0x85 )
+                       {
+                               switch( (tsid << 16) | sid )
+                               {
+                                       case 0x0300f0: sid = 0xe0; tsid = 2; break;
+                                       case 0x0300f1: sid = 0xe1; tsid = 2; break;
+                                       case 0x0300f5: sid = 0xdc; break;
+                                       case 0x0400d2: sid = 0xe2; tsid = 0x11; break;
+                                       case 0x1100d3: sid = 0xe3; break;
+                               }
+                       }
 ////////////////////////////////////////////
-                               
+
                        uniqueEPGKey service( sid, onid, tsid );
                        descr_len -= 6;
                        while( descr_len > 0 )