diff options
author | wm4 <wm4@nowhere> | 2014-09-15 23:14:19 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-09-15 23:14:19 +0200 |
commit | b2b1b848da38f6576b2d711eaf86958976b52bde (patch) | |
tree | a82a868015945bef68181edd0cc9aa4223c45bf5 /audio | |
parent | 7c2fb859ab10fa375a38179fd49daac36ab111c8 (diff) | |
download | mpv-b2b1b848da38f6576b2d711eaf86958976b52bde.tar.bz2 mpv-b2b1b848da38f6576b2d711eaf86958976b52bde.tar.xz |
af_lavrresample: fix crash with size 0
The filter output size can be 0. Due to how filtering works, this is
nothing unusual, but avresample_convert() will return 0. The same case
is already handling with "normal" resampling (this commit fixes the
reordering code).
Additionally, don't use an assert(). avresample_convert() failing is
unusual, but might also happen due to e.g. internal out of memory
conditions, so we shouldn't just crash on it.
Curiously observed with --ao=oss --audio-channels=5.1 when changing
speed.
Diffstat (limited to 'audio')
-rw-r--r-- | audio/filter/af_lavrresample.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/audio/filter/af_lavrresample.c b/audio/filter/af_lavrresample.c index d43f9ea814..8dce52cf67 100644 --- a/audio/filter/af_lavrresample.c +++ b/audio/filter/af_lavrresample.c @@ -338,7 +338,7 @@ static int filter(struct af_instance *af, struct mp_audio *data, int flags) if (needs_reorder(s->reorder_out, out->nch)) { if (af_fmt_is_planar(out->format)) { reorder_planes(data, s->reorder_out); - } else { + } else if (out->samples) { int out_size = out->samples * out->sstride; if (talloc_get_size(s->reorder_buffer) < out_size) s->reorder_buffer = talloc_realloc_size(s, s->reorder_buffer, out_size); @@ -346,7 +346,8 @@ static int filter(struct af_instance *af, struct mp_audio *data, int flags) int out_samples = avresample_convert(s->avrctx_out, (uint8_t **) data->planes, out_size, out->samples, (uint8_t **) out->planes, out_size, out->samples); - assert(out_samples == data->samples); + if (out_samples < 0) + MP_ERR(af, "Reordering failed.\n"); } } |