Commit 6a27ae28 authored by Janne Grunau's avatar Janne Grunau

mpegvideo: treat delayed pictures as used

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.
parent bd255f9f
...@@ -95,12 +95,6 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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;
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment