summaryrefslogtreecommitdiffstats
path: root/audio/filter/af.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-05 20:39:52 +0200
committerwm4 <wm4@nowhere>2013-05-12 21:24:54 +0200
commit7971bb87cb46f90152913de6ac673ae3bd1637a3 (patch)
tree7929e829c5960425270f4f0c017d84c37872ac5b /audio/filter/af.c
parentf7a427676c0fe3c12509e3d9a243301f93626b0a (diff)
downloadmpv-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.c15
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;