diff options
author | wm4 <wm4@nowhere> | 2015-10-26 15:54:00 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-10-26 15:54:00 +0100 |
commit | 48c2e9d67d36af8aff354b18ab2ddda26abca117 (patch) | |
tree | 09dd86519bbe9c557d19762bff508919086e79a4 /audio/filter | |
parent | 0ffaf653a21d0c767abfcf1094f9e57a6c9b5ba4 (diff) | |
download | mpv-48c2e9d67d36af8aff354b18ab2ddda26abca117.tar.bz2 mpv-48c2e9d67d36af8aff354b18ab2ddda26abca117.tar.xz |
audio: use AVFrames with more than 8 channels correctly
Requires messy dealing with the extended_ fields.
Don't bother with af_lavfi and ao_lavc for now. There are probably no
valid use-cases for these.
Diffstat (limited to 'audio/filter')
-rw-r--r-- | audio/filter/af_lavfi.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/audio/filter/af_lavfi.c b/audio/filter/af_lavfi.c index a40904aa78..af521abd9c 100644 --- a/audio/filter/af_lavfi.c +++ b/audio/filter/af_lavfi.c @@ -195,6 +195,10 @@ static int control(struct af_instance *af, int cmd, void *arg) if (af_to_avformat(in->format) == AV_SAMPLE_FMT_NONE) mp_audio_set_format(in, AF_FORMAT_FLOAT); + // Removing this requires fixing AVFrame.data vs. AVFrame.extended_data + if (in->channels.num > AV_NUM_DATA_POINTERS) + return AF_ERROR; + if (!mp_chmap_is_lavc(&in->channels)) mp_chmap_reorder_to_lavc(&in->channels); // will always work @@ -211,7 +215,7 @@ static int control(struct af_instance *af, int cmd, void *arg) mp_chmap_from_lavc(&out_cm, l_out->channel_layout); mp_audio_set_channels(out, &out_cm); - if (!mp_audio_config_valid(out)) + if (!mp_audio_config_valid(out) || out->channels.num > AV_NUM_DATA_POINTERS) return AF_ERROR; p->timebase_out = l_out->time_base; @@ -349,8 +353,6 @@ static int af_open(struct af_instance *af) af->uninit = uninit; af->filter_frame = filter_frame; af->filter_out = filter_out; - // Removing this requires fixing AVFrame.data vs. AVFrame.extended_data - assert(MP_NUM_CHANNELS <= AV_NUM_DATA_POINTERS); return AF_OK; } |