summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/dec_audio.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-12 14:05:46 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-12 14:05:46 +0000
commitd63fb8ba992a6b610615bde9c678f4b111bba667 (patch)
tree6ffd89cc8a88b2c37a2a55daffa3d27c03c61b25 /libmpcodecs/dec_audio.c
parenteb96cc741e216ac2d0383671f280fe7484cfd334 (diff)
downloadmpv-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.c18
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,