Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 831604
Collapse All | Expand All

(-)a/ext/libav/gstavauddec.c (-14 / +8 lines)
Lines 168-179 gst_ffmpegauddec_finalize (GObject * object) Link Here
168
  GstFFMpegAudDec *ffmpegdec = (GstFFMpegAudDec *) object;
168
  GstFFMpegAudDec *ffmpegdec = (GstFFMpegAudDec *) object;
169
169
170
  av_frame_free (&ffmpegdec->frame);
170
  av_frame_free (&ffmpegdec->frame);
171
171
  avcodec_free_context (&ffmpegdec->context);
172
  if (ffmpegdec->context != NULL) {
173
    gst_ffmpeg_avcodec_close (ffmpegdec->context);
174
    av_free (ffmpegdec->context);
175
    ffmpegdec->context = NULL;
176
  }
177
172
178
  G_OBJECT_CLASS (parent_class)->finalize (object);
173
  G_OBJECT_CLASS (parent_class)->finalize (object);
179
}
174
}
Lines 193-206 gst_ffmpegauddec_close (GstFFMpegAudDec * ffmpegdec, gboolean reset) Link Here
193
  gst_ffmpeg_avcodec_close (ffmpegdec->context);
188
  gst_ffmpeg_avcodec_close (ffmpegdec->context);
194
  ffmpegdec->opened = FALSE;
189
  ffmpegdec->opened = FALSE;
195
190
196
  if (ffmpegdec->context->extradata) {
191
  av_freep (&ffmpegdec->context->extradata);
197
    av_free (ffmpegdec->context->extradata);
198
    ffmpegdec->context->extradata = NULL;
199
  }
200
192
201
  if (reset) {
193
  if (reset) {
202
    if (avcodec_get_context_defaults3 (ffmpegdec->context,
194
    avcodec_free_context (&ffmpegdec->context);
203
            oclass->in_plugin) < 0) {
195
    ffmpegdec->context = avcodec_alloc_context3 (oclass->in_plugin);
196
    if (ffmpegdec->context == NULL) {
204
      GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
197
      GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
205
      return FALSE;
198
      return FALSE;
206
    }
199
    }
Lines 219-226 gst_ffmpegauddec_start (GstAudioDecoder * decoder) Link Here
219
  oclass = (GstFFMpegAudDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
212
  oclass = (GstFFMpegAudDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
220
213
221
  GST_OBJECT_LOCK (ffmpegdec);
214
  GST_OBJECT_LOCK (ffmpegdec);
222
  gst_ffmpeg_avcodec_close (ffmpegdec->context);
215
  avcodec_free_context (&ffmpegdec->context);
223
  if (avcodec_get_context_defaults3 (ffmpegdec->context, oclass->in_plugin) < 0) {
216
  ffmpegdec->context = avcodec_alloc_context3 (oclass->in_plugin);
217
  if (ffmpegdec->context == NULL) {
224
    GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
218
    GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
225
    GST_OBJECT_UNLOCK (ffmpegdec);
219
    GST_OBJECT_UNLOCK (ffmpegdec);
226
    return FALSE;
220
    return FALSE;
(-)a/ext/libav/gstavaudenc.c (-21 / +19 lines)
Lines 175-184 gst_ffmpegaudenc_finalize (GObject * object) Link Here
175
175
176
  /* clean up remaining allocated data */
176
  /* clean up remaining allocated data */
177
  av_frame_free (&ffmpegaudenc->frame);
177
  av_frame_free (&ffmpegaudenc->frame);
178
  gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
178
  avcodec_free_context (&ffmpegaudenc->context);
179
  gst_ffmpeg_avcodec_close (ffmpegaudenc->refcontext);
179
  avcodec_free_context (&ffmpegaudenc->refcontext);
180
  av_free (ffmpegaudenc->context);
181
  av_free (ffmpegaudenc->refcontext);
182
180
183
  G_OBJECT_CLASS (parent_class)->finalize (object);
181
  G_OBJECT_CLASS (parent_class)->finalize (object);
184
}
182
}
Lines 193-201 gst_ffmpegaudenc_start (GstAudioEncoder * encoder) Link Here
193
  ffmpegaudenc->opened = FALSE;
191
  ffmpegaudenc->opened = FALSE;
194
  ffmpegaudenc->need_reopen = FALSE;
192
  ffmpegaudenc->need_reopen = FALSE;
195
193
196
  gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
194
  avcodec_free_context (&ffmpegaudenc->context);
197
  if (avcodec_get_context_defaults3 (ffmpegaudenc->context,
195
  ffmpegaudenc->context = avcodec_alloc_context3 (oclass->in_plugin);
198
          oclass->in_plugin) < 0) {
196
  if (ffmpegaudenc->context == NULL) {
199
    GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
197
    GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
200
    return FALSE;
198
    return FALSE;
201
  }
199
  }
Lines 241-250 gst_ffmpegaudenc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info) Link Here
241
239
242
  /* close old session */
240
  /* close old session */
243
  if (ffmpegaudenc->opened) {
241
  if (ffmpegaudenc->opened) {
244
    gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
242
    avcodec_free_context (&ffmpegaudenc->context);
245
    ffmpegaudenc->opened = FALSE;
243
    ffmpegaudenc->opened = FALSE;
246
    if (avcodec_get_context_defaults3 (ffmpegaudenc->context,
244
    ffmpegaudenc->context = avcodec_alloc_context3 (oclass->in_plugin);
247
            oclass->in_plugin) < 0) {
245
    if (ffmpegaudenc->context == NULL) {
248
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
246
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
249
      return FALSE;
247
      return FALSE;
250
    }
248
    }
Lines 286-296 gst_ffmpegaudenc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info) Link Here
286
  /* open codec */
284
  /* open codec */
287
  if (gst_ffmpeg_avcodec_open (ffmpegaudenc->context, oclass->in_plugin) < 0) {
285
  if (gst_ffmpeg_avcodec_open (ffmpegaudenc->context, oclass->in_plugin) < 0) {
288
    gst_caps_unref (allowed_caps);
286
    gst_caps_unref (allowed_caps);
289
    gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
287
    avcodec_free_context (&ffmpegaudenc->context);
290
    GST_DEBUG_OBJECT (ffmpegaudenc, "avenc_%s: Failed to open FFMPEG codec",
288
    GST_DEBUG_OBJECT (ffmpegaudenc, "avenc_%s: Failed to open FFMPEG codec",
291
        oclass->in_plugin->name);
289
        oclass->in_plugin->name);
292
    if (avcodec_get_context_defaults3 (ffmpegaudenc->context,
290
    ffmpegaudenc->context = avcodec_alloc_context3 (oclass->in_plugin);
293
            oclass->in_plugin) < 0)
291
    if (ffmpegaudenc->context == NULL)
294
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
292
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
295
293
296
    if ((oclass->in_plugin->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
294
    if ((oclass->in_plugin->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
Lines 312-321 gst_ffmpegaudenc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info) Link Here
312
310
313
  if (!other_caps) {
311
  if (!other_caps) {
314
    gst_caps_unref (allowed_caps);
312
    gst_caps_unref (allowed_caps);
315
    gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
313
    avcodec_free_context (&ffmpegaudenc->context);
316
    GST_DEBUG ("Unsupported codec - no caps found");
314
    GST_DEBUG ("Unsupported codec - no caps found");
317
    if (avcodec_get_context_defaults3 (ffmpegaudenc->context,
315
    ffmpegaudenc->context = avcodec_alloc_context3 (oclass->in_plugin);
318
            oclass->in_plugin) < 0)
316
    if (ffmpegaudenc->context == NULL)
319
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
317
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
320
    return FALSE;
318
    return FALSE;
321
  }
319
  }
Lines 331-340 gst_ffmpegaudenc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info) Link Here
331
329
332
  if (!gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (ffmpegaudenc),
330
  if (!gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (ffmpegaudenc),
333
          icaps)) {
331
          icaps)) {
334
    gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
332
    avcodec_free_context (&ffmpegaudenc->context);
335
    gst_caps_unref (icaps);
333
    gst_caps_unref (icaps);
336
    if (avcodec_get_context_defaults3 (ffmpegaudenc->context,
334
    ffmpegaudenc->context = avcodec_alloc_context3 (oclass->in_plugin);
337
            oclass->in_plugin) < 0)
335
    if (ffmpegaudenc->context == NULL)
338
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
336
      GST_DEBUG_OBJECT (ffmpegaudenc, "Failed to set context defaults");
339
    return FALSE;
337
    return FALSE;
340
  }
338
  }
Lines 403-410 buffer_info_free (void *opaque, guint8 * data) Link Here
403
    gst_buffer_unmap (info->buffer, &info->map);
401
    gst_buffer_unmap (info->buffer, &info->map);
404
    gst_buffer_unref (info->buffer);
402
    gst_buffer_unref (info->buffer);
405
  } else {
403
  } else {
406
    av_free (info->ext_data);
404
    av_freep (&info->ext_data);
407
    av_free (info->ext_data_array);
405
    av_freep (&info->ext_data_array);
408
  }
406
  }
409
  g_slice_free (BufferInfo, info);
407
  g_slice_free (BufferInfo, info);
410
}
408
}
(-)a/ext/libav/gstavcodecmap.c (-3 / +4 lines)
Lines 2355-2361 gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id, Link Here
2355
  }
2355
  }
2356
2356
2357
  if (buildcaps) {
2357
  if (buildcaps) {
2358
    AVCodec *codec;
2358
    const AVCodec *codec;
2359
2359
2360
    if ((codec = avcodec_find_decoder (codec_id)) ||
2360
    if ((codec = avcodec_find_decoder (codec_id)) ||
2361
        (codec = avcodec_find_encoder (codec_id))) {
2361
        (codec = avcodec_find_encoder (codec_id))) {
Lines 3001-3006 gst_ffmpeg_videoinfo_to_context (GstVideoInfo * info, AVCodecContext * context) Link Here
3001
    context->color_range = AVCOL_RANGE_JPEG;
3001
    context->color_range = AVCOL_RANGE_JPEG;
3002
  } else {
3002
  } else {
3003
    context->color_range = AVCOL_RANGE_MPEG;
3003
    context->color_range = AVCOL_RANGE_MPEG;
3004
    context->strict_std_compliance = FF_COMPLIANCE_UNOFFICIAL;
3004
  }
3005
  }
3005
}
3006
}
3006
3007
Lines 4373-4379 gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context) Link Here
4373
    audio = TRUE;
4374
    audio = TRUE;
4374
  } else if (!strncmp (mimetype, "audio/x-gst-av-", 15)) {
4375
  } else if (!strncmp (mimetype, "audio/x-gst-av-", 15)) {
4375
    gchar ext[16];
4376
    gchar ext[16];
4376
    AVCodec *codec;
4377
    const AVCodec *codec;
4377
4378
4378
    if (strlen (mimetype) <= 30 &&
4379
    if (strlen (mimetype) <= 30 &&
4379
        sscanf (mimetype, "audio/x-gst-av-%s", ext) == 1) {
4380
        sscanf (mimetype, "audio/x-gst-av-%s", ext) == 1) {
Lines 4385-4391 gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context) Link Here
4385
    }
4386
    }
4386
  } else if (!strncmp (mimetype, "video/x-gst-av-", 15)) {
4387
  } else if (!strncmp (mimetype, "video/x-gst-av-", 15)) {
4387
    gchar ext[16];
4388
    gchar ext[16];
4388
    AVCodec *codec;
4389
    const AVCodec *codec;
4389
4390
4390
    if (strlen (mimetype) <= 30 &&
4391
    if (strlen (mimetype) <= 30 &&
4391
        sscanf (mimetype, "video/x-gst-av-%s", ext) == 1) {
4392
        sscanf (mimetype, "video/x-gst-av-%s", ext) == 1) {
(-)a/ext/libav/gstavutils.c (-1 / +1 lines)
Lines 36-42 Link Here
36
const gchar *
36
const gchar *
37
gst_ffmpeg_get_codecid_longname (enum AVCodecID codec_id)
37
gst_ffmpeg_get_codecid_longname (enum AVCodecID codec_id)
38
{
38
{
39
  AVCodec *codec;
39
  const AVCodec *codec;
40
  /* Let's use what ffmpeg can provide us */
40
  /* Let's use what ffmpeg can provide us */
41
41
42
  if ((codec = avcodec_find_decoder (codec_id)) ||
42
  if ((codec = avcodec_find_decoder (codec_id)) ||
(-)a/ext/libav/gstavviddec.c (-17 / +11 lines)
Lines 340-351 gst_ffmpegviddec_finalize (GObject * object) Link Here
340
  GstFFMpegVidDec *ffmpegdec = (GstFFMpegVidDec *) object;
340
  GstFFMpegVidDec *ffmpegdec = (GstFFMpegVidDec *) object;
341
341
342
  av_frame_free (&ffmpegdec->picture);
342
  av_frame_free (&ffmpegdec->picture);
343
343
  avcodec_free_context (&ffmpegdec->context);
344
  if (ffmpegdec->context != NULL) {
345
    gst_ffmpeg_avcodec_close (ffmpegdec->context);
346
    av_free (ffmpegdec->context);
347
    ffmpegdec->context = NULL;
348
  }
349
344
350
  G_OBJECT_CLASS (parent_class)->finalize (object);
345
  G_OBJECT_CLASS (parent_class)->finalize (object);
351
}
346
}
Lines 395-407 gst_ffmpegviddec_close (GstFFMpegVidDec * ffmpegdec, gboolean reset) Link Here
395
390
396
  gst_buffer_replace (&ffmpegdec->palette, NULL);
391
  gst_buffer_replace (&ffmpegdec->palette, NULL);
397
392
398
  if (ffmpegdec->context->extradata) {
393
  av_freep (&ffmpegdec->context->extradata);
399
    av_free (ffmpegdec->context->extradata);
400
    ffmpegdec->context->extradata = NULL;
401
  }
402
  if (reset) {
394
  if (reset) {
403
    if (avcodec_get_context_defaults3 (ffmpegdec->context,
395
    avcodec_free_context (&ffmpegdec->context);
404
            oclass->in_plugin) < 0) {
396
    ffmpegdec->context = avcodec_alloc_context3 (oclass->in_plugin);
397
    if (ffmpegdec->context == NULL) {
405
      GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
398
      GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
406
      return FALSE;
399
      return FALSE;
407
    }
400
    }
Lines 1801-1807 gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec, Link Here
1801
    if (side_data) {
1794
    if (side_data) {
1802
      GST_LOG_OBJECT (ffmpegdec,
1795
      GST_LOG_OBJECT (ffmpegdec,
1803
          "Found CC side data of type AV_FRAME_DATA_A53_CC, size %d",
1796
          "Found CC side data of type AV_FRAME_DATA_A53_CC, size %d",
1804
          side_data->size);
1797
          (int) side_data->size);
1805
      GST_MEMDUMP ("A53 CC", side_data->data, side_data->size);
1798
      GST_MEMDUMP ("A53 CC", side_data->data, side_data->size);
1806
1799
1807
      /* do not add closed caption meta if it already exists */
1800
      /* do not add closed caption meta if it already exists */
Lines 2086-2093 gst_ffmpegviddec_start (GstVideoDecoder * decoder) Link Here
2086
  oclass = (GstFFMpegVidDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
2079
  oclass = (GstFFMpegVidDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
2087
2080
2088
  GST_OBJECT_LOCK (ffmpegdec);
2081
  GST_OBJECT_LOCK (ffmpegdec);
2089
  gst_ffmpeg_avcodec_close (ffmpegdec->context);
2082
  avcodec_free_context (&ffmpegdec->context);
2090
  if (avcodec_get_context_defaults3 (ffmpegdec->context, oclass->in_plugin) < 0) {
2083
  ffmpegdec->context = avcodec_alloc_context3 (oclass->in_plugin);
2084
  if (ffmpegdec->context == NULL) {
2091
    GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
2085
    GST_DEBUG_OBJECT (ffmpegdec, "Failed to set context defaults");
2092
    GST_OBJECT_UNLOCK (ffmpegdec);
2086
    GST_OBJECT_UNLOCK (ffmpegdec);
2093
    return FALSE;
2087
    return FALSE;
Lines 2382-2391 gst_ffmpegviddec_get_property (GObject * object, Link Here
2382
2376
2383
  switch (prop_id) {
2377
  switch (prop_id) {
2384
    case PROP_LOWRES:
2378
    case PROP_LOWRES:
2385
      g_value_set_enum (value, ffmpegdec->context->lowres);
2379
      g_value_set_enum (value, ffmpegdec->lowres);
2386
      break;
2380
      break;
2387
    case PROP_SKIPFRAME:
2381
    case PROP_SKIPFRAME:
2388
      g_value_set_enum (value, ffmpegdec->context->skip_frame);
2382
      g_value_set_enum (value, ffmpegdec->skip_frame);
2389
      break;
2383
      break;
2390
    case PROP_DIRECT_RENDERING:
2384
    case PROP_DIRECT_RENDERING:
2391
      g_value_set_boolean (value, ffmpegdec->direct_rendering);
2385
      g_value_set_boolean (value, ffmpegdec->direct_rendering);
(-)a/ext/libav/gstavvidenc.c (-10 / +11 lines)
Lines 224-231 gst_ffmpegvidenc_finalize (GObject * object) Link Here
224
  av_frame_free (&ffmpegenc->picture);
224
  av_frame_free (&ffmpegenc->picture);
225
  gst_ffmpeg_avcodec_close (ffmpegenc->context);
225
  gst_ffmpeg_avcodec_close (ffmpegenc->context);
226
  gst_ffmpeg_avcodec_close (ffmpegenc->refcontext);
226
  gst_ffmpeg_avcodec_close (ffmpegenc->refcontext);
227
  av_free (ffmpegenc->context);
227
  av_freep (&ffmpegenc->context);
228
  av_free (ffmpegenc->refcontext);
228
  av_freep (&ffmpegenc->refcontext);
229
229
230
  G_OBJECT_CLASS (parent_class)->finalize (object);
230
  G_OBJECT_CLASS (parent_class)->finalize (object);
231
}
231
}
Lines 247-256 gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder, Link Here
247
247
248
  /* close old session */
248
  /* close old session */
249
  if (ffmpegenc->opened) {
249
  if (ffmpegenc->opened) {
250
    gst_ffmpeg_avcodec_close (ffmpegenc->context);
250
    avcodec_free_context (&ffmpegenc->context);
251
    ffmpegenc->opened = FALSE;
251
    ffmpegenc->opened = FALSE;
252
    if (avcodec_get_context_defaults3 (ffmpegenc->context,
252
    ffmpegenc->context = avcodec_alloc_context3 (oclass->in_plugin);
253
            oclass->in_plugin) < 0) {
253
    if (ffmpegenc->context == NULL) {
254
      GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
254
      GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
255
      return FALSE;
255
      return FALSE;
256
    }
256
    }
Lines 454-462 bad_input_fmt: Link Here
454
  }
454
  }
455
close_codec:
455
close_codec:
456
  {
456
  {
457
    gst_ffmpeg_avcodec_close (ffmpegenc->context);
457
    avcodec_free_context (&ffmpegenc->context);
458
    if (avcodec_get_context_defaults3 (ffmpegenc->context,
458
    ffmpegenc->context = avcodec_alloc_context3 (oclass->in_plugin);
459
            oclass->in_plugin) < 0)
459
    if (ffmpegenc->context == NULL)
460
      GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
460
      GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
461
    goto cleanup_stats_in;
461
    goto cleanup_stats_in;
462
  }
462
  }
Lines 896-903 gst_ffmpegvidenc_start (GstVideoEncoder * encoder) Link Here
896
  ffmpegenc->need_reopen = FALSE;
896
  ffmpegenc->need_reopen = FALSE;
897
897
898
  /* close old session */
898
  /* close old session */
899
  gst_ffmpeg_avcodec_close (ffmpegenc->context);
899
  avcodec_free_context (&ffmpegenc->context);
900
  if (avcodec_get_context_defaults3 (ffmpegenc->context, oclass->in_plugin) < 0) {
900
  ffmpegenc->context = avcodec_alloc_context3 (oclass->in_plugin);
901
  if (ffmpegenc->context == NULL) {
901
    GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
902
    GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
902
    return FALSE;
903
    return FALSE;
903
  }
904
  }

Return to bug 831604