From 1d05e81435e01d3054e61d0793fee2dafb92946d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 16 Apr 2011 11:00:31 +0100 Subject: [PATCH 1/2] libs: gobject-introspection scanner doesn't need to scan or update plugin info Make sure the scanner doesn't load or introspect or check any plugins, (especially not outside the build directory). --- gst-libs/gst/app/Makefile.am | 1 + gst-libs/gst/audio/Makefile.am | 1 + gst-libs/gst/cdda/Makefile.am | 1 + gst-libs/gst/fft/Makefile.am | 1 + gst-libs/gst/interfaces/Makefile.am | 1 + gst-libs/gst/netbuffer/Makefile.am | 1 + gst-libs/gst/pbutils/Makefile.am | 1 + gst-libs/gst/riff/Makefile.am | 1 + gst-libs/gst/rtp/Makefile.am | 1 + gst-libs/gst/rtsp/Makefile.am | 1 + gst-libs/gst/sdp/Makefile.am | 1 + gst-libs/gst/tag/Makefile.am | 1 + gst-libs/gst/video/Makefile.am | 1 + 13 files changed, 13 insertions(+) diff --git a/gst-libs/gst/app/Makefile.am b/gst-libs/gst/app/Makefile.am index e88ad449c6..bbd3df7cad 100644 --- a/gst-libs/gst/app/Makefile.am +++ b/gst-libs/gst/app/Makefile.am @@ -41,6 +41,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/app/%',$(libgstapp_@GST_MAJORMINOR@i GstApp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstApp \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am index 65a9928db4..e531e73526 100644 --- a/gst-libs/gst/audio/Makefile.am +++ b/gst-libs/gst/audio/Makefile.am @@ -69,6 +69,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/audio/%',$(nodist_libgstaudio_@GST_ GstAudio-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstAudio \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/cdda/Makefile.am b/gst-libs/gst/cdda/Makefile.am index 264f942099..26706f47eb 100644 --- a/gst-libs/gst/cdda/Makefile.am +++ b/gst-libs/gst/cdda/Makefile.am @@ -24,6 +24,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/cdda/%',$(libgstcdda_@GST_MAJORMINOR GstCdda-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstcdda-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstCdda \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am index b95c78d17b..18e72670a6 100644 --- a/gst-libs/gst/fft/Makefile.am +++ b/gst-libs/gst/fft/Makefile.am @@ -53,6 +53,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/fft/%',$(libgstfft_@GST_MAJORMINOR@_ GstFft-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstFft \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/interfaces/Makefile.am b/gst-libs/gst/interfaces/Makefile.am index 827438b0cb..a51b029aea 100644 --- a/gst-libs/gst/interfaces/Makefile.am +++ b/gst-libs/gst/interfaces/Makefile.am @@ -82,6 +82,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/interfaces/%',$(nodist_libgstinterf GstInterfaces-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstinterfaces-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstInterfaces \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/netbuffer/Makefile.am b/gst-libs/gst/netbuffer/Makefile.am index 17c40074d2..086a86b173 100644 --- a/gst-libs/gst/netbuffer/Makefile.am +++ b/gst-libs/gst/netbuffer/Makefile.am @@ -18,6 +18,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/netbuffer/%',$(libgstnetbufferinclud GstNetbuffer-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstnetbuffer-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstNetbuffer \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am index 5748ed4932..fab6523559 100644 --- a/gst-libs/gst/pbutils/Makefile.am +++ b/gst-libs/gst/pbutils/Makefile.am @@ -76,6 +76,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/pbutils/%',$(nodist_libgstpbutils_@ GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstPbutils \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am index c060a3913e..b22fcdef5b 100644 --- a/gst-libs/gst/riff/Makefile.am +++ b/gst-libs/gst/riff/Makefile.am @@ -28,6 +28,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/riff/%',$(libgstriff_@GST_MAJORMINOR GstRiff-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am index b71292145b..5e327ae753 100644 --- a/gst-libs/gst/rtp/Makefile.am +++ b/gst-libs/gst/rtp/Makefile.am @@ -29,6 +29,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/rtp/%',$(libgstrtpinclude_HEADERS)) GstRtp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstRtp \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am index fa03f7874b..bd27a4086a 100644 --- a/gst-libs/gst/rtsp/Makefile.am +++ b/gst-libs/gst/rtsp/Makefile.am @@ -61,6 +61,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/rtsp/%',$(nodist_libgstrtspinclude_ GstRtsp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstRtsp \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am index 9e4a04e6a8..8f8d9b7fe5 100644 --- a/gst-libs/gst/sdp/Makefile.am +++ b/gst-libs/gst/sdp/Makefile.am @@ -20,6 +20,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/sdp/%',$(libgstsdpinclude_HEADERS)) GstSdp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstSdp \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am index 3c555b6f29..9977d66432 100644 --- a/gst-libs/gst/tag/Makefile.am +++ b/gst-libs/gst/tag/Makefile.am @@ -27,6 +27,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/tag/%',$(libgsttaginclude_HEADERS)) GstTag-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstTag \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am index a89dbae6db..21ce6e48bc 100644 --- a/gst-libs/gst/video/Makefile.am +++ b/gst-libs/gst/video/Makefile.am @@ -39,6 +39,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_ GstVideo-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_MAJORMINOR@.la $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstVideo \ --nsversion=@GST_MAJORMINOR@ \ --strip-prefix=Gst \ From 55e767b6328e6cc0db7bf6ac23cdf4e0eab537e6 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Fri, 15 Apr 2011 13:36:39 +0100 Subject: [PATCH 2/2] oggmux: prefer headers from caps to determine stream type Ogg mandates the first header packet must determine a stream's type. However, some streams (such as VP8) do not include such a header when muxed in other containers, and thus do not include this header as a buffer, but only in caps. We thus use headers from caps when available to determine a new stream's type. https://bugzilla.gnome.org/show_bug.cgi?id=647856 --- ext/ogg/gstoggmux.c | 13 +++++++++- ext/ogg/gstoggstream.c | 55 ++++++++++++++++++++++++++++++++++++++++++ ext/ogg/gstoggstream.h | 2 ++ 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 9f3047f659..4dda50b4ec 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -848,7 +848,18 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux) /* if we're not yet in data mode, ensure we're setup on the first packet */ if (!pad->have_type) { - pad->have_type = gst_ogg_stream_setup_map (&pad->map, &packet); + /* Use headers in caps, if any; this will allow us to be resilient + * to starting streams on the fly, and some streams (like VP8 + * at least) do not send headers packets, as other muxers don't + * expect/need them. */ + pad->have_type = + gst_ogg_stream_setup_map_from_caps_headers (&pad->map, + GST_BUFFER_CAPS (buf)); + + if (!pad->have_type) { + /* fallback on the packet */ + pad->have_type = gst_ogg_stream_setup_map (&pad->map, &packet); + } if (!pad->have_type) { GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream " "(pad caps: %" GST_PTR_FORMAT ")", GST_PAD_CAPS (pad)); diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c index 3ef2fd00f5..e843f48721 100644 --- a/ext/ogg/gstoggstream.c +++ b/ext/ogg/gstoggstream.c @@ -2051,3 +2051,58 @@ gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet * packet) return FALSE; } + +gboolean +gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad, + const GstCaps * caps) +{ + const GstStructure *structure; + const GstBuffer *buf; + const GValue *streamheader; + const GValue *first_element; + ogg_packet packet; + + GST_INFO ("Checking streamheader on caps %" GST_PTR_FORMAT, caps); + + if (caps == NULL) + return FALSE; + + structure = gst_caps_get_structure (caps, 0); + streamheader = gst_structure_get_value (structure, "streamheader"); + + if (streamheader == NULL) { + GST_LOG ("no streamheader field in caps %" GST_PTR_FORMAT, caps); + return FALSE; + } + + if (!GST_VALUE_HOLDS_ARRAY (streamheader)) { + GST_ERROR ("streamheader field not an array, caps: %" GST_PTR_FORMAT, caps); + return FALSE; + } + + if (gst_value_array_get_size (streamheader) == 0) { + GST_ERROR ("empty streamheader field in caps %" GST_PTR_FORMAT, caps); + return FALSE; + } + + first_element = gst_value_array_get_value (streamheader, 0); + + if (!GST_VALUE_HOLDS_BUFFER (first_element)) { + GST_ERROR ("first streamheader not a buffer, caps: %" GST_PTR_FORMAT, caps); + return FALSE; + } + + buf = gst_value_get_buffer (first_element); + if (buf == NULL || GST_BUFFER_SIZE (buf) == 0) { + GST_ERROR ("invalid first streamheader buffer"); + return FALSE; + } + + GST_MEMDUMP ("streamheader", GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); + + packet.packet = GST_BUFFER_DATA (buf); + packet.bytes = GST_BUFFER_SIZE (buf); + + GST_INFO ("Found headers on caps, using those to determine type"); + return gst_ogg_stream_setup_map (pad, &packet); +} diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h index 94c8f05504..f843692eaf 100644 --- a/ext/ogg/gstoggstream.h +++ b/ext/ogg/gstoggstream.h @@ -106,6 +106,8 @@ struct _GstOggStream 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); GstClockTime gst_ogg_stream_get_end_time_for_granulepos (GstOggStream *pad, gint64 granulepos); GstClockTime gst_ogg_stream_get_start_time_for_granulepos (GstOggStream *pad,