desc_list_t MPEGDescriptor::FindBestMatches( const desc_list_t &parsed, uint desc_tag, QMap<uint,uint> &langPrefs) { uint match_pri = UINT_MAX; int match_key = 0; int unmatched_idx = -1; uint i = (desc_tag == DescriptorID::extended_event) ? 0 : parsed.size(); for (; i < parsed.size(); i++) { if (DescriptorID::extended_event == parsed[i][0]) { ExtendedEventDescriptor eed(parsed[i]); QMap<uint,uint>::const_iterator it = langPrefs.find(eed.CanonicalLanguageKey()); if ((it != langPrefs.end()) && (*it < match_pri)) { match_key = eed.LanguageKey(); match_pri = *it; } if (unmatched_idx < 0) unmatched_idx = i; } } if ((desc_tag == DescriptorID::extended_event) && (match_key == 0) && (unmatched_idx >= 0)) { ExtendedEventDescriptor eed(parsed[unmatched_idx]); langPrefs[eed.CanonicalLanguageKey()] = maxPriority(langPrefs) + 1; match_key = eed.LanguageKey(); } desc_list_t tmp; if (match_pri == UINT_MAX) return tmp; for (uint i = 0; i < parsed.size(); i++) { if ((DescriptorID::extended_event == desc_tag) && (DescriptorID::extended_event == parsed[i][0])) { ExtendedEventDescriptor eed(parsed[i]); if (eed.LanguageKey() == match_key) tmp.push_back(parsed[i]); } } return tmp; }
static void process_desc(cCiCaPmt &capmt, const unsigned short *casids, const desc_list_t &desc) { desc_list_t::const_iterator it; for (it = desc.begin(); it != desc.end(); ++it) { ConditionalAccessDescriptor cad(*it); for (uint q = 0; casids[q]; q++) { if (cad.SystemID() != casids[q]) continue; LOG(VB_DVBCAM, LOG_INFO, QString("DVBCam: Adding CA descriptor: " "CASID(0x%2), ECM PID(0x%3)") .arg(cad.SystemID(),0,16).arg(cad.PID(),0,16)); capmt.AddCaDescriptor(cad.SystemID(), cad.PID(), cad.DataSize(), cad.Data()); } } }