Merge commit '3799376dd3373ee255651ed542c75b15665801a8'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 6 Aug 2013 07:35:03 +0000 (09:35 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 6 Aug 2013 07:35:03 +0000 (09:35 +0200)
* commit '3799376dd3373ee255651ed542c75b15665801a8':
  lavfi/fifo: fix flushing when using request_samples

Conflicts:
libavfilter/fifo.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavfilter/fifo.c

diff --combined libavfilter/fifo.c
index b06720ec17b14e832c3acdc3456cc81eafcd624c,a58ce9f7ab08ee085c8c8ba4950b9e8d2ca129b8..efc89685c93865f59fe46b4c22658095b349baa6
@@@ -1,20 -1,20 +1,20 @@@
  /*
   * Copyright (c) 2007 Bobby Bingham
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -147,10 -147,14 +147,14 @@@ static int return_audio_frame(AVFilterC
  {
      AVFilterLink *link = ctx->outputs[0];
      FifoContext *s = ctx->priv;
-     AVFrame *head = s->root.next->frame;
+     AVFrame *head = s->root.next ? s->root.next->frame : NULL;
      AVFrame *out;
      int ret;
  
+     /* if head is NULL then we're flushing the remaining samples in out */
+     if (!head && !s->out)
+         return AVERROR_EOF;
      if (!s->out &&
          head->nb_samples >= link->request_samples &&
          calc_ptr_alignment(head) >= 32) {
@@@ -227,9 -231,11 +231,12 @@@ static int request_frame(AVFilterLink *
      int ret = 0;
  
      if (!fifo->root.next) {
-         if ((ret = ff_request_frame(outlink->src->inputs[0])) < 0)
+         if ((ret = ff_request_frame(outlink->src->inputs[0])) < 0) {
+             if (ret == AVERROR_EOF && outlink->request_samples)
+                 return return_audio_frame(outlink->src);
              return ret;
+         }
 +        av_assert0(fifo->root.next);
      }
  
      if (outlink->request_samples) {