From: Tim-Philipp Müller Date: Sat, 26 Nov 2011 12:12:59 +0000 (+0000) Subject: Merge remote-tracking branch 'origin/master' into 0.11 X-Git-Tag: RELEASE-0.11.2~327 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=32b14c6ed3501518aafa2cfe7aad3ccef7184bad;p=platform%2Fupstream%2Fgst-plugins-base.git Merge remote-tracking branch 'origin/master' into 0.11 Conflicts: ext/vorbis/gstvorbisenc.c gst/playback/gstdecodebin2.c gst/playback/gstplaysinkconvertbin.c gst/videorate/gstvideorate.c --- 32b14c6ed3501518aafa2cfe7aad3ccef7184bad diff --cc ext/ogg/gstoggmux.c index 922409b,06133e3..ebdcd31 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@@ -968,9 -987,13 +968,15 @@@ gst_ogg_mux_queue_pads (GstOggMux * ogg } else { GST_DEBUG_OBJECT (pad, "caps detected: %" GST_PTR_FORMAT, pad->map.caps); + + if (pad->map.is_sparse) { + GST_DEBUG_OBJECT (pad, "Pad is sparse, marking as such"); + gst_collect_pads2_set_waiting (ogg_mux->collect, + (GstCollectData2 *) pad, FALSE); + } } + if (caps) + gst_caps_unref (caps); } if (pad->have_type) diff --cc ext/vorbis/gstvorbisenc.c index 5a13ffd,45c871a..c699d5f --- a/ext/vorbis/gstvorbisenc.c +++ b/ext/vorbis/gstvorbisenc.c @@@ -63,9 -63,10 +63,9 @@@ static GstStaticPadTemplate vorbis_enc_ GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-float, " - "rate = (int) [ 1, 200000 ], " - "channels = (int) [ 1, 255 ], " "endianness = (int) BYTE_ORDER, " - "width = (int) 32") + GST_STATIC_CAPS ("audio/x-raw, " + "format = (string) " GST_AUDIO_NE (F32) ", " - "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 256 ]") ++ "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 255 ]") ); static GstStaticPadTemplate vorbis_enc_src_factory = @@@ -292,10 -308,11 +292,10 @@@ gst_vorbis_enc_generate_sink_caps (void gst_caps_append_structure (caps, structure); } - gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw-float", + gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw", + "format", G_TYPE_STRING, GST_AUDIO_NE (F32), "rate", GST_TYPE_INT_RANGE, 1, 200000, - "channels", GST_TYPE_INT_RANGE, 9, 256, NULL)); - "channels", GST_TYPE_INT_RANGE, 9, 255, - "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 32, - NULL)); ++ "channels", GST_TYPE_INT_RANGE, 9, 255, NULL)); return caps; } diff --cc gst-libs/gst/audio/Makefile.am index 7dc94d5,6e89c47..f49d405 --- a/gst-libs/gst/audio/Makefile.am +++ b/gst-libs/gst/audio/Makefile.am @@@ -78,9 -76,7 +78,8 @@@ GstAudio-@GST_MAJORMINOR@.gir: $(INTROS GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstAudio \ --nsversion=@GST_MAJORMINOR@ \ + --warn-all \ --strip-prefix=Gst \ - -DGST_USE_UNSTABLE_API \ -I$(top_srcdir)/gst-libs \ -I$(top_builddir)/gst-libs \ $(gir_cincludes) \ diff --cc gst/playback/gstdecodebin2.c index 0caa184,2d6f857..75de919 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@@ -2224,9 -2224,11 +2223,9 @@@ check_upstream_seekable (GstDecodeBin gst_query_unref (query); /* try harder to query upstream size if we didn't get it the first time */ - if (dbin->upstream_seekable && stop == -1) { + if (seekable && stop == -1) { - GstFormat fmt = GST_FORMAT_BYTES; - GST_DEBUG_OBJECT (dbin, "doing duration query to fix up unset stop"); - gst_pad_query_peer_duration (pad, &fmt, &stop); + gst_pad_peer_query_duration (pad, GST_FORMAT_BYTES, &stop); } /* if upstream doesn't know the size, it's likely that it's not seekable in diff --cc gst/playback/gstplaysinkconvertbin.c index ba5efaa,361b5d2..d5479e6 --- a/gst/playback/gstplaysinkconvertbin.c +++ b/gst/playback/gstplaysinkconvertbin.c @@@ -335,11 -321,25 +336,23 @@@ gst_play_sink_convert_bin_sink_setcaps GST_DEBUG_OBJECT (self, "raw %d, self->raw %d, blocked %d", raw, self->raw, gst_pad_is_blocked (self->sink_proxypad)); + if (raw) { - if (!self->raw && !gst_pad_is_blocked (self->sink_proxypad)) { - GST_DEBUG_OBJECT (self, "Changing caps from non-raw to raw"); - reconfigure = TRUE; - block_proxypad (self); + if (!gst_pad_is_blocked (self->sink_proxypad)) { + GstPad *target = gst_ghost_pad_get_target (GST_GHOST_PAD (self->sinkpad)); + - if (!self->raw || (target && !gst_pad_accept_caps (target, caps))) { ++ if (!self->raw || (target && !gst_pad_query_accept_caps (target, caps))) { + if (!self->raw) + GST_DEBUG_OBJECT (self, "Changing caps from non-raw to raw"); + else + GST_DEBUG_OBJECT (self, "Changing caps in an incompatible way"); + + reconfigure = TRUE; - gst_pad_set_blocked_async_full (self->sink_proxypad, TRUE, - (GstPadBlockCallback) pad_blocked_cb, gst_object_ref (self), - (GDestroyNotify) gst_object_unref); ++ block_proxypad (self); + } + + if (target) + gst_object_unref (target); } } else { if (self->raw && !gst_pad_is_blocked (self->sink_proxypad)) { @@@ -402,34 -408,25 +415,60 @@@ gst_play_sink_convert_bin_getcaps (GstP gst_object_unref (self); + GST_DEBUG_OBJECT (pad, "Returning caps %" GST_PTR_FORMAT, ret); + + return ret; + } + + static gboolean + gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps) + { + GstCaps *allowed_caps; + gboolean ret; + - allowed_caps = gst_pad_get_caps_reffed (pad); ++ allowed_caps = gst_pad_query_caps (pad, NULL); + /* FIXME 0.11: Should be a subset check now */ + ret = gst_caps_can_intersect (caps, allowed_caps); + gst_caps_unref (allowed_caps); + return ret; } +static gboolean +gst_play_sink_convert_bin_query (GstPad * pad, GstObject * parent, + GstQuery * query) +{ + gboolean res = FALSE; + + switch (GST_QUERY_TYPE (query)) { ++ case GST_QUERY_ACCEPT_CAPS: ++ { ++ GstCaps *caps; ++ ++ gst_query_parse_accept_caps (query, &caps); ++ gst_query_set_accept_caps_result (query, ++ gst_play_sink_convert_bin_acceptcaps (pad, caps)); ++ res = TRUE; ++ break; ++ } + case GST_QUERY_CAPS: + { + GstCaps *filter, *caps; + + gst_query_parse_caps (query, &filter); + caps = gst_play_sink_convert_bin_getcaps (pad, filter); + gst_query_set_caps_result (query, caps); + gst_caps_unref (caps); + res = TRUE; + break; + } + default: + res = gst_pad_query_default (pad, parent, query); + break; + } + return res; +} + void gst_play_sink_convert_bin_remove_elements (GstPlaySinkConvertBin * self) { diff --cc gst/videorate/gstvideorate.c index 3317af2,bf416fa..8313eb6 --- a/gst/videorate/gstvideorate.c +++ b/gst/videorate/gstvideorate.c @@@ -92,18 -92,21 +92,17 @@@ enu enum { - ARG_0, - ARG_IN, - ARG_OUT, - ARG_DUP, - ARG_DROP, - ARG_SILENT, - ARG_NEW_PREF, - ARG_SKIP_TO_FIRST, - ARG_DROP_ONLY, - ARG_AVERAGE_PERIOD, - ARG_MAX_RATE - /* FILL ME */ + PROP_0, + PROP_IN, + PROP_OUT, + PROP_DUP, + PROP_DROP, + PROP_SILENT, + PROP_NEW_PREF, + PROP_SKIP_TO_FIRST, + PROP_DROP_ONLY, + PROP_AVERAGE_PERIOD, - PROP_MAX_RATE, - PROP_FORCE_FPS - /* FILL ME */ ++ PROP_MAX_RATE }; static GstStaticPadTemplate gst_video_rate_src_template = @@@ -1163,36 -1228,40 +1162,36 @@@ gst_video_rate_get_property (GObject * GST_OBJECT_LOCK (videorate); switch (prop_id) { - case ARG_IN: + case PROP_IN: g_value_set_uint64 (value, videorate->in); break; - case ARG_OUT: + case PROP_OUT: g_value_set_uint64 (value, videorate->out); break; - case ARG_DUP: + case PROP_DUP: g_value_set_uint64 (value, videorate->dup); break; - case ARG_DROP: + case PROP_DROP: g_value_set_uint64 (value, videorate->drop); break; - case ARG_SILENT: + case PROP_SILENT: g_value_set_boolean (value, videorate->silent); break; - case ARG_NEW_PREF: + case PROP_NEW_PREF: g_value_set_double (value, videorate->new_pref); break; - case ARG_SKIP_TO_FIRST: + case PROP_SKIP_TO_FIRST: g_value_set_boolean (value, videorate->skip_to_first); break; - case ARG_DROP_ONLY: + case PROP_DROP_ONLY: g_value_set_boolean (value, videorate->drop_only); break; - case ARG_AVERAGE_PERIOD: + case PROP_AVERAGE_PERIOD: g_value_set_uint64 (value, videorate->average_period_set); break; - case ARG_MAX_RATE: + case PROP_MAX_RATE: g_value_set_int (value, g_atomic_int_get (&videorate->max_rate)); break; - case PROP_FORCE_FPS: - gst_value_set_fraction (value, videorate->force_fps_n, - videorate->force_fps_d); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break;