From: <en...@ke...> - 2007-08-01 17:44:10
|
CVS Root: /cvs/gstreamer Module: gst-ffmpeg Changes by: ensonic Date: Wed Aug 01 2007 17:43:54 UTC Log message: * ext/ffmpeg/gstffmpegcfg.c: (gst_ffmpeg_cfg_install_property), (gst_ffmpeg_cfg_finalize): * ext/ffmpeg/gstffmpegcfg.h: * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_finalize), (ffmpegenc_setup_working_buf), (gst_ffmpegenc_chain_video), (gst_ffmpegenc_flush_buffers): Free strings atleast when finalizing elements. * tests/check/generic/libavcodec-locking.c: (GST_START_TEST), (simple_launch_lines_suite): Fix some leaks. Modified files: . : ChangeLog ext/ffmpeg : gstffmpegcfg.c gstffmpegcfg.h gstffmpegenc.c tests/check/generic: libavcodec-locking.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-ffmpeg/ChangeLog.diff?r1=1.402&r2=1.403 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegcfg.c.diff?r1=1.5&r2=1.6 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegcfg.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegenc.c.diff?r1=1.103&r2=1.104 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-ffmpeg/tests/check/generic/libavcodec-locking.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-ffmpeg/ChangeLog,v retrieving revision 1.402 retrieving revision 1.403 diff -u -d -r1.402 -r1.403 --- ChangeLog 1 Aug 2007 15:06:44 -0000 1.402 +++ ChangeLog 1 Aug 2007 17:43:39 -0000 1.403 @@ -1,5 +1,19 @@ 2007-08-01 Stefan Kost <en...@us...> + * ext/ffmpeg/gstffmpegcfg.c: (gst_ffmpeg_cfg_install_property), + (gst_ffmpeg_cfg_finalize): + * ext/ffmpeg/gstffmpegcfg.h: + * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_finalize), + (ffmpegenc_setup_working_buf), (gst_ffmpegenc_chain_video), + (gst_ffmpegenc_flush_buffers): + Free strings atleast when finalizing elements. + + * tests/check/generic/libavcodec-locking.c: (GST_START_TEST), + (simple_launch_lines_suite): + Fix some leaks. + +2007-08-01 Stefan Kost <en...@us...> * configure.ac: * ext/ffmpeg/Makefile.am: Check for libm and link against it (ffmpeg is using sqrt). Index: gstffmpegcfg.c RCS file: /cvs/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegcfg.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstffmpegcfg.c 12 Apr 2007 11:06:46 -0000 1.5 +++ gstffmpegcfg.c 1 Aug 2007 17:43:39 -0000 1.6 @@ -760,7 +760,7 @@ GParamSpecString* pstring = G_PARAM_SPEC_STRING (pspec); pspec = g_param_spec_string (name, nick, blurb, lavc_default ? G_STRUCT_MEMBER (gchar*, ctx, ctx_offset) - : pstring->default_value, + : pstring->default_value, pspec->flags); break; } @@ -813,13 +813,13 @@ GParamSpecEnum* penum = G_PARAM_SPEC_ENUM (pspec); pspec = g_param_spec_enum (name, nick, blurb, pspec->value_type, - lavc_default ? G_STRUCT_MEMBER (gint, ctx, ctx_offset) + lavc_default ? G_STRUCT_MEMBER (gint, ctx, ctx_offset) : penum->default_value, pspec->flags); } else if (G_IS_PARAM_SPEC_FLAGS (pspec)) { GParamSpecFlags* pflags = G_PARAM_SPEC_FLAGS (pspec); pspec = g_param_spec_flags (name, nick, blurb, - lavc_default ? G_STRUCT_MEMBER (guint, ctx, ctx_offset) + lavc_default ? G_STRUCT_MEMBER (guint, ctx, ctx_offset) : pflags->default_value, pspec->flags); } else { g_critical ("%s does not yet support type %s", GST_FUNCTION, @@ -1026,3 +1026,36 @@ list = list->next; } } +void +gst_ffmpeg_cfg_finalize (GstFFMpegEnc * ffmpegenc) +{ + GParamSpec **pspecs; + guint num_props, i; + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (ffmpegenc), + &num_props); + for (i = 0; i < num_props; ++i) { + GParamSpec *pspec = pspecs[i]; + GParamSpecData *qdata; + qdata = g_param_spec_get_qdata (pspec, quark); + /* our param specs should have such qdata */ + if (!qdata) + continue; + switch (G_PARAM_SPEC_VALUE_TYPE (pspec)) { + case G_TYPE_STRING: + if(qdata->size == sizeof (gchar*)) { + g_free (G_STRUCT_MEMBER (gchar*, ffmpegenc, qdata->offset)); + G_STRUCT_MEMBER (gchar*, ffmpegenc, qdata->offset) = NULL; + } + break; + default: + } + } + g_free (pspecs); +} Index: gstffmpegcfg.h RCS file: /cvs/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegcfg.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstffmpegcfg.h 6 Sep 2006 14:51:13 -0000 1.1 +++ gstffmpegcfg.h 1 Aug 2007 17:43:39 -0000 1.2 @@ -35,6 +35,7 @@ void gst_ffmpeg_cfg_fill_context (GstFFMpegEnc * ffmpegenc, AVCodecContext * context); void gst_ffmpeg_cfg_set_defaults (GstFFMpegEnc * ffmpegenc); +void gst_ffmpeg_cfg_finalize (GstFFMpegEnc * ffmpegenc); G_END_DECLS Index: gstffmpegenc.c RCS file: /cvs/gstreamer/gst-ffmpeg/ext/ffmpeg/gstffmpegenc.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -d -r1.103 -r1.104 --- gstffmpegenc.c 5 Jul 2007 11:19:21 -0000 1.103 +++ gstffmpegenc.c 1 Aug 2007 17:43:39 -0000 1.104 @@ -259,6 +259,8 @@ { GstFFMpegEnc *ffmpegenc = (GstFFMpegEnc *) object; + gst_ffmpeg_cfg_finalize (ffmpegenc); /* close old session */ if (ffmpegenc->opened) { gst_ffmpeg_avcodec_close (ffmpegenc->context); @@ -570,7 +572,7 @@ static void ffmpegenc_setup_working_buf (GstFFMpegEnc *ffmpegenc) - if (ffmpegenc->working_buf == NULL || + if (ffmpegenc->working_buf == NULL || ffmpegenc->working_buf_size != ffmpegenc->buffer_size) { if (ffmpegenc->working_buf) g_free (ffmpegenc->working_buf); @@ -603,7 +605,7 @@ ffmpegenc_setup_working_buf (ffmpegenc); ret_size = avcodec_encode_video (ffmpegenc->context, - ffmpegenc->working_buf, ffmpegenc->working_buf_size, + ffmpegenc->working_buf, ffmpegenc->working_buf_size, ffmpegenc->picture); if (ret_size < 0) { @@ -754,7 +756,7 @@ while (!g_queue_is_empty (ffmpegenc->delay)) { ffmpegenc_setup_working_buf (ffmpegenc); - ret_size = avcodec_encode_video (ffmpegenc->context, ffmpegenc->working_buf, ffmpegenc->working_buf_size, NULL); Index: libavcodec-locking.c RCS file: /cvs/gstreamer/gst-ffmpeg/tests/check/generic/libavcodec-locking.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- libavcodec-locking.c 6 Dec 2006 17:58:24 -0000 1.3 +++ libavcodec-locking.c 1 Aug 2007 17:43:39 -0000 1.4 @@ -36,7 +36,7 @@ return pipeline; -/* +/* * run_pipeline: * @pipe: the pipeline to run * @desc: the description for use in messages @@ -101,22 +101,21 @@ for (i=0; i<NUM_SINKS; i++) sink[i] = g_strdup_printf (" t.src%d ! queue ! ffenc_mpeg4 ! ffdec_mpeg4 ! fakesink sync=true", i); - sink [NUM_SINKS] = NULL; sinks = g_strjoinv (" ", sink); s = g_strdup_printf ("videotestsrc ! video/x-raw-yuv,format=(fourcc)I420,width=320,height=240,framerate=(fraction)10/1 ! tee name=t %s", sinks); run_pipeline (setup_pipeline (s), s, GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), GST_MESSAGE_UNKNOWN); - g_free (s); g_free (sink[i]); + g_free (sinks); GST_END_TEST Suite * @@ -138,6 +137,7 @@ suite_add_tcase (s, tc_chain); +#ifndef GST_DISABLE_PARSE /* only run this if we haven't been configured with --disable-encoders */ if (gst_default_registry_check_feature_version ("ffenc_mpeg4", GST_VERSION_MAJOR, GST_VERSION_MINOR, 0)) { @@ -145,7 +145,8 @@ } else { g_print ("******* Skipping libavcodec_locks test, no encoder available\n"); +#endif return s; |