static void
gst_ffmpegauddec_close (GstFFMpegAudDec * ffmpegdec)
{
- if (!ffmpegdec->opened)
- return;
-
GST_LOG_OBJECT (ffmpegdec, "closing libav codec");
gst_caps_replace (&ffmpegdec->last_caps, NULL);
gst_buffer_replace (&ffmpegdec->outbuf, NULL);
- if (ffmpegdec->opened)
- gst_ffmpeg_avcodec_close (ffmpegdec->context);
+ gst_ffmpeg_avcodec_close (ffmpegdec->context);
ffmpegdec->opened = FALSE;
if (ffmpegdec->context->extradata) {
gst_ffmpegauddec_drain (ffmpegdec);
GST_OBJECT_LOCK (ffmpegdec);
gst_ffmpegauddec_close (ffmpegdec);
-
- /* and reset the defaults that were set when a context is created */
- avcodec_get_context_defaults3 (ffmpegdec->context, oclass->in_plugin);
}
/* get size and so */
GstFFMpegAudEnc *ffmpegaudenc = (GstFFMpegAudEnc *) encoder;
/* close old session */
- if (ffmpegaudenc->opened) {
- gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
- ffmpegaudenc->opened = FALSE;
- }
+ gst_ffmpeg_avcodec_close (ffmpegaudenc->context);
+ ffmpegaudenc->opened = FALSE;
return TRUE;
}
ffmpegaudenc->opened = FALSE;
}
- /* set defaults */
- avcodec_get_context_defaults3 (ffmpegaudenc->context, oclass->in_plugin);
-
/* if we set it in _getcaps we should set it also in _link */
ffmpegaudenc->context->strict_std_compliance = -1;
prop_id = base;
g_return_if_fail (base > 0);
- ctx = avcodec_alloc_context3 (NULL);
- if (ctx)
- avcodec_get_context_defaults3 (ctx, NULL);
- else
+ ctx = avcodec_alloc_context3 (klass->in_plugin);
+ if (!ctx)
g_warning ("could not get context");
for (list = property_list; list; list = list->next) {
gst_ffmpegdata_close (demux->context->pb);
else
gst_ffmpeg_pipe_close (demux->context->pb);
+ demux->context->pb = NULL;
avformat_close_input (&demux->context);
+ if (demux->context)
+ avformat_free_context (demux->context);
+ demux->context = NULL;
GST_OBJECT_LOCK (demux);
demux->opened = FALSE;
gst_collect_pads_set_function (ffmpegmux->collect,
(GstCollectPadsFunction) gst_ffmpegmux_collected, ffmpegmux);
- ffmpegmux->context = g_new0 (AVFormatContext, 1);
+ ffmpegmux->context = avformat_alloc_context ();
ffmpegmux->context->oformat = oclass->in_plugin;
ffmpegmux->context->nb_streams = 0;
ffmpegmux->opened = FALSE;
{
GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) object;
- g_free (ffmpegmux->context);
+ avformat_free_context (ffmpegmux->context);
+ ffmpegmux->context = NULL;
+
gst_object_unref (ffmpegmux->collect);
if (G_OBJECT_CLASS (parent_class)->finalize)
ffmpegdec->context = NULL;
}
- if (ffmpegdec->picture != NULL) {
- av_free (ffmpegdec->picture);
- ffmpegdec->picture = NULL;
- }
+ avcodec_free_frame (&ffmpegdec->picture);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gst_ffmpegviddec_close (GstFFMpegVidDec * ffmpegdec)
{
- if (!ffmpegdec->opened)
- return;
-
GST_LOG_OBJECT (ffmpegdec, "closing ffmpeg codec");
gst_caps_replace (&ffmpegdec->last_caps, NULL);
gst_ffmpegviddec_drain (ffmpegdec);
GST_OBJECT_LOCK (ffmpegdec);
gst_ffmpegviddec_close (ffmpegdec);
-
- /* and reset the defaults that were set when a context is created */
- avcodec_get_context_defaults3 (ffmpegdec->context, oclass->in_plugin);
}
/* set buffer functions */
gst_ffmpeg_cfg_finalize (ffmpegenc);
- /* close old session */
- if (ffmpegenc->opened) {
- gst_ffmpeg_avcodec_close (ffmpegenc->context);
- ffmpegenc->opened = FALSE;
- }
-
/* clean up remaining allocated data */
av_free (ffmpegenc->context);
- av_free (ffmpegenc->picture);
+ avcodec_free_frame (&ffmpegenc->picture);
g_free (ffmpegenc->filename);
ffmpegenc->opened = FALSE;
}
- /* set defaults */
- avcodec_get_context_defaults3 (ffmpegenc->context, oclass->in_plugin);
-
/* if we set it in _getcaps we should set it also in _link */
ffmpegenc->context->strict_std_compliance = -1;
GstFFMpegVidEnc *ffmpegenc = (GstFFMpegVidEnc *) encoder;
gst_ffmpegvidenc_flush_buffers (ffmpegenc, FALSE);
- if (ffmpegenc->opened) {
- gst_ffmpeg_avcodec_close (ffmpegenc->context);
- ffmpegenc->opened = FALSE;
- }
+ gst_ffmpeg_avcodec_close (ffmpegenc->context);
+ ffmpegenc->opened = FALSE;
+
if (ffmpegenc->file) {
fclose (ffmpegenc->file);
ffmpegenc->file = NULL;