You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
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>
This commit is contained in:
@ -104,7 +104,6 @@ typedef struct SVQ3Context {
|
||||
int adaptive_quant;
|
||||
int h_edge_pos;
|
||||
int v_edge_pos;
|
||||
int last_frame_output;
|
||||
int slice_num;
|
||||
int qscale;
|
||||
int cbp;
|
||||
@ -1398,11 +1397,8 @@ static int svq3_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
|
||||
|
||||
/* special case for last picture */
|
||||
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;
|
||||
}
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user