aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>2015-02-28 23:15:39 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-03-01 02:37:56 +0100
commitdcf19008a67f35ae817a7af65ce2625a82acb641 (patch)
tree22946cc1e5efbc40f959e3f0baf19c127a17dfe3
parent5cb6b53050e39ed3cf7dabcf3cd8198a934f9bd2 (diff)
downloadffmpeg-dcf19008a67f35ae817a7af65ce2625a82acb641.tar.gz
avfilter/af_volume: fix precision=fixed and volume=0 case
When precision is fixed and volume is 0, filter_frame does not perform any operation on the output buffer. This works if the output buffer has been allocated and zeroed with ff_get_audio_buffer but not if the input buffer is used as output buffer. Fix this by not using the input buffer as output buffer if precision is fixed and volume is 0. Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavfilter/af_volume.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libavfilter/af_volume.c b/libavfilter/af_volume.c
index 4809ae77dd..8d49c65163 100644
--- a/libavfilter/af_volume.c
+++ b/libavfilter/af_volume.c
@@ -402,7 +402,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
}
/* do volume scaling in-place if input buffer is writable */
- if (av_frame_is_writable(buf)) {
+ if (av_frame_is_writable(buf)
+ && (vol->precision != PRECISION_FIXED || vol->volume_i > 0)) {
out_buf = buf;
} else {
out_buf = ff_get_audio_buffer(inlink, nb_samples);