mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
ffv1: keep last_frame (to be used for error concealment)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
8486c8cc9a
commit
371d37fcf5
@ -181,6 +181,7 @@ typedef struct FFV1Context{
|
||||
int flags;
|
||||
int picture_number;
|
||||
AVFrame picture;
|
||||
AVFrame last_picture;
|
||||
int plane_count;
|
||||
int ac; ///< 1=range coder <-> 0=golomb rice
|
||||
int ac_byte_count; ///< number of bytes used for AC coding
|
||||
@ -1364,6 +1365,8 @@ static av_cold int common_end(AVCodecContext *avctx){
|
||||
|
||||
if (avctx->codec->decode && s->picture.data[0])
|
||||
avctx->release_buffer(avctx, &s->picture);
|
||||
if (avctx->codec->decode && s->last_picture.data[0])
|
||||
avctx->release_buffer(avctx, &s->last_picture);
|
||||
|
||||
for(j=0; j<s->slice_count; j++){
|
||||
FFV1Context *fs= s->slice_context[j];
|
||||
@ -1988,7 +1991,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
||||
p->key_frame= 0;
|
||||
}
|
||||
|
||||
p->reference= 0;
|
||||
p->reference= 3; //for error concealment
|
||||
if(avctx->get_buffer(avctx, p) < 0){
|
||||
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||
return -1;
|
||||
@ -2038,6 +2041,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
||||
*picture= *p;
|
||||
*data_size = sizeof(AVFrame);
|
||||
|
||||
FFSWAP(AVFrame, f->picture, f->last_picture);
|
||||
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user