mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
gst/audioresample/gstaudioresample.c: Don't leak references to the incoming caps. Clean them up when stopping.
Original commit message from CVS: * gst/audioresample/gstaudioresample.c: (audioresample_stop), (audioresample_set_caps): Don't leak references to the incoming caps. Clean them up when stopping. * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init), (gst_video_scale_finalize): Don't leak our temporary pixel buffer. * tests/check/Makefile.am: * tests/check/pipelines/simple-launch-lines.c: (run_pipeline), (GST_START_TEST), (simple_launch_lines_suite): Fix leaks and re-enable the test for valgrind checking.
This commit is contained in:
parent
11503c773e
commit
e828178eca
6 changed files with 65 additions and 23 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
|||
2006-07-28 Jan Schmidt <thaytan@mad.scientist.com>
|
||||
|
||||
* gst/audioresample/gstaudioresample.c: (audioresample_stop),
|
||||
(audioresample_set_caps):
|
||||
Don't leak references to the incoming caps. Clean them up when
|
||||
stopping.
|
||||
|
||||
* gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init),
|
||||
(gst_video_scale_finalize):
|
||||
Don't leak our temporary pixel buffer.
|
||||
|
||||
* tests/check/Makefile.am:
|
||||
* tests/check/pipelines/simple-launch-lines.c: (run_pipeline),
|
||||
(GST_START_TEST), (simple_launch_lines_suite):
|
||||
|
||||
Fix leaks and re-enable the test for valgrind checking.
|
||||
|
||||
2006-07-28 Tim-Philipp Müller <tim at centricular dot net>
|
||||
|
||||
Patch by: Sjoerd Simons <sjoerd at luon net>
|
||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
|||
Subproject commit ef97fb3278d98a1fdb32e5c6b2a7467116ffc160
|
||||
Subproject commit e9ea99f6e89d7e1af3a0a859bfeb0ed6ecf2e3a9
|
|
@ -223,6 +223,9 @@ audioresample_stop (GstBaseTransform * base)
|
|||
audioresample->resample = NULL;
|
||||
}
|
||||
|
||||
gst_caps_replace (&audioresample->sinkcaps, NULL);
|
||||
gst_caps_replace (&audioresample->srccaps, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -438,10 +441,7 @@ audioresample_set_caps (GstBaseTransform * base, GstCaps * incaps,
|
|||
|
||||
/* save caps so we can short-circuit in the size_transform if the caps
|
||||
* are the same */
|
||||
/* FIXME: clean them up in state change ? */
|
||||
gst_caps_ref (incaps);
|
||||
gst_caps_replace (&audioresample->sinkcaps, incaps);
|
||||
gst_caps_ref (outcaps);
|
||||
gst_caps_replace (&audioresample->srccaps, outcaps);
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -187,6 +187,7 @@ gst_video_scale_sink_template_factory (void)
|
|||
static void gst_video_scale_base_init (gpointer g_class);
|
||||
static void gst_video_scale_class_init (GstVideoScaleClass * klass);
|
||||
static void gst_video_scale_init (GstVideoScale * videoscale);
|
||||
static void gst_video_scale_finalize (GstVideoScale * videoscale);
|
||||
static gboolean gst_video_scale_src_event (GstBaseTransform * trans,
|
||||
GstEvent * event);
|
||||
|
||||
|
@ -257,6 +258,7 @@ gst_video_scale_class_init (GstVideoScaleClass * klass)
|
|||
gobject_class = (GObjectClass *) klass;
|
||||
trans_class = (GstBaseTransformClass *) klass;
|
||||
|
||||
gobject_class->finalize = (GObjectFinalizeFunc) gst_video_scale_finalize;
|
||||
gobject_class->set_property = gst_video_scale_set_property;
|
||||
gobject_class->get_property = gst_video_scale_get_property;
|
||||
|
||||
|
@ -286,6 +288,14 @@ gst_video_scale_init (GstVideoScale * videoscale)
|
|||
videoscale->method = DEFAULT_PROP_METHOD;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_video_scale_finalize (GstVideoScale * videoscale)
|
||||
{
|
||||
if (videoscale->tmp_buf)
|
||||
g_free (videoscale->tmp_buf);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (videoscale));
|
||||
}
|
||||
|
||||
static void
|
||||
gst_video_scale_set_property (GObject * object, guint prop_id,
|
||||
|
|
|
@ -6,7 +6,7 @@ REGISTRY_ENVIRONMENT = \
|
|||
GST_REGISTRY=$(CHECK_REGISTRY)
|
||||
|
||||
TESTS_ENVIRONMENT = \
|
||||
CK_DEFAULT_TIMEOUT=20 \
|
||||
CK_DEFAULT_TIMEOUT=120 \
|
||||
$(REGISTRY_ENVIRONMENT) \
|
||||
GST_PLUGIN_SYSTEM_PATH= \
|
||||
GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_DIR)
|
||||
|
@ -65,8 +65,7 @@ VALGRIND_TO_FIX = \
|
|||
elements/audioresample \
|
||||
generic/states \
|
||||
libs/cddabasesrc \
|
||||
libs/video \
|
||||
pipelines/simple-launch-lines
|
||||
libs/video
|
||||
|
||||
# these tests don't even pass
|
||||
noinst_PROGRAMS =
|
||||
|
|
|
@ -56,7 +56,8 @@ run_pipeline (GstElement * pipe, const gchar * descr,
|
|||
bus = gst_element_get_bus (pipe);
|
||||
g_assert (bus);
|
||||
|
||||
ret = gst_element_set_state (pipe, GST_STATE_PLAYING);
|
||||
fail_if (gst_element_set_state (pipe, GST_STATE_PLAYING) ==
|
||||
GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to playing", descr);
|
||||
ret = gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE);
|
||||
if (ret != GST_STATE_CHANGE_SUCCESS) {
|
||||
g_critical ("Couldn't set pipeline to PLAYING");
|
||||
|
@ -89,22 +90,34 @@ run_pipeline (GstElement * pipe, const gchar * descr,
|
|||
}
|
||||
|
||||
done:
|
||||
gst_element_set_state (pipe, GST_STATE_NULL);
|
||||
fail_if (gst_element_set_state (pipe, GST_STATE_NULL) ==
|
||||
GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to NULL", descr);
|
||||
gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE);
|
||||
gst_object_unref (pipe);
|
||||
|
||||
gst_bus_set_flushing (bus, TRUE);
|
||||
gst_object_unref (bus);
|
||||
}
|
||||
|
||||
GST_START_TEST (test_element_negotiation)
|
||||
{
|
||||
gchar *s;
|
||||
|
||||
/* see http://bugzilla.gnome.org/show_bug.cgi?id=315126 */
|
||||
s = "fakesrc ! audio/x-raw-int,width=16,depth=16,rate=22050,channels=1 ! audioconvert ! audio/x-raw-int,width=16,depth=16,rate=22050,channels=1 ! fakesink";
|
||||
/* Ensures that filtering buffers with unknown caps down to fixed-caps
|
||||
* will apply those caps to the buffers.
|
||||
* see http://bugzilla.gnome.org/show_bug.cgi?id=315126 */
|
||||
s = "fakesrc num-buffers=2 ! "
|
||||
"audio/x-raw-int,width=16,depth=16,rate=22050,channels=1,"
|
||||
"signed=(boolean)true,endianness=1234 ! "
|
||||
"audioconvert ! audio/x-raw-int,width=16,depth=16,rate=22050,channels=1 "
|
||||
"! fakesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||
GST_MESSAGE_UNKNOWN);
|
||||
|
||||
#ifdef HAVE_LIBVISUAL
|
||||
s = "audiotestsrc ! tee name=t ! alsasink t. ! audioconvert ! libvisual_lv_scope ! ffmpegcolorspace ! xvimagesink";
|
||||
s = "audiotestsrc num-buffers=30 ! tee name=t ! alsasink t. ! audioconvert ! "
|
||||
"libvisual_lv_scope ! ffmpegcolorspace ! xvimagesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||
GST_MESSAGE_UNKNOWN);
|
||||
|
@ -114,20 +127,22 @@ GST_START_TEST (test_element_negotiation)
|
|||
GST_END_TEST
|
||||
GST_START_TEST (test_basetransform_based)
|
||||
{
|
||||
/* Each of these tests is to check whether various basetransform based elements can
|
||||
* select output caps when not allowed to do passthrough and going to a generic sink
|
||||
* such as fakesink or filesink */
|
||||
/* Each of these tests is to check whether various basetransform based
|
||||
* elements can select output caps when not allowed to do passthrough
|
||||
* and going to a generic sink such as fakesink or filesink */
|
||||
const gchar *s;
|
||||
|
||||
/* Check that videoscale can pick a height given only a width */
|
||||
s = "videotestsrc ! video/x-raw-yuv,format=(fourcc)I420,width=320,height=240 ! " "videoscale ! video/x-raw-yuv,width=640 ! fakesink";
|
||||
s = "videotestsrc num-buffers=2 ! "
|
||||
"video/x-raw-yuv,format=(fourcc)I420,width=320,height=240 ! "
|
||||
"videoscale ! video/x-raw-yuv,width=640 ! fakesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||
GST_MESSAGE_UNKNOWN);
|
||||
|
||||
/* Test that ffmpegcolorspace can pick an output format that isn't
|
||||
* passthrough without completely specified output caps */
|
||||
s = "videotestsrc ! "
|
||||
s = "videotestsrc num-buffers=2 ! "
|
||||
"video/x-raw-yuv,format=(fourcc)I420,width=320,height=240 ! "
|
||||
"ffmpegcolorspace ! video/x-raw-rgb ! fakesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
|
@ -136,15 +151,16 @@ GST_START_TEST (test_basetransform_based)
|
|||
|
||||
/* Check that audioresample can pick a samplerate to use from a
|
||||
* range that doesn't include the input */
|
||||
s = "audiotestsrc ! audio/x-raw-int,width=16,depth=16,rate=8000 ! "
|
||||
s = "audiotestsrc num-buffers=2 ! "
|
||||
"audio/x-raw-int,width=16,depth=16,rate=8000 ! "
|
||||
"audioresample ! audio/x-raw-int,rate=[16000,48000] ! fakesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||
GST_MESSAGE_UNKNOWN);
|
||||
|
||||
/* Check that audioconvert can pick a depth to use, given a width */
|
||||
s = "audiotestsrc ! audio/x-raw-int,width=16,depth=16 ! audioconvert ! "
|
||||
"audio/x-raw-int,width=32 ! fakesink";
|
||||
s = "audiotestsrc num-buffers=30 ! audio/x-raw-int,width=16,depth=16 ! "
|
||||
"audioconvert ! " "audio/x-raw-int,width=32 ! fakesink";
|
||||
run_pipeline (setup_pipeline (s), s,
|
||||
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||
GST_MESSAGE_UNKNOWN);
|
||||
|
@ -157,12 +173,12 @@ GST_END_TEST
|
|||
Suite *s = suite_create ("Pipelines");
|
||||
TCase *tc_chain = tcase_create ("linear");
|
||||
|
||||
/* time out after 20s, not the default 3 */
|
||||
tcase_set_timeout (tc_chain, 20);
|
||||
/* time out after 60s, not the default 3 */
|
||||
tcase_set_timeout (tc_chain, 60);
|
||||
|
||||
suite_add_tcase (s, tc_chain);
|
||||
#ifndef GST_DISABLE_PARSE
|
||||
// tcase_add_test (tc_chain, test_element_negotiation);
|
||||
tcase_add_test (tc_chain, test_element_negotiation);
|
||||
tcase_add_test (tc_chain, test_basetransform_based);
|
||||
#endif
|
||||
return s;
|
||||
|
|
Loading…
Reference in a new issue