diff options
author | wm4 <wm4@nowhere> | 2013-04-05 20:39:52 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-05-12 21:24:54 +0200 |
commit | 7971bb87cb46f90152913de6ac673ae3bd1637a3 (patch) | |
tree | 7929e829c5960425270f4f0c017d84c37872ac5b /audio/filter/af.c | |
parent | f7a427676c0fe3c12509e3d9a243301f93626b0a (diff) | |
download | mpv-7971bb87cb46f90152913de6ac673ae3bd1637a3.tar.bz2 mpv-7971bb87cb46f90152913de6ac673ae3bd1637a3.tar.xz |
af: use mp_chmap for mp_audio, include channel map in format negotiation
Now af_lavrresample pretends to reorder the channels, although it
doesn't yet, and nothing sets non-standard layouts either.
Diffstat (limited to 'audio/filter/af.c')
-rw-r--r-- | audio/filter/af.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/audio/filter/af.c b/audio/filter/af.c index 4d2e5e3ac3..3bc9ae764d 100644 --- a/audio/filter/af.c +++ b/audio/filter/af.c @@ -84,7 +84,7 @@ static struct af_info* filter_list[] = { static bool af_config_equals(struct mp_audio *a, struct mp_audio *b) { return a->format == b->format - && a->nch == b->nch + && mp_chmap_equals(&a->channels, &b->channels) && a->rate == b->rate; } @@ -93,7 +93,7 @@ static void af_copy_unset_fields(struct mp_audio *dst, struct mp_audio *src) if (dst->format == AF_FORMAT_UNKNOWN) mp_audio_set_format(dst, src->format); if (dst->nch == 0) - dst->nch = src->nch; + mp_audio_set_channels(dst, &src->channels); if (dst->rate == 0) dst->rate = src->rate; } @@ -304,8 +304,11 @@ repeat: static void print_fmt(struct mp_audio *d) { if (d) { - mp_msg(MSGT_AFILTER, MSGL_V, "%dHz/%dch/%s", d->rate, d->nch, + char *chstr = mp_chmap_to_str(&d->channels); + mp_msg(MSGT_AFILTER, MSGL_V, "%dHz/%s(%dch)/%s", d->rate, + chstr ? chstr : "?", d->nch, af_fmt2str_short(d->format)); + talloc_free(chstr); } else mp_msg(MSGT_AFILTER, MSGL_V, "(?)"); } @@ -386,9 +389,9 @@ static int af_fix_channels(struct af_stream *s, struct af_instance **p_af, struct af_instance *af = *p_af; struct af_instance *prev = af->prev; struct mp_audio actual = *prev->data; - if (actual.nch == in.nch) + if (mp_chmap_equals(&actual.channels, &in.channels)) return AF_FALSE; - if (prev->control(prev, AF_CONTROL_CHANNELS, &in.nch) == AF_OK) { + if (prev->control(prev, AF_CONTROL_CHANNELS, &in.channels) == AF_OK) { *p_af = prev; return AF_OK; } @@ -397,7 +400,7 @@ static int af_fix_channels(struct af_stream *s, struct af_instance **p_af, if (new == NULL) return AF_ERROR; new->auto_inserted = true; - if (AF_OK != (rv = new->control(new, AF_CONTROL_CHANNELS, &in.nch))) + if (AF_OK != (rv = new->control(new, AF_CONTROL_CHANNELS, &in.channels))) return rv; *p_af = new; return AF_OK; |