From bc1fb43408520e62661598d63ece648801e06f41 Mon Sep 17 00:00:00 2001 From: Jonathan Matthew Date: Wed, 29 Feb 2012 21:25:24 +1000 Subject: [PATCH 01/22] discoverer: don't change result for missing plugin errors https://bugzilla.gnome.org/show_bug.cgi?id=671047 --- gst-libs/gst/pbutils/gstdiscoverer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c index ba02cdbea5..34866565e2 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.c +++ b/gst-libs/gst/pbutils/gstdiscoverer.c @@ -1158,8 +1158,15 @@ handle_message (GstDiscoverer * dc, GstMessage * msg) /* We need to stop */ done = TRUE; - GST_DEBUG ("Setting result to ERROR"); - dc->priv->current_info->result = GST_DISCOVERER_ERROR; + /* Don't override missing plugin result code for missing plugin errors */ + if (dc->priv->current_info->result != GST_DISCOVERER_MISSING_PLUGINS || + (!g_error_matches (gerr, GST_CORE_ERROR, + GST_CORE_ERROR_MISSING_PLUGIN) && + !g_error_matches (gerr, GST_STREAM_ERROR, + GST_STREAM_ERROR_CODEC_NOT_FOUND))) { + GST_DEBUG ("Setting result to ERROR"); + dc->priv->current_info->result = GST_DISCOVERER_ERROR; + } } break; From 85a7b8f5622536de9b888f58c7c6ca1b15834b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 3 Mar 2012 13:51:55 +0000 Subject: [PATCH 02/22] tests: add test to check discoverer return code for missing plugins case https://bugzilla.gnome.org/show_bug.cgi?id=671047 --- tests/check/libs/discoverer.c | 41 ++++++++++++++++++++++++++++++++++ tests/files/Makefile.am | 1 + tests/files/test.mkv | Bin 0 -> 2524 bytes 3 files changed, 42 insertions(+) create mode 100644 tests/files/test.mkv diff --git a/tests/check/libs/discoverer.c b/tests/check/libs/discoverer.c index a8de512e1d..f787d29005 100644 --- a/tests/check/libs/discoverer.c +++ b/tests/check/libs/discoverer.c @@ -142,6 +142,46 @@ GST_START_TEST (test_disco_sync_reuse_timeout) GST_END_TEST; +GST_START_TEST (test_disco_missing_plugins) +{ + const gchar *files[] = { "test.mkv", "test.mp3", "partialframe.mjpeg" }; + GError *err = NULL; + GstDiscoverer *dc; + GstDiscovererInfo *info; + GstDiscovererResult result; + gchar *uri, *path; + int i; + + for (i = 0; i < G_N_ELEMENTS (files); ++i) { + dc = gst_discoverer_new (5 * GST_SECOND, &err); + fail_unless (dc != NULL); + fail_unless (err == NULL); + + /* GST_TEST_FILE comes from makefile CFLAGS */ + path = g_build_filename (GST_TEST_FILES_PATH, files[i], NULL); + uri = gst_filename_to_uri (path, &err); + g_free (path); + fail_unless (err == NULL); + + GST_INFO ("discovering uri '%s'", uri); + info = gst_discoverer_discover_uri (dc, uri, &err); + fail_unless (info != NULL); + fail_unless (err != NULL); + result = gst_discoverer_info_get_result (info); + GST_INFO ("result: %d, error message: %s", result, err->message); + fail_unless_equals_int (result, GST_DISCOVERER_MISSING_PLUGINS); + GST_INFO ("misc: %" GST_PTR_FORMAT, gst_discoverer_info_get_misc (info)); + + gst_discoverer_info_unref (info); + g_error_free (err); + err = NULL; + g_free (uri); + g_object_unref (dc); + } +} + +GST_END_TEST; + static Suite * discoverer_suite (void) { @@ -154,6 +194,7 @@ discoverer_suite (void) tcase_add_test (tc_chain, test_disco_sync_reuse_ogg); tcase_add_test (tc_chain, test_disco_sync_reuse_mp3); tcase_add_test (tc_chain, test_disco_sync_reuse_timeout); + tcase_add_test (tc_chain, test_disco_missing_plugins); return s; } diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am index 99b043f5d8..1370c39b8a 100644 --- a/tests/files/Makefile.am +++ b/tests/files/Makefile.am @@ -3,5 +3,6 @@ EXTRA_DIST = \ hls.m3u8 \ license-uris \ partialframe.mjpeg \ + test.mkv \ test.mp3 \ theora-vorbis.ogg diff --git a/tests/files/test.mkv b/tests/files/test.mkv new file mode 100644 index 0000000000000000000000000000000000000000..649cf3f6d44c865e4599997856c40534d349a172 GIT binary patch literal 2524 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 literal 0 HcmV?d00001 From 0c2f2a64c5a3cde94326950c6b64e04120fe24d7 Mon Sep 17 00:00:00 2001 From: "Oleksij Rempel (Alexey Fisher)" Date: Sun, 4 Mar 2012 10:28:49 +0100 Subject: [PATCH 03/22] pango: don't use deprecated pango_cairo_font_map_create_context() https://bugzilla.gnome.org/show_bug.cgi?id=671300 --- configure.ac | 2 +- ext/pango/gsttextoverlay.c | 2 +- ext/pango/gsttextrender.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 8c35b5b152..13bfb8e4dc 100644 --- a/configure.ac +++ b/configure.ac @@ -789,7 +789,7 @@ AG_GST_CHECK_FEATURE(OGG, [Xiph Ogg library], ogg, [ dnl *** pango *** translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true) AG_GST_CHECK_FEATURE(PANGO, [Pango font rendering], pango, [ - AG_GST_PKG_CHECK_MODULES(PANGO, pango >= 1.16.0 pangocairo >= 1.16.0) + AG_GST_PKG_CHECK_MODULES(PANGO, pango >= 1.22.0 pangocairo >= 1.22.0) ]) dnl *** theora *** diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c index a92659f1eb..0096d940c1 100644 --- a/ext/pango/gsttextoverlay.c +++ b/ext/pango/gsttextoverlay.c @@ -375,7 +375,7 @@ gst_text_overlay_base_init (gpointer g_class) g_mutex_lock (klass->pango_lock); fontmap = pango_cairo_font_map_get_default (); klass->pango_context = - pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap)); + pango_font_map_create_context (PANGO_FONT_MAP (fontmap)); if (klass->pango_lock) g_mutex_unlock (klass->pango_lock); } diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c index 38ea44ad53..6a9a29b67a 100644 --- a/ext/pango/gsttextrender.c +++ b/ext/pango/gsttextrender.c @@ -203,7 +203,7 @@ gst_text_render_class_init (GstTextRenderClass * klass) fontmap = pango_cairo_font_map_get_default (); klass->pango_context = - pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap)); + pango_font_map_create_context (PANGO_FONT_MAP (fontmap)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FONT_DESC, g_param_spec_string ("font-desc", "font description", "Pango font description of font " From 3b0a2a60da9386ae887ca86446c21c76adce0c75 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 5 Mar 2012 10:59:00 +0100 Subject: [PATCH 04/22] audiodecoder: enhance some debug statement --- gst-libs/gst/audio/gstaudiodecoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index d4d485908a..f37bce2e9f 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -991,7 +991,7 @@ gst_audio_decoder_push_buffers (GstAudioDecoder * dec, gboolean force) g_assert (offset <= av); if (offset) { /* jumped a bit */ - GST_DEBUG_OBJECT (dec, "setting DISCONT"); + GST_DEBUG_OBJECT (dec, "skipped %d; setting DISCONT", offset); gst_adapter_flush (priv->adapter, offset); flush = offset; /* avoid parsing indefinitely */ From 6d83f695b752fbf9c62d382a0233997a9b9791d7 Mon Sep 17 00:00:00 2001 From: "Oleksij Rempel (Alexey Fisher)" Date: Mon, 5 Mar 2012 11:07:39 +0100 Subject: [PATCH 05/22] ximagesink: don't use deprecated XKeycodeToKeysym https://bugzilla.gnome.org/show_bug.cgi?id=671299 Signed-off-by: Oleksij Rempel (Alexey Fisher) --- sys/ximage/ximagesink.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index 2adcc735c0..7ef200acab 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -115,6 +115,9 @@ #include "gst/glib-compat-private.h" +/* for XkbKeycodeToKeysym */ +#include + GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink); #define GST_CAT_DEFAULT gst_debug_ximagesink @@ -1024,6 +1027,7 @@ gst_ximagesink_handle_xevents (GstXImageSink * ximagesink) KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask, &e)) { KeySym keysym; + const char *key_str = NULL; /* We lock only for the X function call */ g_mutex_unlock (ximagesink->x_lock); @@ -1048,25 +1052,20 @@ gst_ximagesink_handle_xevents (GstXImageSink * ximagesink) case KeyRelease: /* Key pressed/released over our window. We send upstream events for interactivity/navigation */ - GST_DEBUG ("ximagesink key %d pressed over window at %d,%d", - e.xkey.keycode, e.xkey.x, e.xkey.x); g_mutex_lock (ximagesink->x_lock); - keysym = XKeycodeToKeysym (ximagesink->xcontext->disp, - e.xkey.keycode, 0); - g_mutex_unlock (ximagesink->x_lock); + keysym = XkbKeycodeToKeysym (ximagesink->xcontext->disp, + e.xkey.keycode, 0, 0); if (keysym != NoSymbol) { - char *key_str = NULL; - - g_mutex_lock (ximagesink->x_lock); key_str = XKeysymToString (keysym); - g_mutex_unlock (ximagesink->x_lock); - gst_navigation_send_key_event (GST_NAVIGATION (ximagesink), - e.type == KeyPress ? "key-press" : "key-release", key_str); - } else { - gst_navigation_send_key_event (GST_NAVIGATION (ximagesink), - e.type == KeyPress ? "key-press" : "key-release", "unknown"); + key_str = "unknown"; } + g_mutex_unlock (ximagesink->x_lock); + GST_DEBUG_OBJECT (ximagesink, + "key %d pressed over window at %d,%d (%s)", + e.xkey.keycode, e.xkey.x, e.xkey.y, key_str); + gst_navigation_send_key_event (GST_NAVIGATION (ximagesink), + e.type == KeyPress ? "key-press" : "key-release", key_str); break; default: GST_DEBUG_OBJECT (ximagesink, "ximagesink unhandled X event (%d)", From dc7c6cf4592010b531ebad51020bf505e0435bdb Mon Sep 17 00:00:00 2001 From: "Oleksij Rempel (Alexey Fisher)" Date: Mon, 5 Mar 2012 11:09:12 +0100 Subject: [PATCH 06/22] xvimagesink: don't use deprecated XKeycodeToKeysym https://bugzilla.gnome.org/show_bug.cgi?id=671299 Signed-off-by: Oleksij Rempel (Alexey Fisher) --- sys/xvimage/xvimagesink.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index f20c877c01..ccfdaae029 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -133,6 +133,9 @@ #include "gst/glib-compat-private.h" +/* for XkbKeycodeToKeysym */ +#include + GST_DEBUG_CATEGORY_STATIC (gst_debug_xvimagesink); #define GST_CAT_DEFAULT gst_debug_xvimagesink GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); @@ -1236,6 +1239,7 @@ gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink) KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask, &e)) { KeySym keysym; + const char *key_str = NULL; /* We lock only for the X function call */ g_mutex_unlock (xvimagesink->x_lock); @@ -1262,24 +1266,20 @@ gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink) case KeyRelease: /* Key pressed/released over our window. We send upstream events for interactivity/navigation */ - GST_DEBUG ("xvimagesink key %d pressed over window at %d,%d", - e.xkey.keycode, e.xkey.x, e.xkey.y); g_mutex_lock (xvimagesink->x_lock); - keysym = XKeycodeToKeysym (xvimagesink->xcontext->disp, - e.xkey.keycode, 0); - g_mutex_unlock (xvimagesink->x_lock); + keysym = XkbKeycodeToKeysym (xvimagesink->xcontext->disp, + e.xkey.keycode, 0, 0); if (keysym != NoSymbol) { - char *key_str = NULL; - - g_mutex_lock (xvimagesink->x_lock); key_str = XKeysymToString (keysym); - g_mutex_unlock (xvimagesink->x_lock); - gst_navigation_send_key_event (GST_NAVIGATION (xvimagesink), - e.type == KeyPress ? "key-press" : "key-release", key_str); } else { - gst_navigation_send_key_event (GST_NAVIGATION (xvimagesink), - e.type == KeyPress ? "key-press" : "key-release", "unknown"); + key_str = "unknown"; } + g_mutex_unlock (xvimagesink->x_lock); + GST_DEBUG_OBJECT (xvimagesink, + "key %d pressed over window at %d,%d (%s)", + e.xkey.keycode, e.xkey.x, e.xkey.y, key_str); + gst_navigation_send_key_event (GST_NAVIGATION (xvimagesink), + e.type == KeyPress ? "key-press" : "key-release", key_str); break; default: GST_DEBUG ("xvimagesink unhandled X event (%d)", e.type); From 15091ad1243bc5829293928427ebdb67c21d2e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 5 Mar 2012 15:23:20 +0100 Subject: [PATCH 07/22] playsink: Chain up to the parent's GstBin::handle_message() for non-prepare-xoverlay element messages --- gst/playback/gstplaysink.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index 61bdceee5f..413c5b59f2 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -3748,6 +3748,9 @@ gst_play_sink_handle_message (GstBin * bin, GstMessage * message) gst_object_unref (xoverlay); gst_message_unref (message); gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (playsink)); + } else { + GST_BIN_CLASS (gst_play_sink_parent_class)->handle_message (bin, + message); } break; } From c8aea0cdc176f0812b715a898edda1b2e02c5dd6 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Mon, 5 Mar 2012 14:19:24 +0100 Subject: [PATCH 08/22] docs: make videooverlaycomposition types show up in the docs --- docs/libs/gst-plugins-base-libs.types | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/libs/gst-plugins-base-libs.types b/docs/libs/gst-plugins-base-libs.types index 991a97579e..1ea70464ce 100644 --- a/docs/libs/gst-plugins-base-libs.types +++ b/docs/libs/gst-plugins-base-libs.types @@ -60,6 +60,9 @@ gst_base_rtp_audio_payload_get_type gst_video_filter_get_type #include gst_video_sink_get_type +#include +gst_video_overlay_rectangle_get_type +gst_video_overlay_composition_get_type #include gst_discoverer_get_type From aeb6a6ee716232d6f428b8faf721859db0fcd2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Mar 2012 12:40:36 +0100 Subject: [PATCH 09/22] pbutils: Fix 'comparison of unsigned enum expression < 0 is always false' compiler warning --- gst-libs/gst/pbutils/install-plugins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gst-libs/gst/pbutils/install-plugins.c b/gst-libs/gst/pbutils/install-plugins.c index 9b5f45e1df..93965dee1a 100644 --- a/gst-libs/gst/pbutils/install-plugins.c +++ b/gst-libs/gst/pbutils/install-plugins.c @@ -569,7 +569,7 @@ gst_install_plugins_return_from_status (gint status) ret = (GstInstallPluginsReturn) WEXITSTATUS (status); /* did the helper return an invalid status code? */ - if ((ret < 0 || ret >= GST_INSTALL_PLUGINS_STARTED_OK) && + if (((guint) ret) >= GST_INSTALL_PLUGINS_STARTED_OK && ret != GST_INSTALL_PLUGINS_INTERNAL_FAILURE) { ret = GST_INSTALL_PLUGINS_INVALID; } From 1af6f94d843e321130de802803d9e688eee56de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Mar 2012 12:42:03 +0100 Subject: [PATCH 10/22] video-blend: Actually allow negative offsets in the function signature too --- gst-libs/gst/video/video-blend.c | 2 +- gst-libs/gst/video/video-blend.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/video/video-blend.c b/gst-libs/gst/video/video-blend.c index 9231464bcd..2eb8ac0e31 100644 --- a/gst-libs/gst/video/video-blend.c +++ b/gst-libs/gst/video/video-blend.c @@ -1338,7 +1338,7 @@ video_blend_scale_linear_RGBA (GstBlendVideoFormatInfo * src, */ gboolean video_blend (GstBlendVideoFormatInfo * dest, - GstBlendVideoFormatInfo * src, guint x, guint y) + GstBlendVideoFormatInfo * src, gint x, gint y) { guint i, j; guint8 alpha; diff --git a/gst-libs/gst/video/video-blend.h b/gst-libs/gst/video/video-blend.h index f3673a6fe4..32e5d12028 100644 --- a/gst-libs/gst/video/video-blend.h +++ b/gst-libs/gst/video/video-blend.h @@ -71,6 +71,6 @@ void video_blend_scale_linear_RGBA (GstBlendVideoFormatInfo * src, gboolean video_blend (GstBlendVideoFormatInfo * dest, GstBlendVideoFormatInfo * src, - guint x, guint y); + gint x, gint y); #endif From c2dc843c7edc9ced051fae10d2f96bd20bbb0fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Mar 2012 12:47:33 +0100 Subject: [PATCH 11/22] xvimagesink: Fix 'comparison of unsigned expression >= 0 is always true' -1 aka 0xffffffff is the only possible 'negative' value that is used as a special value for 'not set' here. All other positive values are valid. --- sys/xvimage/xvimagesink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index ccfdaae029..29fe98c046 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -1426,7 +1426,7 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink, xcontext->adaptors[i] = g_strdup (adaptors[i].name); } - if (xvimagesink->adaptor_no >= 0 && + if (xvimagesink->adaptor_no != -1 && xvimagesink->adaptor_no < xcontext->nb_adaptors) { /* Find xv port from user defined adaptor */ gst_lookup_xv_port_from_adaptor (xcontext, adaptors, From 7418ddd753608a5fb134afeb25d7bb4e5ddc38ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Mar 2012 13:09:05 +0100 Subject: [PATCH 12/22] ogg: Fix handling of unset granuleshift for the skeleton parser And also add a helper function to properly clear/reset/free the GstOggStream structures. --- ext/ogg/gstoggdemux.c | 28 ++---------------------- ext/ogg/gstoggmux.c | 6 ++---- ext/ogg/gstoggstream.c | 49 +++++++++++++++++++++++++++++++++++++++--- ext/ogg/gstoggstream.h | 2 ++ 4 files changed, 52 insertions(+), 33 deletions(-) diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index ac01b05962..fe387db8cf 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -194,12 +194,8 @@ gst_ogg_pad_init (GstOggPad * pad) pad->have_type = FALSE; pad->continued = NULL; - pad->map.headers = NULL; - pad->map.queued = NULL; - pad->map.granulerate_n = 0; - pad->map.granulerate_d = 0; - pad->map.granuleshift = -1; + gst_ogg_stream_clear (&pad->map); } static void @@ -210,32 +206,12 @@ gst_ogg_pad_dispose (GObject * object) pad->chain = NULL; pad->ogg = NULL; - g_list_foreach (pad->map.headers, (GFunc) _ogg_packet_free, NULL); - g_list_free (pad->map.headers); - pad->map.headers = NULL; - g_list_foreach (pad->map.queued, (GFunc) _ogg_packet_free, NULL); - g_list_free (pad->map.queued); - pad->map.queued = NULL; - - g_free (pad->map.index); - pad->map.index = NULL; - /* clear continued pages */ g_list_foreach (pad->continued, (GFunc) gst_ogg_page_free, NULL); g_list_free (pad->continued); pad->continued = NULL; - if (pad->map.caps) { - gst_caps_unref (pad->map.caps); - pad->map.caps = NULL; - } - - if (pad->map.taglist) { - gst_tag_list_free (pad->map.taglist); - pad->map.taglist = NULL; - } - - ogg_stream_reset (&pad->map.stream); + gst_ogg_stream_clear (&pad->map); G_OBJECT_CLASS (gst_ogg_pad_parent_class)->dispose (object); } diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 7aeecc023e..3a545f9139 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -296,8 +296,7 @@ gst_ogg_mux_ogg_pad_destroy_notify (GstCollectData2 * data) GstOggPadData *oggpad = (GstOggPadData *) data; GstBuffer *buf; - ogg_stream_clear (&oggpad->map.stream); - gst_caps_replace (&oggpad->map.caps, NULL); + gst_ogg_stream_clear (&oggpad->map); if (oggpad->pagebuffers) { while ((buf = g_queue_pop_head (oggpad->pagebuffers)) != NULL) { @@ -466,6 +465,7 @@ gst_ogg_mux_request_new_pad (GstElement * element, sizeof (GstOggPadData), gst_ogg_mux_ogg_pad_destroy_notify, FALSE); ogg_mux->active_pads++; + gst_ogg_stream_clear (&oggpad->map); oggpad->map.serialno = serial; oggpad->packetno = 0; oggpad->pageno = 0; @@ -476,8 +476,6 @@ gst_ogg_mux_request_new_pad (GstElement * element, oggpad->first_delta = FALSE; oggpad->prev_delta = FALSE; oggpad->data_pushed = FALSE; - oggpad->map.headers = NULL; - oggpad->map.queued = NULL; oggpad->next_granule = 0; oggpad->keyframe_granule = -1; diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c index 3b267faa13..b0f9e59977 100644 --- a/ext/ogg/gstoggstream.c +++ b/ext/ogg/gstoggstream.c @@ -643,6 +643,7 @@ setup_vp8_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_d = fps_d; pad->n_header_packets = 2; pad->frame_size = 1; + pad->granuleshift = 0; pad->caps = gst_caps_new_simple ("video/x-vp8", "width", G_TYPE_INT, width, @@ -1207,7 +1208,7 @@ gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad, pad->granulerate_n = GST_READ_UINT64_LE (data); pad->granulerate_d = GST_READ_UINT64_LE (data + 8); } - if (pad->granuleshift < 0) { + if (pad->granuleshift == -1) { pad->granuleshift = GST_READ_UINT8 (data + 28); } @@ -1479,6 +1480,7 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_n = GST_READ_UINT64_LE (data + 25); pad->granulerate_d = 1; + pad->granuleshift = 0; fourcc = GST_READ_UINT32_LE (data + 9); GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc)); @@ -1522,6 +1524,7 @@ setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet) GST_WARNING ("timeunit is out of range"); } pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT); + pad->granuleshift = 0; GST_LOG ("fps = %d/%d = %.3f", pad->granulerate_n, pad->granulerate_d, @@ -1566,6 +1569,7 @@ setup_ogmtext_mapper (GstOggStream * pad, ogg_packet * packet) GST_WARNING ("timeunit is out of range"); } pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT); + pad->granuleshift = 0; GST_LOG ("fps = %d/%d = %.3f", pad->granulerate_n, pad->granulerate_d, @@ -1614,6 +1618,7 @@ setup_pcm_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_n = GST_READ_UINT32_LE (data + 16); pad->granulerate_d = 1; + pad->granuleshift = 0; GST_LOG ("sample rate: %d", pad->granulerate_n); format = GST_READ_UINT32_LE (data + 12); @@ -2232,10 +2237,12 @@ gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet * packet) GST_DEBUG ("found mapper for '%s'", mappers[i].id); - if (mappers[i].setup_func) + if (mappers[i].setup_func) { + gst_ogg_stream_clear (pad); ret = mappers[i].setup_func (pad, packet); - else + } else { continue; + } if (ret) { GST_DEBUG ("got stream type %" GST_PTR_FORMAT, pad->caps); @@ -2305,3 +2312,39 @@ gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad, GST_INFO ("Found headers on caps, using those to determine type"); return gst_ogg_stream_setup_map (pad, &packet); } + +static void +_ogg_packet_free (ogg_packet * packet) +{ + g_free (packet->packet); + g_slice_free (ogg_packet, packet); +} + +void +gst_ogg_stream_clear (GstOggStream * pad) +{ + g_list_foreach (pad->headers, (GFunc) _ogg_packet_free, NULL); + g_list_free (pad->headers); + pad->headers = NULL; + g_list_foreach (pad->queued, (GFunc) _ogg_packet_free, NULL); + g_list_free (pad->queued); + pad->queued = NULL; + + g_free (pad->index); + pad->index = NULL; + + if (pad->caps) { + gst_caps_unref (pad->caps); + pad->caps = NULL; + } + + if (pad->taglist) { + gst_tag_list_free (pad->taglist); + pad->taglist = NULL; + } + + ogg_stream_reset (&pad->stream); + + memset (pad, 0, sizeof (GstOggStream)); + pad->granuleshift = -1; +} diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h index c06bc51d6d..ab4a2b0095 100644 --- a/ext/ogg/gstoggstream.h +++ b/ext/ogg/gstoggstream.h @@ -108,6 +108,8 @@ struct _GstOggStream }; +void gst_ogg_stream_clear (GstOggStream *pad); + gboolean gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet *packet); gboolean gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad, const GstCaps * caps); From 93e7bb6759987663df5cde30b9dcb75d49bd1ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 6 Mar 2012 13:11:16 +0100 Subject: [PATCH 13/22] pango: Fix 'implicit conversion from enumeration type 'GstTextOverlayLineAlign' to different enumeration type 'PangoAlignment'' compiler warning --- ext/pango/gsttextoverlay.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c index 0096d940c1..329be5081d 100644 --- a/ext/pango/gsttextoverlay.c +++ b/ext/pango/gsttextoverlay.c @@ -743,7 +743,8 @@ gst_text_overlay_update_render_mode (GstTextOverlay * overlay) } else { pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH); pango_context_set_matrix (context, &matrix); - pango_layout_set_alignment (overlay->layout, overlay->line_align); + pango_layout_set_alignment (overlay->layout, + (PangoAlignment) overlay->line_align); } } From 5a0fff76f3d792366446db89e22bcf90055f4938 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 6 Mar 2012 15:55:26 +0100 Subject: [PATCH 14/22] audiodecoder: add baseclass _CAST macro --- gst-libs/gst/audio/gstaudiodecoder.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h index ba4fff3484..bde1cfc40f 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.h +++ b/gst-libs/gst/audio/gstaudiodecoder.h @@ -41,6 +41,8 @@ G_BEGIN_DECLS (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_DECODER)) #define GST_IS_AUDIO_DECODER_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_DECODER)) +#define GST_AUDIO_DECODER_CAST(obj) \ + ((GstAudioDecoder *)(obj)) /** * GST_AUDIO_DECODER_SINK_NAME: From 8a3f818dce3e4741dfa39b0e0329fd1a3abdd2d7 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 6 Mar 2012 15:56:42 +0100 Subject: [PATCH 15/22] audiodecoder: add some tag handling convenience help --- gst-libs/gst/audio/gstaudiodecoder.c | 37 ++++++++++++++++++++++++++++ gst-libs/gst/audio/gstaudiodecoder.h | 3 +++ 2 files changed, 40 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index f37bce2e9f..0198d849d8 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -2585,3 +2585,40 @@ gst_audio_decoder_get_needs_format (GstAudioDecoder * dec) return result; } + +/** + * gst_audio_decoder_merge_tags: + * @dec: a #GstAudioDecoder + * @tags: a #GstTagList to merge + * @mode: the #GstTagMergeMode to use + * + * Adds tags to so-called pending tags, which will be processed + * before pushing out data downstream. + * + * Note that this is provided for convenience, and the subclass is + * not required to use this and can still do tag handling on its own, + * although it should be aware that baseclass already takes care + * of the usual CODEC/AUDIO_CODEC tags. + * + * MT safe. + * + * Since: 0.10.37 + */ +void +gst_audio_decoder_merge_tags (GstAudioDecoder * dec, + const GstTagList * tags, GstTagMergeMode mode) +{ + GstTagList *otags; + + g_return_if_fail (GST_IS_AUDIO_DECODER (dec)); + g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags)); + + GST_AUDIO_DECODER_STREAM_LOCK (dec); + if (tags) + GST_DEBUG_OBJECT (dec, "merging tags %" GST_PTR_FORMAT, tags); + otags = dec->priv->taglist; + dec->priv->taglist = gst_tag_list_merge (dec->priv->taglist, tags, mode); + if (otags) + gst_tag_list_free (otags); + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); +} diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h index bde1cfc40f..bd6cb8988c 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.h +++ b/gst-libs/gst/audio/gstaudiodecoder.h @@ -305,6 +305,9 @@ void gst_audio_decoder_set_needs_format (GstAudioDecoder * dec, gboolean gst_audio_decoder_get_needs_format (GstAudioDecoder * dec); +void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, + const GstTagList * tags, GstTagMergeMode mode); + G_END_DECLS #endif /* _GST_AUDIO_DECODER_H_ */ From 600b91e8784a5e2302b02ad0ad760a9573edf67f Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 6 Mar 2012 15:57:21 +0100 Subject: [PATCH 16/22] vorbisdec: simplify tag handling using base class helper --- ext/vorbis/gstvorbisdec.c | 54 +++++++++++---------------------------- ext/vorbis/gstvorbisdec.h | 2 -- 2 files changed, 15 insertions(+), 41 deletions(-) diff --git a/ext/vorbis/gstvorbisdec.c b/ext/vorbis/gstvorbisdec.c index f476d45a67..b17ebfede1 100644 --- a/ext/vorbis/gstvorbisdec.c +++ b/ext/vorbis/gstvorbisdec.c @@ -128,14 +128,6 @@ vorbis_dec_finalize (GObject * object) G_OBJECT_CLASS (parent_class)->finalize (object); } -static void -gst_vorbis_dec_reset (GstVorbisDec * dec) -{ - if (dec->taglist) - gst_tag_list_free (dec->taglist); - dec->taglist = NULL; -} - static gboolean vorbis_dec_start (GstAudioDecoder * dec) { @@ -145,7 +137,6 @@ vorbis_dec_start (GstAudioDecoder * dec) vorbis_info_init (&vd->vi); vorbis_comment_init (&vd->vc); vd->initialized = FALSE; - gst_vorbis_dec_reset (vd); return TRUE; } @@ -163,7 +154,6 @@ vorbis_dec_stop (GstAudioDecoder * dec) vorbis_dsp_clear (&vd->vd); vorbis_comment_clear (&vd->vc); vorbis_info_clear (&vd->vi); - gst_vorbis_dec_reset (vd); return TRUE; } @@ -308,7 +298,7 @@ vorbis_handle_comment_packet (GstVorbisDec * vd, ogg_packet * packet) { guint bitrate = 0; gchar *encoder = NULL; - GstTagList *list, *old_list; + GstTagList *list; GstBuffer *buf; GST_DEBUG_OBJECT (vd, "parsing comment packet"); @@ -321,58 +311,53 @@ vorbis_handle_comment_packet (GstVorbisDec * vd, ogg_packet * packet) gst_tag_list_from_vorbiscomment_buffer (buf, (guint8 *) "\003vorbis", 7, &encoder); - old_list = vd->taglist; - vd->taglist = gst_tag_list_merge (vd->taglist, list, GST_TAG_MERGE_REPLACE); + if (!list) { + GST_ERROR_OBJECT (vd, "couldn't decode comments"); + list = gst_tag_list_new (); + } - if (old_list) - gst_tag_list_free (old_list); - gst_tag_list_free (list); gst_buffer_unref (buf); - if (!vd->taglist) { - GST_ERROR_OBJECT (vd, "couldn't decode comments"); - vd->taglist = gst_tag_list_new (); - } if (encoder) { if (encoder[0]) - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, NULL); g_free (encoder); } - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER_VERSION, vd->vi.version, GST_TAG_AUDIO_CODEC, "Vorbis", NULL); if (vd->vi.bitrate_nominal > 0 && vd->vi.bitrate_nominal <= 0x7FFFFFFF) { - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_NOMINAL_BITRATE, (guint) vd->vi.bitrate_nominal, NULL); bitrate = vd->vi.bitrate_nominal; } if (vd->vi.bitrate_upper > 0 && vd->vi.bitrate_upper <= 0x7FFFFFFF) { - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_MAXIMUM_BITRATE, (guint) vd->vi.bitrate_upper, NULL); if (!bitrate) bitrate = vd->vi.bitrate_upper; } if (vd->vi.bitrate_lower > 0 && vd->vi.bitrate_lower <= 0x7FFFFFFF) { - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_MINIMUM_BITRATE, (guint) vd->vi.bitrate_lower, NULL); if (!bitrate) bitrate = vd->vi.bitrate_lower; } if (bitrate) { - gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE, + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE, (guint) bitrate, NULL); } + gst_audio_decoder_merge_tags (GST_AUDIO_DECODER_CAST (vd), list, + GST_TAG_MERGE_REPLACE); if (vd->initialized) { - gst_element_found_tags_for_pad (GST_ELEMENT_CAST (vd), - GST_AUDIO_DECODER_SRC_PAD (vd), vd->taglist); - vd->taglist = NULL; + gst_tag_list_free (list); } else { /* Only post them as messages for the time being. * * They will be pushed on the pad once the decoder is initialized */ gst_element_post_message (GST_ELEMENT_CAST (vd), - gst_message_new_tag (GST_OBJECT (vd), gst_tag_list_copy (vd->taglist))); + gst_message_new_tag (GST_OBJECT (vd), list)); } return GST_FLOW_OK; @@ -398,12 +383,6 @@ vorbis_handle_type_packet (GstVorbisDec * vd) vd->initialized = TRUE; - if (vd->taglist) { - /* The tags have already been sent on the bus as messages. */ - gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (vd), - gst_event_new_tag (vd->taglist)); - vd->taglist = NULL; - } return GST_FLOW_OK; /* ERRORS */ @@ -728,7 +707,4 @@ vorbis_dec_flush (GstAudioDecoder * dec, gboolean hard) #ifdef HAVE_VORBIS_SYNTHESIS_RESTART vorbis_synthesis_restart (&vd->vd); #endif - - if (hard) - gst_vorbis_dec_reset (vd); } diff --git a/ext/vorbis/gstvorbisdec.h b/ext/vorbis/gstvorbisdec.h index 56f9ca406a..712e50e376 100644 --- a/ext/vorbis/gstvorbisdec.h +++ b/ext/vorbis/gstvorbisdec.h @@ -64,8 +64,6 @@ struct _GstVorbisDec { gboolean initialized; guint width; - GstTagList *taglist; - CopySampleFunc copy_samples; }; From 38f79e682c39942ef4268b8bef95c0011e73e06c Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 7 Mar 2012 09:04:18 +0100 Subject: [PATCH 17/22] win32: update defs for new libgstaudio symbol --- win32/common/libgstaudio.def | 1 + 1 file changed, 1 insertion(+) diff --git a/win32/common/libgstaudio.def b/win32/common/libgstaudio.def index 6f47c4604c..68af0ecbb0 100644 --- a/win32/common/libgstaudio.def +++ b/win32/common/libgstaudio.def @@ -24,6 +24,7 @@ EXPORTS gst_audio_decoder_get_plc_aware gst_audio_decoder_get_tolerance gst_audio_decoder_get_type + gst_audio_decoder_merge_tags gst_audio_decoder_set_byte_time gst_audio_decoder_set_drainable gst_audio_decoder_set_latency From f6d742fef22e3145398b7e2f1bbeb182db400f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Wed, 7 Mar 2012 12:39:41 +0000 Subject: [PATCH 18/22] common: update common module For new check-norepeat target. --- common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common b/common index 17fa4abf49..bb15f1a28b 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 17fa4abf49d31cf5dcc2994bdbaa86e45a3fb69f +Subproject commit bb15f1a28b56d86380ed113cab88ed596b1ad452 From 1dd86b9c66c45a2ca5d9c8b7d754e1d86c7aec81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Wed, 7 Mar 2012 12:45:46 +0000 Subject: [PATCH 19/22] Revert "ogg: Fix handling of unset granuleshift for the skeleton parser" This reverts commit 7418ddd753608a5fb134afeb25d7bb4e5ddc38ec. This breaks the unit test and messes up preroll/seeking. --- ext/ogg/gstoggdemux.c | 28 ++++++++++++++++++++++-- ext/ogg/gstoggmux.c | 6 ++++-- ext/ogg/gstoggstream.c | 49 +++--------------------------------------- ext/ogg/gstoggstream.h | 2 -- 4 files changed, 33 insertions(+), 52 deletions(-) diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index fe387db8cf..ac01b05962 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -194,8 +194,12 @@ gst_ogg_pad_init (GstOggPad * pad) pad->have_type = FALSE; pad->continued = NULL; + pad->map.headers = NULL; + pad->map.queued = NULL; - gst_ogg_stream_clear (&pad->map); + pad->map.granulerate_n = 0; + pad->map.granulerate_d = 0; + pad->map.granuleshift = -1; } static void @@ -206,12 +210,32 @@ gst_ogg_pad_dispose (GObject * object) pad->chain = NULL; pad->ogg = NULL; + g_list_foreach (pad->map.headers, (GFunc) _ogg_packet_free, NULL); + g_list_free (pad->map.headers); + pad->map.headers = NULL; + g_list_foreach (pad->map.queued, (GFunc) _ogg_packet_free, NULL); + g_list_free (pad->map.queued); + pad->map.queued = NULL; + + g_free (pad->map.index); + pad->map.index = NULL; + /* clear continued pages */ g_list_foreach (pad->continued, (GFunc) gst_ogg_page_free, NULL); g_list_free (pad->continued); pad->continued = NULL; - gst_ogg_stream_clear (&pad->map); + if (pad->map.caps) { + gst_caps_unref (pad->map.caps); + pad->map.caps = NULL; + } + + if (pad->map.taglist) { + gst_tag_list_free (pad->map.taglist); + pad->map.taglist = NULL; + } + + ogg_stream_reset (&pad->map.stream); G_OBJECT_CLASS (gst_ogg_pad_parent_class)->dispose (object); } diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 3a545f9139..7aeecc023e 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -296,7 +296,8 @@ gst_ogg_mux_ogg_pad_destroy_notify (GstCollectData2 * data) GstOggPadData *oggpad = (GstOggPadData *) data; GstBuffer *buf; - gst_ogg_stream_clear (&oggpad->map); + ogg_stream_clear (&oggpad->map.stream); + gst_caps_replace (&oggpad->map.caps, NULL); if (oggpad->pagebuffers) { while ((buf = g_queue_pop_head (oggpad->pagebuffers)) != NULL) { @@ -465,7 +466,6 @@ gst_ogg_mux_request_new_pad (GstElement * element, sizeof (GstOggPadData), gst_ogg_mux_ogg_pad_destroy_notify, FALSE); ogg_mux->active_pads++; - gst_ogg_stream_clear (&oggpad->map); oggpad->map.serialno = serial; oggpad->packetno = 0; oggpad->pageno = 0; @@ -476,6 +476,8 @@ gst_ogg_mux_request_new_pad (GstElement * element, oggpad->first_delta = FALSE; oggpad->prev_delta = FALSE; oggpad->data_pushed = FALSE; + oggpad->map.headers = NULL; + oggpad->map.queued = NULL; oggpad->next_granule = 0; oggpad->keyframe_granule = -1; diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c index b0f9e59977..3b267faa13 100644 --- a/ext/ogg/gstoggstream.c +++ b/ext/ogg/gstoggstream.c @@ -643,7 +643,6 @@ setup_vp8_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_d = fps_d; pad->n_header_packets = 2; pad->frame_size = 1; - pad->granuleshift = 0; pad->caps = gst_caps_new_simple ("video/x-vp8", "width", G_TYPE_INT, width, @@ -1208,7 +1207,7 @@ gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad, pad->granulerate_n = GST_READ_UINT64_LE (data); pad->granulerate_d = GST_READ_UINT64_LE (data + 8); } - if (pad->granuleshift == -1) { + if (pad->granuleshift < 0) { pad->granuleshift = GST_READ_UINT8 (data + 28); } @@ -1480,7 +1479,6 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_n = GST_READ_UINT64_LE (data + 25); pad->granulerate_d = 1; - pad->granuleshift = 0; fourcc = GST_READ_UINT32_LE (data + 9); GST_DEBUG ("fourcc: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc)); @@ -1524,7 +1522,6 @@ setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet) GST_WARNING ("timeunit is out of range"); } pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT); - pad->granuleshift = 0; GST_LOG ("fps = %d/%d = %.3f", pad->granulerate_n, pad->granulerate_d, @@ -1569,7 +1566,6 @@ setup_ogmtext_mapper (GstOggStream * pad, ogg_packet * packet) GST_WARNING ("timeunit is out of range"); } pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT); - pad->granuleshift = 0; GST_LOG ("fps = %d/%d = %.3f", pad->granulerate_n, pad->granulerate_d, @@ -1618,7 +1614,6 @@ setup_pcm_mapper (GstOggStream * pad, ogg_packet * packet) pad->granulerate_n = GST_READ_UINT32_LE (data + 16); pad->granulerate_d = 1; - pad->granuleshift = 0; GST_LOG ("sample rate: %d", pad->granulerate_n); format = GST_READ_UINT32_LE (data + 12); @@ -2237,12 +2232,10 @@ gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet * packet) GST_DEBUG ("found mapper for '%s'", mappers[i].id); - if (mappers[i].setup_func) { - gst_ogg_stream_clear (pad); + if (mappers[i].setup_func) ret = mappers[i].setup_func (pad, packet); - } else { + else continue; - } if (ret) { GST_DEBUG ("got stream type %" GST_PTR_FORMAT, pad->caps); @@ -2312,39 +2305,3 @@ gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad, GST_INFO ("Found headers on caps, using those to determine type"); return gst_ogg_stream_setup_map (pad, &packet); } - -static void -_ogg_packet_free (ogg_packet * packet) -{ - g_free (packet->packet); - g_slice_free (ogg_packet, packet); -} - -void -gst_ogg_stream_clear (GstOggStream * pad) -{ - g_list_foreach (pad->headers, (GFunc) _ogg_packet_free, NULL); - g_list_free (pad->headers); - pad->headers = NULL; - g_list_foreach (pad->queued, (GFunc) _ogg_packet_free, NULL); - g_list_free (pad->queued); - pad->queued = NULL; - - g_free (pad->index); - pad->index = NULL; - - if (pad->caps) { - gst_caps_unref (pad->caps); - pad->caps = NULL; - } - - if (pad->taglist) { - gst_tag_list_free (pad->taglist); - pad->taglist = NULL; - } - - ogg_stream_reset (&pad->stream); - - memset (pad, 0, sizeof (GstOggStream)); - pad->granuleshift = -1; -} diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h index ab4a2b0095..c06bc51d6d 100644 --- a/ext/ogg/gstoggstream.h +++ b/ext/ogg/gstoggstream.h @@ -108,8 +108,6 @@ struct _GstOggStream }; -void gst_ogg_stream_clear (GstOggStream *pad); - gboolean gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet *packet); gboolean gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad, const GstCaps * caps); From 752ba3149fd05e83444649811125c4c81354b09e Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 8 Mar 2012 15:24:19 +0100 Subject: [PATCH 20/22] check: Disable another lanczos videoscale test Segfaults hard --- tests/check/elements/videoscale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/check/elements/videoscale.c b/tests/check/elements/videoscale.c index 557253309f..9a39a0e3f9 100644 --- a/tests/check/elements/videoscale.c +++ b/tests/check/elements/videoscale.c @@ -909,7 +909,7 @@ videoscale_suite (void) tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_0); tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_1); tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_2); - tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_3); + tcase_skip_broken_test (tc_chain, test_downscale_640x480_1x240_method_3); tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_0); tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_1); tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_2); From 5462536a36f4bd78950298a694ced44468e6b4ae Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Thu, 8 Mar 2012 15:17:40 +0100 Subject: [PATCH 21/22] playsink: plug element leak --- gst/playback/gstplaysinkconvertbin.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gst/playback/gstplaysinkconvertbin.c b/gst/playback/gstplaysinkconvertbin.c index 51ede9bb46..977c6cede7 100644 --- a/gst/playback/gstplaysinkconvertbin.c +++ b/gst/playback/gstplaysinkconvertbin.c @@ -194,6 +194,7 @@ gst_play_sink_convert_bin_remove_element (GstElement * element, GstPlaySinkConvertBin * self) { gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (element); gst_bin_remove (GST_BIN_CAST (self), element); } From b2a162ca771fd3969207028190b2c3166da5c171 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Thu, 8 Mar 2012 17:55:37 +0100 Subject: [PATCH 22/22] playsink: audio convert bin need not be unconditionally present ... so avoid NULL manipulation when setting up chain again (e.g. after having partially gone down to READY in native audio flag configuration). --- gst/playback/gstplaysink.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index 413c5b59f2..8757e2b8e0 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -2297,8 +2297,10 @@ setup_audio_chain (GstPlaySink * playsink, gboolean raw) GstElement *elem; GstPlayAudioChain *chain; GstStateChangeReturn ret; + GstPlaySinkAudioConvert *conv; chain = playsink->audiochain; + conv = GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv); chain->chain.raw = raw; @@ -2347,10 +2349,7 @@ setup_audio_chain (GstPlaySink * playsink, gboolean raw) } g_object_set (chain->conv, "use-volume", FALSE, NULL); - } else { - GstPlaySinkAudioConvert *conv = - GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv); - + } else if (conv) { /* no volume, we need to add a volume element when we can */ g_object_set (chain->conv, "use-volume", ! !(playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME), NULL);