Merge branch 'master' into 0.11

This commit is contained in:
Sebastian Dröge 2011-04-16 16:06:26 +02:00
commit c8792778f8
16 changed files with 82 additions and 1 deletions

View file

@ -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 we're not yet in data mode, ensure we're setup on the first packet */
if (!pad->have_type) { 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) { if (!pad->have_type) {
GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream " GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream "
"(pad caps: %" GST_PTR_FORMAT ")", GST_PAD_CAPS (pad)); "(pad caps: %" GST_PTR_FORMAT ")", GST_PAD_CAPS (pad));

View file

@ -2044,3 +2044,58 @@ gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet * packet)
return FALSE; 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);
}

View file

@ -106,6 +106,8 @@ struct _GstOggStream
gboolean gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet *packet); 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, GstClockTime gst_ogg_stream_get_end_time_for_granulepos (GstOggStream *pad,
gint64 granulepos); gint64 granulepos);
GstClockTime gst_ogg_stream_get_start_time_for_granulepos (GstOggStream *pad, GstClockTime gst_ogg_stream_get_start_time_for_granulepos (GstOggStream *pad,

View file

@ -40,6 +40,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/app/%',$(libgstapp_@GST_MAJORMINOR@i
GstApp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_MAJORMINOR@.la GstApp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstApp \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -69,6 +69,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/audio/%',$(nodist_libgstaudio_@GST_
GstAudio-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_MAJORMINOR@.la GstAudio-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstAudio \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -24,6 +24,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/cdda/%',$(libgstcdda_@GST_MAJORMINOR
GstCdda-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstcdda-@GST_MAJORMINOR@.la GstCdda-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstcdda-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstCdda \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -53,6 +53,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/fft/%',$(libgstfft_@GST_MAJORMINOR@_
GstFft-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_MAJORMINOR@.la GstFft-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstFft \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -82,6 +82,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/interfaces/%',$(nodist_libgstinterf
GstInterfaces-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstinterfaces-@GST_MAJORMINOR@.la GstInterfaces-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstinterfaces-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstInterfaces \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -18,6 +18,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/netbuffer/%',$(libgstnetbufferinclud
GstNetbuffer-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstnetbuffer-@GST_MAJORMINOR@.la GstNetbuffer-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstnetbuffer-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstNetbuffer \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -76,6 +76,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/pbutils/%',$(nodist_libgstpbutils_@
GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJORMINOR@.la GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -28,6 +28,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/riff/%',$(libgstriff_@GST_MAJORMINOR
GstRiff-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_MAJORMINOR@.la GstRiff-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstRiff \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -29,6 +29,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/rtp/%',$(libgstrtpinclude_HEADERS))
GstRtp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_MAJORMINOR@.la GstRtp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstRtp \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -61,6 +61,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/rtsp/%',$(nodist_libgstrtspinclude_
GstRtsp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_MAJORMINOR@.la GstRtsp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -20,6 +20,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/sdp/%',$(libgstsdpinclude_HEADERS))
GstSdp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_MAJORMINOR@.la GstSdp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstSdp \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -27,6 +27,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/tag/%',$(libgsttaginclude_HEADERS))
GstTag-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_MAJORMINOR@.la GstTag-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstTag \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \

View file

@ -39,6 +39,7 @@ gir_cincludes+=$(patsubst %,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_
GstVideo-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_MAJORMINOR@.la GstVideo-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_MAJORMINOR@.la
$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ $(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 \ $(INTROSPECTION_SCANNER) -v --namespace GstVideo \
--nsversion=@GST_MAJORMINOR@ \ --nsversion=@GST_MAJORMINOR@ \
--strip-prefix=Gst \ --strip-prefix=Gst \