use orbital position in isValidONIDTSID
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 16 Nov 2005 10:32:34 +0000 (10:32 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 16 Nov 2005 10:32:34 +0000 (10:32 +0000)
lib/dvb/scan.cpp
lib/dvb/scan.h

index 1c98dce0a613471744eebf3523da9af30601afcc..961812f697a063bcd1b8b973fee7cb6b04b53b52 100644 (file)
@@ -30,29 +30,28 @@ eDVBScan::~eDVBScan()
 {
 }
 
-int eDVBScan::isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid)
+int eDVBScan::isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid)
 {
        switch (onid.get())
        {
        case 0:
-       case 0xFFFF:
        case 0x1111:
                return 0;
        case 1:
-               return tsid>1;
+               return orbital_position == 192;
        case 0x00B1:
                return tsid != 0x00B0;
        case 0x0002:
-               return tsid != 0x07E8;
+               return abs(orbital_position-282) < 6;
        default:
-               return 1;
+               return onid.get() < 0xFF00;
        }
 }
 
 eDVBNamespace eDVBScan::buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash)
 {
                // on valid ONIDs, ignore frequency ("sub network") part
-       if (isValidONIDTSID(onid, tsid))
+       if (isValidONIDTSID((hash >> 16) & 0xFFFF, onid, tsid))
                hash &= ~0xFFFF;
        return eDVBNamespace(hash);
 }
index df832bd637aa934cc97e62779b470f39ad81a69a..4cad6a2a4ceade0c7064cbcbdc2ff2c3b8f1b209 100644 (file)
@@ -15,7 +15,7 @@ private:
                /* chid helper functions: */
                
                /* heuristically determine if onid/tsid is valid */
-       int isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid);
+       int isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid);
                /* build dvb namespace */
        eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);