audio: avoid downmixing in a certain special-case

As indicated by the added test. In this case, fallback and downmix have
the same score, but fallback happens to give better results. So prefer
fallback over downmix.

(This is probably not a correct solution.)
This commit is contained in:
wm4 2015-04-27 23:21:14 +02:00
parent 570f4b136f
commit d3c7fd9d7c
2 changed files with 20 additions and 3 deletions

View File

@ -200,8 +200,8 @@ bool mp_chmap_sel_adjust(const struct mp_chmap_sel *s, struct mp_chmap *map)
}
#define UPMIX_IDX 0
#define DOWNMIX_IDX 1
#define FALLBACK_IDX 2
#define FALLBACK_IDX 1
#define DOWNMIX_IDX 2
static bool test_fallbacks(struct mp_chmap *a, struct mp_chmap *b,
int best_diffs[2], struct mp_chmap best[2])
@ -278,7 +278,7 @@ bool mp_chmap_sel_fallback(const struct mp_chmap_sel *s, struct mp_chmap *map)
}
}
for (int i = UPMIX_IDX; i < MP_ARRAY_SIZE(best); i++) {
for (int i = 0; i < MP_ARRAY_SIZE(best); i++) {
if (best_diffs[i] < INT_MAX) {
*map = best[i];
return true;

View File

@ -145,6 +145,22 @@ static void test_mp_chmap_sel_fallback_stereo_to_stereo(void **state) {
assert_string_equal(mp_chmap_to_str(&c), "stereo");
}
static void test_mp_chmap_sel_fallback_no_downmix(void **state) {
struct mp_chmap a;
struct mp_chmap b;
struct mp_chmap c;
struct mp_chmap_sel s = {0};
mp_chmap_from_str(&a, bstr0("stereo"));
mp_chmap_from_str(&b, bstr0("7.1(rear)"));
mp_chmap_from_str(&c, bstr0("5.1(side)"));
mp_chmap_sel_add_map(&s, &a);
mp_chmap_sel_add_map(&s, &b);
assert_true(mp_chmap_sel_fallback(&s, &c));
assert_string_equal(mp_chmap_to_str(&c), "7.1(rear)");
}
int main(void) {
const UnitTest tests[] = {
unit_test(test_mp_chmap_sel_fallback_upmix),
@ -157,6 +173,7 @@ int main(void) {
unit_test(test_mp_chmap_sel_fallback_works_on_alsa_chmaps),
unit_test(test_mp_chmap_sel_fallback_mono_to_stereo),
unit_test(test_mp_chmap_sel_fallback_stereo_to_stereo),
unit_test(test_mp_chmap_sel_fallback_no_downmix),
};
return run_tests(tests);
}