summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2014-01-11 19:19:24 +0000
committerTim-Philipp Müller <tim@centricular.com>2014-01-11 19:19:24 +0000
commit1a858dda939c785e73259936775a7b137afccd70 (patch)
treef41cb800bcf28d4732be656fcd3f44552514d57c
parentfcf09aff3272a12b1f91168a856637f146ced113 (diff)
downloadgst-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.c34
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;