// Find a source audio track matching given language
static int find_audio_track(const hb_title_t *title,
- const char *lang, int start)
+ const char *lang, int start, int behavior)
{
hb_audio_config_t * audio;
int ii, count;
for (ii = start; ii < count; ii++)
{
audio = hb_list_audio_config_item(title->list_audio, ii);
- // Ignore secondary audio types
- if ((audio->lang.type == HB_AUDIO_TYPE_NONE ||
+ // When behavior is "first" matching track,
+ // ignore secondary audio types
+ //
+ // When behavior is "all" matching tracks,
+ // allow any audio track type
+ if ((behavior == 2 ||
+ audio->lang.type == HB_AUDIO_TYPE_NONE ||
audio->lang.type == HB_AUDIO_TYPE_NORMAL) &&
(!strcmp(lang, audio->lang.iso639_2) || !strcmp(lang, "und")))
{
{
hb_value_array_t * encoder_list = hb_dict_get(preset, "AudioList");
int count = hb_value_array_len(encoder_list);
- int track = find_audio_track(title, lang, 0);
+ int track = find_audio_track(title, lang, 0, behavior);
int current_mode = 0;
while (track >= 0)
{
hb_value_array_append(list, audio_dict);
}
if (behavior == 2)
- track = find_audio_track(title, lang, track + 1);
+ track = find_audio_track(title, lang, track + 1, behavior);
else
break;
}