Browse Source

avcodec/svq3: Improve returning last picture

Use av_frame_move_ref() instead of av_frame_ref().
This allows to remove the separate variable for whether
we have already returned the delayed last pic. It also
makes stream looping work when looping multiple times;
previously the delayed pic was only output the first time,
because last_frame_output was never reset.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Andreas Rheinhardt 6 tháng trước cách đây
mục cha
commit
b6f84cd72a
1 tập tin đã thay đổi với 2 bổ sung6 xóa
  1. 2 6
      libavcodec/svq3.c

+ 2 - 6
libavcodec/svq3.c

@@ -104,7 +104,6 @@ typedef struct SVQ3Context {
     int adaptive_quant;
     int adaptive_quant;
     int h_edge_pos;
     int h_edge_pos;
     int v_edge_pos;
     int v_edge_pos;
-    int last_frame_output;
     int slice_num;
     int slice_num;
     int qscale;
     int qscale;
     int cbp;
     int cbp;
@@ -1398,11 +1397,8 @@ static int svq3_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
 
 
     /* special case for last picture */
     /* special case for last picture */
     if (buf_size == 0) {
     if (buf_size == 0) {
-        if (s->next_pic->f->data[0] && !s->low_delay && !s->last_frame_output) {
-            ret = av_frame_ref(rframe, s->next_pic->f);
-            if (ret < 0)
-                return ret;
-            s->last_frame_output = 1;
+        if (s->next_pic->f->data[0] && !s->low_delay) {
+            av_frame_move_ref(rframe, s->next_pic->f);
             *got_frame          = 1;
             *got_frame          = 1;
         }
         }
         return 0;
         return 0;