diff options
author | Tim-Philipp Müller <tim@centricular.com> | 2014-01-11 19:19:24 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2014-01-11 19:19:24 +0000 |
commit | 1a858dda939c785e73259936775a7b137afccd70 (patch) | |
tree | f41cb800bcf28d4732be656fcd3f44552514d57c | |
parent | fcf09aff3272a12b1f91168a856637f146ced113 (diff) | |
download | gst-libav-1a858dda939c785e73259936775a7b137afccd70.tar.gz |
Revert "avviddec: release buffers when not direct rendering"
This reverts commit fcf09aff3272a12b1f91168a856637f146ced113.
This broke the build. In theory the problem might occur with
libav 9 too, but it seems in practice it doesn't, unless you
link against ffmpeg 2.x, but then you're on your own anyway.
https://bugzilla.gnome.org/show_bug.cgi?id=721077
-rw-r--r-- | ext/libav/gstavviddec.c | 34 |
1 files changed, 5 insertions, 29 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index b7b421f..3453231 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -522,7 +522,6 @@ open_failed: typedef struct { - GstFFMpegVidDec *ffmpegdec; GstVideoCodecFrame *frame; gboolean mapped; GstVideoFrame vframe; @@ -530,17 +529,13 @@ typedef struct } GstFFMpegVidDecVideoFrame; static GstFFMpegVidDecVideoFrame * -gst_ffmpegviddec_video_frame_new (GstFFMpegVidDec * ffmpegdec, - GstVideoCodecFrame * frame) +gst_ffmpegviddec_video_frame_new (GstVideoCodecFrame * frame) { GstFFMpegVidDecVideoFrame *dframe; dframe = g_slice_new0 (GstFFMpegVidDecVideoFrame); - dframe->ffmpegdec = ffmpegdec; dframe->frame = frame; - GST_DEBUG_OBJECT (ffmpegdec, "new video frame %p", dframe); - return dframe; } @@ -548,8 +543,6 @@ static void gst_ffmpegviddec_video_frame_free (GstFFMpegVidDec * ffmpegdec, GstFFMpegVidDecVideoFrame * frame) { - GST_DEBUG_OBJECT (ffmpegdec, "free video frame %p", frame); - if (frame->mapped) gst_video_frame_unmap (&frame->vframe); gst_video_decoder_release_frame (GST_VIDEO_DECODER (ffmpegdec), frame->frame); @@ -557,14 +550,6 @@ gst_ffmpegviddec_video_frame_free (GstFFMpegVidDec * ffmpegdec, g_slice_free (GstFFMpegVidDecVideoFrame, frame); } -static void -dummy_free_buffer (void *opaque, uint8_t * data) -{ - GstFFMpegVidDecVideoFrame *frame = opaque; - - gst_ffmpegviddec_video_frame_free (frame->ffmpegdec, frame); -} - /* called when ffmpeg wants us to allocate a buffer to write the decoded frame * into. We try to give it memory from our pool */ static int @@ -603,8 +588,7 @@ gst_ffmpegviddec_get_buffer (AVCodecContext * context, AVFrame * picture) goto duplicate_frame; /* GstFFMpegVidDecVideoFrame receives the frame ref */ - picture->opaque = dframe = - gst_ffmpegviddec_video_frame_new (ffmpegdec, frame); + picture->opaque = dframe = gst_ffmpegviddec_video_frame_new (frame); GST_DEBUG_OBJECT (ffmpegdec, "storing opaque %p", dframe); @@ -708,19 +692,11 @@ invalid_frame: fallback: { int c; - gboolean first = TRUE; int ret = avcodec_default_get_buffer (context, picture); - for (c = 0; c < AV_NUM_DATA_POINTERS; c++) { + for (c = 0; c < AV_NUM_DATA_POINTERS; c++) ffmpegdec->stride[c] = picture->linesize[c]; - if (picture->buf[c] == NULL && first) { - picture->buf[c] = - av_buffer_create (NULL, 0, dummy_free_buffer, dframe, 0); - first = FALSE; - } - } - return ret; } duplicate_frame: @@ -1691,8 +1667,8 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) avcodec_align_dimensions2 (ffmpegdec->context, &width, &height, linesize_align); edge = - ffmpegdec-> - context->flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width (); + ffmpegdec->context-> + flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width (); /* increase the size for the padding */ width += edge << 1; height += edge << 1; |