diff options
Diffstat (limited to 'media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch')
-rw-r--r-- | media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch deleted file mode 100644 index 6745e800b6f7..000000000000 --- a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch +++ /dev/null @@ -1,96 +0,0 @@ ---- ext/libav/gstavviddec.c -+++ ext/libav/gstavviddec.c -@@ -523,6 +523,7 @@ open_failed: - - typedef struct - { -+ GstFFMpegVidDec *ffmpegdec; - GstVideoCodecFrame *frame; - gboolean mapped; - GstVideoFrame vframe; -@@ -530,13 +531,17 @@ typedef struct - } GstFFMpegVidDecVideoFrame; - - static GstFFMpegVidDecVideoFrame * --gst_ffmpegviddec_video_frame_new (GstVideoCodecFrame * frame) -+gst_ffmpegviddec_video_frame_new (GstFFMpegVidDec * ffmpegdec, -+ 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; - } - -@@ -544,6 +549,8 @@ 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); -@@ -551,6 +558,14 @@ 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 -@@ -589,7 +604,8 @@ gst_ffmpegviddec_get_buffer (AVCodecContext * context, AVFrame * picture) - goto duplicate_frame; - - /* GstFFMpegVidDecVideoFrame receives the frame ref */ -- picture->opaque = dframe = gst_ffmpegviddec_video_frame_new (frame); -+ picture->opaque = dframe = -+ gst_ffmpegviddec_video_frame_new (ffmpegdec, frame); - - GST_DEBUG_OBJECT (ffmpegdec, "storing opaque %p", dframe); - -@@ -695,12 +711,20 @@ invalid_frame: - fallback: - { - int c; -+ gboolean first = TRUE; - int ret = avcodec_default_get_buffer (context, picture); - - GST_LOG_OBJECT (ffmpegdec, "performing fallback alloc"); -- 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: -@@ -1684,8 +1718,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; |