Ticket #579: mythtv_fix_eit_extended_events_lang_selection.diff
| File mythtv_fix_eit_extended_events_lang_selection.diff, 3.5 KB (added by , 20 years ago) |
|---|
-
libs/libmythtv/siparser.cpp
1409 1409 // Loop through table (last 4 bytes are CRC) 1410 1410 while (pos + 4 < size) 1411 1411 { 1412 uint bestPrioritySE = UINT_MAX; 1413 uint bestPriorityEE = UINT_MAX; 1414 1412 1415 // Event to use temporarily to fill in data 1413 1416 Event event; 1414 1417 event.ServiceID = head->table_id_ext; … … 1447 1450 while ((des_pos < (pos + descriptors_length)) && (des_pos <= size)) 1448 1451 { 1449 1452 des_pos += ProcessDVBEventDescriptors( 1450 &buffer[des_pos], bestDescriptorSE, bestDescriptorsEE, event); 1453 &buffer[des_pos], bestDescriptorSE, bestDescriptorsEE, event, 1454 bestPrioritySE, bestPriorityEE); 1451 1455 } 1452 1456 1453 1457 // Parse extended event descriptions for the most preferred language … … 1954 1958 const unsigned char *data, 1955 1959 const unsigned char* &bestDescriptorSE, 1956 1960 vector<const unsigned char*> &bestDescriptorsEE, 1957 Event &event) 1961 Event &event, 1962 uint &bestPrioritySE, 1963 uint &bestPriorityEE) 1958 1964 { 1959 QString bestLanguageSE = "";1960 uint bestPrioritySE = UINT_MAX;1961 1962 QString bestLanguageEE = "";1963 uint bestPriorityEE = UINT_MAX;1964 1965 1965 uint descriptorTag = data[0]; 1966 1966 uint descriptorLength = data[1]; 1967 1967 … … 1978 1978 { 1979 1979 // add the descriptor, and update the language 1980 1980 bestDescriptorSE = data; 1981 bestLanguageSE = language;1982 1981 } 1983 1982 } 1984 1983 break; … … 1994 1993 1995 1994 QString language = ParseDescLanguage(data+3, descriptorLength-1); 1996 1995 uint priority = GetLanguagePriority(language); 1997 bestPriorityEE = min(bestPriorityEE, priority);1998 1996 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 1999 2005 if (priority == bestPriorityEE) 2000 2006 { 2001 // don't keep things from the wrong language2002 if (bestLanguageEE != language)2003 bestDescriptorsEE.clear();2004 2007 // make sure the vector is big enough 2005 2008 bestDescriptorsEE.resize(last_desc_number + 1); 2006 2009 // add the descriptor, and update the language 2007 2010 bestDescriptorsEE[desc_number] = data; 2008 bestLanguageEE = language;2009 2011 } 2010 2012 } 2011 2013 break; -
libs/libmythtv/siparser.h
176 176 const unsigned char *data, 177 177 const unsigned char* &bestDescriptorSE, 178 178 vector<const unsigned char*> &bestDescriptorsEE, 179 Event &event); 179 Event &event, 180 uint &bestPrioritySE, 181 uint &bestPriorityEE); 180 182 181 183 void ProcessContentDescriptor (const uint8_t*, uint sz, Event &e); 182 184 void ProcessShortEventDescriptor (const uint8_t*, uint sz, Event &e);
