[FFmpeg-cvslog] avfilter/af_dynaudnorm: fix hang with too short input

Paul B Mahol git at videolan.org
Sun Jan 8 21:45:59 EET 2017


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun Jan  8 20:41:36 2017 +0100| [0ddc24d23248b5070c7fcdaee22c7852381fce1d] | committer: Paul B Mahol

avfilter/af_dynaudnorm: fix hang with too short input

The only thing we can do at such point is return samples unchanged.

Signed-off-by: Paul B Mahol <onemda at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0ddc24d23248b5070c7fcdaee22c7852381fce1d
---

 libavfilter/af_dynaudnorm.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/libavfilter/af_dynaudnorm.c b/libavfilter/af_dynaudnorm.c
index 91ec45a..ddbef26 100644
--- a/libavfilter/af_dynaudnorm.c
+++ b/libavfilter/af_dynaudnorm.c
@@ -708,8 +708,15 @@ static int request_frame(AVFilterLink *outlink)
 
     ret = ff_request_frame(ctx->inputs[0]);
 
-    if (ret == AVERROR_EOF && !ctx->is_disabled && s->delay)
-        ret = flush_buffer(s, ctx->inputs[0], outlink);
+    if (ret == AVERROR_EOF && !ctx->is_disabled && s->delay) {
+        if (!cqueue_empty(s->gain_history_smoothed[0])) {
+            ret = flush_buffer(s, ctx->inputs[0], outlink);
+        } else if (s->queue.available) {
+            AVFrame *out = ff_bufqueue_get(&s->queue);
+
+            ret = ff_filter_frame(outlink, out);
+        }
+    }
 
     return ret;
 }



More information about the ffmpeg-cvslog mailing list