Ticket #579: mythtv_fix_eit_extended_events_lang_selection.diff

File mythtv_fix_eit_extended_events_lang_selection.diff, 3.5 KB (added by janne-mythtv@…, 20 years ago)

different fix for language selection

  • libs/libmythtv/siparser.cpp

     
    14091409    // Loop through table (last 4 bytes are CRC)
    14101410    while (pos + 4 < size)
    14111411    {
     1412        uint bestPrioritySE = UINT_MAX;
     1413        uint bestPriorityEE = UINT_MAX;
     1414
    14121415        // Event to use temporarily to fill in data
    14131416        Event event;
    14141417        event.ServiceID   = head->table_id_ext;
     
    14471450        while ((des_pos < (pos + descriptors_length)) && (des_pos <= size))
    14481451        {
    14491452            des_pos += ProcessDVBEventDescriptors(
    1450                 &buffer[des_pos], bestDescriptorSE, bestDescriptorsEE, event);
     1453                &buffer[des_pos], bestDescriptorSE, bestDescriptorsEE, event,
     1454                bestPrioritySE, bestPriorityEE);
    14511455        }
    14521456
    14531457        // Parse extended event descriptions for the most preferred language
     
    19541958    const unsigned char          *data,
    19551959    const unsigned char*         &bestDescriptorSE,
    19561960    vector<const unsigned char*> &bestDescriptorsEE,
    1957     Event                        &event)
     1961    Event                        &event,
     1962    uint                         &bestPrioritySE,
     1963    uint                         &bestPriorityEE)
    19581964{
    1959     QString bestLanguageSE   = "";
    1960     uint    bestPrioritySE   = UINT_MAX;
    1961 
    1962     QString bestLanguageEE   = "";
    1963     uint    bestPriorityEE   = UINT_MAX;
    1964 
    19651965    uint    descriptorTag    = data[0];
    19661966    uint    descriptorLength = data[1];
    19671967
     
    19781978            {
    19791979                // add the descriptor, and update the language
    19801980                bestDescriptorSE = data;
    1981                 bestLanguageSE   = language;
    19821981            }
    19831982        }
    19841983        break;
     
    19941993
    19951994            QString language = ParseDescLanguage(data+3, descriptorLength-1);
    19961995            uint    priority = GetLanguagePriority(language);
    1997             bestPriorityEE   = min(bestPriorityEE, priority);
    19981996
     1997            if (priority < bestPriorityEE)
     1998            {
     1999                // found a language with better priority
     2000                // don't keep things from the wrong language
     2001                bestDescriptorsEE.clear();
     2002                bestPriorityEE = priority;
     2003            }
     2004
    19992005            if (priority == bestPriorityEE)
    20002006            {
    2001                 // don't keep things from the wrong language
    2002                 if (bestLanguageEE != language)
    2003                     bestDescriptorsEE.clear();
    20042007                // make sure the vector is big enough
    20052008                bestDescriptorsEE.resize(last_desc_number + 1);
    20062009                // add the descriptor, and update the language
    20072010                bestDescriptorsEE[desc_number] = data;
    2008                 bestLanguageEE                 = language;
    20092011            }
    20102012        }
    20112013        break;
  • libs/libmythtv/siparser.h

     
    176176        const unsigned char          *data,
    177177        const unsigned char*         &bestDescriptorSE,
    178178        vector<const unsigned char*> &bestDescriptorsEE,
    179         Event                        &event);
     179        Event                        &event,
     180        uint                         &bestPrioritySE,
     181        uint                         &bestPriorityEE);
    180182
    181183    void ProcessContentDescriptor       (const uint8_t*, uint sz, Event &e);
    182184    void ProcessShortEventDescriptor    (const uint8_t*, uint sz, Event &e);