} 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)
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 =
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;
}
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) \
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
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)) {
gst_object_unref (self);
- allowed_caps = gst_pad_get_caps_reffed (pad);
+ 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_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)
{
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 =
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;