diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-01-12 14:05:46 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-01-12 14:05:46 +0000 |
commit | d63fb8ba992a6b610615bde9c678f4b111bba667 (patch) | |
tree | 6ffd89cc8a88b2c37a2a55daffa3d27c03c61b25 /libmpcodecs/dec_audio.c | |
parent | eb96cc741e216ac2d0383671f280fe7484cfd334 (diff) | |
download | mpv-d63fb8ba992a6b610615bde9c678f4b111bba667.tar.bz2 mpv-d63fb8ba992a6b610615bde9c678f4b111bba667.tar.xz |
Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with
an almost-trivial implementation.
This allows making the builtin codec structs const, and it also makes
clearer that this "selected" status is not used outside the init functions.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25689 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/dec_audio.c')
-rw-r--r-- | libmpcodecs/dec_audio.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libmpcodecs/dec_audio.c b/libmpcodecs/dec_audio.c index 77764d5928..b7ce68f0b1 100644 --- a/libmpcodecs/dec_audio.c +++ b/libmpcodecs/dec_audio.c @@ -129,7 +129,7 @@ static int init_audio_codec(sh_audio_t *sh_audio) } static int init_audio(sh_audio_t *sh_audio, char *codecname, char *afm, - int status) + int status, stringset_t *selected) { unsigned int orig_fourcc = sh_audio->wf ? sh_audio->wf->wFormatTag : 0; int force = 0; @@ -152,7 +152,7 @@ static int init_audio(sh_audio_t *sh_audio, char *codecname, char *afm, if (sh_audio->wf) sh_audio->wf->wFormatTag = i; // ok we found one codec - if (sh_audio->codec->flags & CODECS_FLAG_SELECTED) + if (stringset_test(selected, sh_audio->codec->name)) continue; // already tried & failed if (codecname && strcmp(sh_audio->codec->name, codecname)) continue; // -ac @@ -160,7 +160,7 @@ static int init_audio(sh_audio_t *sh_audio, char *codecname, char *afm, continue; // afm doesn't match if (!force && sh_audio->codec->status < status) continue; // too unstable - sh_audio->codec->flags |= CODECS_FLAG_SELECTED; // tagging it + stringset_add(selected, sh_audio->codec->name); // tagging it // ok, it matches all rules, let's find the driver! for (i = 0; mpcodecs_ad_drivers[i] != NULL; i++) if (!strcmp(mpcodecs_ad_drivers[i]->info->short_name, @@ -227,24 +227,25 @@ static int init_audio(sh_audio_t *sh_audio, char *codecname, char *afm, int init_best_audio_codec(sh_audio_t *sh_audio, char **audio_codec_list, char **audio_fm_list) { + stringset_t selected; char *ac_l_default[2] = { "", (char *) NULL }; // hack: if (!audio_codec_list) audio_codec_list = ac_l_default; // Go through the codec.conf and find the best codec... sh_audio->inited = 0; - codecs_reset_selection(1); + stringset_init(&selected); while (!sh_audio->inited && *audio_codec_list) { char *audio_codec = *(audio_codec_list++); if (audio_codec[0]) { if (audio_codec[0] == '-') { // disable this codec: - select_codec(audio_codec + 1, 1); + stringset_add(&selected, audio_codec + 1); } else { // forced codec by name: mp_msg(MSGT_DECAUDIO, MSGL_INFO, MSGTR_ForcedAudioCodec, audio_codec); - init_audio(sh_audio, audio_codec, NULL, -1); + init_audio(sh_audio, audio_codec, NULL, -1, &selected); } } else { int status; @@ -259,17 +260,18 @@ int init_best_audio_codec(sh_audio_t *sh_audio, char **audio_codec_list, audio_fm); for (status = CODECS_STATUS__MAX; status >= CODECS_STATUS__MIN; --status) - if (init_audio(sh_audio, NULL, audio_fm, status)) + if (init_audio(sh_audio, NULL, audio_fm, status, &selected)) break; } } if (!sh_audio->inited) for (status = CODECS_STATUS__MAX; status >= CODECS_STATUS__MIN; --status) - if (init_audio(sh_audio, NULL, NULL, status)) + if (init_audio(sh_audio, NULL, NULL, status, &selected)) break; } } + stringset_free(&selected); if (!sh_audio->inited) { mp_msg(MSGT_DECAUDIO, MSGL_ERR, MSGTR_CantFindAudioCodec, |