This requires to move the avcodec_default_free_buffers() call to ff_MPV_common_end() since otherwise delayed pictures would get freed during a size change.tags/n1.1
@@ -95,12 +95,6 @@ | |||||
#define IS_REF0(a) ((a) & MB_TYPE_REF0) | #define IS_REF0(a) ((a) & MB_TYPE_REF0) | ||||
#define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT) | #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT) | ||||
/** | |||||
* Value of Picture.reference when Picture is not a reference picture, but | |||||
* is held for delayed output. | |||||
*/ | |||||
#define DELAYED_PIC_REF 4 | |||||
#define QP_MAX_NUM (51 + 2 * 6) // The maximum supported qp | #define QP_MAX_NUM (51 + 2 * 6) // The maximum supported qp | ||||
/* NAL unit types */ | /* NAL unit types */ | ||||
@@ -1008,9 +1008,6 @@ static int free_context_frame(MpegEncContext *s) | |||||
for (i = 0; i < 3; i++) | for (i = 0; i < 3; i++) | ||||
av_freep(&s->visualization_buffer[i]); | av_freep(&s->visualization_buffer[i]); | ||||
if (!(s->avctx->active_thread_type & FF_THREAD_FRAME)) | |||||
avcodec_default_free_buffers(s->avctx); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -1126,6 +1123,9 @@ void ff_MPV_common_end(MpegEncContext *s) | |||||
free_context_frame(s); | free_context_frame(s); | ||||
if (!(s->avctx->active_thread_type & FF_THREAD_FRAME)) | |||||
avcodec_default_free_buffers(s->avctx); | |||||
s->context_initialized = 0; | s->context_initialized = 0; | ||||
s->last_picture_ptr = | s->last_picture_ptr = | ||||
s->next_picture_ptr = | s->next_picture_ptr = | ||||
@@ -1244,7 +1244,7 @@ static inline int pic_is_unused(MpegEncContext *s, Picture *pic) | |||||
{ | { | ||||
if (pic->f.data[0] == NULL) | if (pic->f.data[0] == NULL) | ||||
return 1; | return 1; | ||||
if (pic->needs_realloc) | |||||
if (pic->needs_realloc && !(pic->f.reference & DELAYED_PIC_REF)) | |||||
if (!pic->owner2 || pic->owner2 == s) | if (!pic->owner2 || pic->owner2 == s) | ||||
return 1; | return 1; | ||||
return 0; | return 0; | ||||
@@ -79,6 +79,12 @@ enum OutputFormat { | |||||
#define EXT_START_CODE 0x000001b5 | #define EXT_START_CODE 0x000001b5 | ||||
#define USER_START_CODE 0x000001b2 | #define USER_START_CODE 0x000001b2 | ||||
/** | |||||
* Value of Picture.reference when Picture is not a reference picture, but | |||||
* is held for delayed output. | |||||
*/ | |||||
#define DELAYED_PIC_REF 4 | |||||
struct MpegEncContext; | struct MpegEncContext; | ||||
/** | /** | ||||