Ticket #6395: avfd_langprefs.070809.diff

File avfd_langprefs.070809.diff, 3.4 KB (added by robert.mcnamara@…, 15 years ago)

Post-sync version of patch, adds E-AC3 preference

  • libs/libmythtv/avformatdecoder.cpp

     
    31083108    if (selTrack < 0 && numStreams)
    31093109    {
    31103110        VERBOSE(VB_AUDIO, LOC + "Trying to select audio track (w/lang)");
     3111        selTrack = -1;
     3112
     3113        // try to get the language track matching the frontend language.
     3114        QString language_key_convert = iso639_str2_to_str3(GetMythUI()->GetLanguage());
     3115        uint language_key = iso639_str3_to_key(language_key_convert);
     3116        uint canonical_key = iso639_key_to_canonical_key(language_key);
     3117
     3118        vector<int> flang = filter_lang(atracks, canonical_key);
     3119
     3120        selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_TRUEHD);
     3121
     3122        if (selTrack < 0)
     3123            selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_EAC3);
     3124
     3125        if (allow_dts_passthru && !transcoding && selTrack < 0)
     3126            selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_DTS);
     3127
     3128        if (selTrack < 0)
     3129            selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_AC3);
     3130
     3131        if (selTrack < 0)
     3132            selTrack = filter_max_ch(ic, atracks, flang);
     3133
    31113134        // try to get best track for most preferred language
    3112         selTrack = -1;
    3113         vector<int>::const_iterator it = languagePreference.begin();
    3114         for (; it !=  languagePreference.end() && selTrack<0; ++it)
     3135        // Set by the "Guide Data" language prefs in Appearance.
     3136        if (selTrack < 0)
    31153137        {
    3116             vector<int> flang = filter_lang(atracks, *it);
     3138            vector<int>::const_iterator it = languagePreference.begin();
     3139            for (; it !=  languagePreference.end() && selTrack<0; ++it)
     3140            {
     3141                vector<int> flang = filter_lang(atracks, *it);
    31173142
    3118             if (allow_dts_passthru && !transcoding)
    3119                 selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_DTS);
     3143                selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_TRUEHD);
    31203144
    3121             if (selTrack < 0)
    3122                 selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_AC3);
     3145                if (selTrack < 0)
     3146                    selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_EAC3);
    31233147
    3124             if (selTrack < 0)
    3125                 selTrack = filter_max_ch(ic, atracks, flang);
     3148                if (allow_dts_passthru && !transcoding && selTrack < 0)
     3149                    selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_DTS);
     3150
     3151                if (selTrack < 0)
     3152                    selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_AC3);
     3153
     3154                if (selTrack < 0)
     3155                    selTrack = filter_max_ch(ic, atracks, flang);
     3156            }
    31263157        }
    31273158        // try to get best track for any language
    31283159        if (selTrack < 0)
     
    31303161            VERBOSE(VB_AUDIO, LOC + "Trying to select audio track (wo/lang)");
    31313162            vector<int> flang = filter_lang(atracks, -1);
    31323163
    3133             if (allow_dts_passthru && !transcoding)
     3164            selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_TRUEHD);
     3165
     3166            if (selTrack < 0)
     3167                selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_EAC3);
     3168
     3169            if (allow_dts_passthru && !transcoding && selTrack < 0)
    31343170                selTrack = filter_max_ch(ic, atracks, flang, CODEC_ID_DTS);
    31353171
    31363172            if (selTrack < 0)