Gentoo Archives: gentoo-commits

From: "Pacho Ramos (pacho)" <pacho@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in media-plugins/gst-plugins-libav/files: gst-plugins-libav-1.2.4-ffmpeg2.patch gst-plugins-libav-1.2.4-fix-memory-leak.patch
Date: Wed, 25 Jun 2014 09:32:32
Message-Id: 20140625093227.A39292004F@flycatcher.gentoo.org
1 pacho 14/06/25 09:32:27
2
3 Added: gst-plugins-libav-1.2.4-ffmpeg2.patch
4 gst-plugins-libav-1.2.4-fix-memory-leak.patch
5 Log:
6 Version bump, fix memory leak (#494282)
7
8 (Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key A188FBD4)
9
10 Revision Changes Path
11 1.1 media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-ffmpeg2.patch
12
13 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-ffmpeg2.patch?rev=1.1&view=markup
14 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-ffmpeg2.patch?rev=1.1&content-type=text/plain
15
16 Index: gst-plugins-libav-1.2.4-ffmpeg2.patch
17 ===================================================================
18 Index: gst-libav-1.2.0/ext/libav/gstavauddec.c
19 ===================================================================
20 --- gst-libav-1.2.0.orig/ext/libav/gstavauddec.c
21 +++ gst-libav-1.2.0/ext/libav/gstavauddec.c
22 @@ -460,7 +460,7 @@ gst_ffmpegauddec_audio_frame (GstFFMpegA
23 GstBuffer ** outbuf, GstFlowReturn * ret)
24 {
25 gint len = -1;
26 - gint have_data = AVCODEC_MAX_AUDIO_FRAME_SIZE;
27 + gint have_data = 0;
28 AVPacket packet;
29 AVFrame frame;
30
31 Index: gst-libav-1.2.0/ext/libav/gstavaudenc.c
32 ===================================================================
33 --- gst-libav-1.2.0.orig/ext/libav/gstavaudenc.c
34 +++ gst-libav-1.2.0/ext/libav/gstavaudenc.c
35 @@ -289,7 +289,6 @@ gst_ffmpegaudenc_set_format (GstAudioEnc
36 ffmpegaudenc->context->coder_type = 0;
37 ffmpegaudenc->context->context_model = 0;
38 ffmpegaudenc->context->scenechange_threshold = 0;
39 - ffmpegaudenc->context->inter_threshold = 0;
40
41 /* fetch pix_fmt and so on */
42 gst_ffmpeg_audioinfo_to_context (info, ffmpegaudenc->context);
43 Index: gst-libav-1.2.0/ext/libav/gstavcfg.c
44 ===================================================================
45 --- gst-libav-1.2.0.orig/ext/libav/gstavcfg.c
46 +++ gst-libav-1.2.0/ext/libav/gstavcfg.c
47 @@ -171,13 +171,10 @@ gst_ffmpeg_idct_algo_get_type (void)
48 {FF_IDCT_INT, "JPEG reference Integer", "int"},
49 {FF_IDCT_SIMPLE, "Simple", "simple"},
50 {FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
51 - {FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
52 {FF_IDCT_ARM, "ARM", "arm"},
53 {FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
54 {FF_IDCT_SH4, "SH4", "sh4"},
55 {FF_IDCT_SIMPLEARM, "SIMPLEARM", "simplearm"},
56 - {FF_IDCT_H264, "H264", "h264"},
57 - {FF_IDCT_VP3, "VP3", "vp3"},
58 {FF_IDCT_IPP, "IPP", "ipp"},
59 {FF_IDCT_XVIDMMX, "XVIDMMX", "xvidmmx"},
60 {0, NULL, NULL},
61 @@ -274,9 +271,6 @@ gst_ffmpeg_flags_get_type (void)
62 "global-headers"},
63 {CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
64 "aic"},
65 - {CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
66 - {CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
67 - "qp-rd"},
68 {CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
69 {0, NULL, NULL},
70 };
71 @@ -564,18 +558,6 @@ gst_ffmpeg_cfg_init (void)
72 -100, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
73 gst_ffmpeg_add_pspec (pspec, max_key_interval, FALSE, mpeg, NULL);
74
75 - pspec = g_param_spec_int ("luma-elim-threshold",
76 - "Luma Elimination Threshold",
77 - "Luma Single Coefficient Elimination Threshold",
78 - -99, 99, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
79 - gst_ffmpeg_add_pspec (pspec, config.luma_elim_threshold, FALSE, mpeg, NULL);
80 -
81 - pspec = g_param_spec_int ("chroma-elim-threshold",
82 - "Chroma Elimination Threshold",
83 - "Chroma Single Coefficient Elimination Threshold",
84 - -99, 99, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
85 - gst_ffmpeg_add_pspec (pspec, config.chroma_elim_threshold, FALSE, mpeg, NULL);
86 -
87 pspec = g_param_spec_float ("lumi-masking", "Luminance Masking",
88 "Luminance Masking", -1.0f, 1.0f, 0.0f,
89 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
90 Index: gst-libav-1.2.0/ext/libav/gstavcodecmap.c
91 ===================================================================
92 --- gst-libav-1.2.0.orig/ext/libav/gstavcodecmap.c
93 +++ gst-libav-1.2.0/ext/libav/gstavcodecmap.c
94 @@ -788,12 +788,10 @@ gst_ffmpeg_codecid_to_caps (enum AVCodec
95 break;
96 }
97
98 - /* FIXME: context->sub_id must be filled in during decoding */
99 caps =
100 gst_ff_vid_caps_new (context, NULL, codec_id, encode,
101 "video/x-pn-realvideo", "rmversion", G_TYPE_INT, version, NULL);
102 if (context) {
103 - gst_caps_set_simple (caps, "format", G_TYPE_INT, context->sub_id, NULL);
104 if (context->extradata_size >= 8) {
105 gst_caps_set_simple (caps,
106 "subformat", G_TYPE_INT, GST_READ_UINT32_BE (context->extradata),
107 @@ -2892,18 +2890,6 @@ gst_ffmpeg_caps_with_codecid (enum AVCod
108 }
109 break;
110
111 - case AV_CODEC_ID_RV10:
112 - case AV_CODEC_ID_RV20:
113 - case AV_CODEC_ID_RV30:
114 - case AV_CODEC_ID_RV40:
115 - {
116 - gint format;
117 -
118 - if (gst_structure_get_int (str, "format", &format))
119 - context->sub_id = format;
120 -
121 - break;
122 - }
123 case AV_CODEC_ID_COOK:
124 case AV_CODEC_ID_RA_288:
125 case AV_CODEC_ID_RA_144:
126 Index: gst-libav-1.2.0/ext/libav/gstavvidenc.c
127 ===================================================================
128 --- gst-libav-1.2.0.orig/ext/libav/gstavvidenc.c
129 +++ gst-libav-1.2.0/ext/libav/gstavvidenc.c
130 @@ -338,7 +338,6 @@ gst_ffmpegvidenc_set_format (GstVideoEnc
131 ffmpegenc->context->coder_type = 0;
132 ffmpegenc->context->context_model = 0;
133 ffmpegenc->context->scenechange_threshold = 0;
134 - ffmpegenc->context->inter_threshold = 0;
135
136 /* and last but not least the pass; CBR, 2-pass, etc */
137 ffmpegenc->context->flags |= ffmpegenc->pass;
138
139
140
141 1.1 media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch
142
143 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch?rev=1.1&view=markup
144 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.2.4-fix-memory-leak.patch?rev=1.1&content-type=text/plain
145
146 Index: gst-plugins-libav-1.2.4-fix-memory-leak.patch
147 ===================================================================
148 --- ext/libav/gstavviddec.c
149 +++ ext/libav/gstavviddec.c
150 @@ -523,6 +523,7 @@ open_failed:
151
152 typedef struct
153 {
154 + GstFFMpegVidDec *ffmpegdec;
155 GstVideoCodecFrame *frame;
156 gboolean mapped;
157 GstVideoFrame vframe;
158 @@ -530,13 +531,17 @@ typedef struct
159 } GstFFMpegVidDecVideoFrame;
160
161 static GstFFMpegVidDecVideoFrame *
162 -gst_ffmpegviddec_video_frame_new (GstVideoCodecFrame * frame)
163 +gst_ffmpegviddec_video_frame_new (GstFFMpegVidDec * ffmpegdec,
164 + GstVideoCodecFrame * frame)
165 {
166 GstFFMpegVidDecVideoFrame *dframe;
167
168 dframe = g_slice_new0 (GstFFMpegVidDecVideoFrame);
169 + dframe->ffmpegdec = ffmpegdec;
170 dframe->frame = frame;
171
172 + GST_DEBUG_OBJECT (ffmpegdec, "new video frame %p", dframe);
173 +
174 return dframe;
175 }
176
177 @@ -544,6 +549,8 @@ static void
178 gst_ffmpegviddec_video_frame_free (GstFFMpegVidDec * ffmpegdec,
179 GstFFMpegVidDecVideoFrame * frame)
180 {
181 + GST_DEBUG_OBJECT (ffmpegdec, "free video frame %p", frame);
182 +
183 if (frame->mapped)
184 gst_video_frame_unmap (&frame->vframe);
185 gst_video_decoder_release_frame (GST_VIDEO_DECODER (ffmpegdec), frame->frame);
186 @@ -551,6 +558,14 @@ gst_ffmpegviddec_video_frame_free (GstFFMpegVidDec * ffmpegdec,
187 g_slice_free (GstFFMpegVidDecVideoFrame, frame);
188 }
189
190 +static void
191 +dummy_free_buffer (void *opaque, uint8_t * data)
192 +{
193 + GstFFMpegVidDecVideoFrame *frame = opaque;
194 +
195 + gst_ffmpegviddec_video_frame_free (frame->ffmpegdec, frame);
196 +}
197 +
198 /* called when ffmpeg wants us to allocate a buffer to write the decoded frame
199 * into. We try to give it memory from our pool */
200 static int
201 @@ -589,7 +604,8 @@ gst_ffmpegviddec_get_buffer (AVCodecContext * context, AVFrame * picture)
202 goto duplicate_frame;
203
204 /* GstFFMpegVidDecVideoFrame receives the frame ref */
205 - picture->opaque = dframe = gst_ffmpegviddec_video_frame_new (frame);
206 + picture->opaque = dframe =
207 + gst_ffmpegviddec_video_frame_new (ffmpegdec, frame);
208
209 GST_DEBUG_OBJECT (ffmpegdec, "storing opaque %p", dframe);
210
211 @@ -695,12 +711,20 @@ invalid_frame:
212 fallback:
213 {
214 int c;
215 + gboolean first = TRUE;
216 int ret = avcodec_default_get_buffer (context, picture);
217
218 GST_LOG_OBJECT (ffmpegdec, "performing fallback alloc");
219 - for (c = 0; c < AV_NUM_DATA_POINTERS; c++)
220 + for (c = 0; c < AV_NUM_DATA_POINTERS; c++) {
221 ffmpegdec->stride[c] = picture->linesize[c];
222
223 + if (picture->buf[c] == NULL && first) {
224 + picture->buf[c] =
225 + av_buffer_create (NULL, 0, dummy_free_buffer, dframe, 0);
226 + first = FALSE;
227 + }
228 + }
229 +
230 return ret;
231 }
232 duplicate_frame:
233 @@ -1684,8 +1718,8 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
234 avcodec_align_dimensions2 (ffmpegdec->context, &width, &height,
235 linesize_align);
236 edge =
237 - ffmpegdec->context->
238 - flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width ();
239 + ffmpegdec->
240 + context->flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width ();
241 /* increase the size for the padding */
242 width += edge << 1;
243 height += edge << 1;