static GstCaps * gst_shmdata_src_getcaps (GstBaseSrc * src, GstCaps * filter) { GstShmdataSrc *shmdatasrc; GstCaps *caps, *result; shmdatasrc = GST_SHMDATA_SRC (src); GST_OBJECT_LOCK (src); if ((caps = shmdatasrc->caps)) gst_caps_ref (caps); GST_OBJECT_UNLOCK (src); if (caps) { if (filter) { result = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); } else { result = caps; } } else { result = (filter) ? gst_caps_ref (filter) : gst_caps_new_any (); } return result; }
static GstEncodingProfile * common_creation (GType objtype, GstCaps * format, const gchar * preset, const gchar * name, const gchar * description, GstCaps * restriction, guint presence) { GstEncodingProfile *prof; prof = (GstEncodingProfile *) g_object_new (objtype, NULL); if (name) prof->name = g_strdup (name); if (description) prof->description = g_strdup (description); if (preset) prof->preset = g_strdup (preset); if (format) prof->format = gst_caps_ref (format); if (restriction) prof->restriction = gst_caps_ref (restriction); prof->presence = presence; prof->preset_name = NULL; prof->allow_dynamic_output = TRUE; prof->enabled = TRUE; return prof; }
static GstCaps * gst_dshowvideosrc_get_caps (GstBaseSrc * basesrc, GstCaps * filter) { GstDshowVideoSrc *src = GST_DSHOWVIDEOSRC (basesrc); GstCaps *caps; if (src->caps) { caps = gst_caps_ref (src->caps); } else { caps = gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (src)); } if (caps) { GstCaps *filtcaps; if (filter) { filtcaps = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); } else { filtcaps = gst_caps_ref (caps); } gst_caps_unref (caps); return filtcaps; } return NULL; }
static GstCaps * gst_alsasink_getcaps (GstBaseSink * bsink) { GstElementClass *element_class; GstPadTemplate *pad_template; GstAlsaSink *sink = GST_ALSA_SINK (bsink); GstCaps *caps; if (sink->handle == NULL) { GST_DEBUG_OBJECT (sink, "device not open, using template caps"); return NULL; /* base class will get template caps for us */ } if (sink->cached_caps) { GST_LOG_OBJECT (sink, "Returning cached caps"); return gst_caps_ref (sink->cached_caps); } element_class = GST_ELEMENT_GET_CLASS (sink); pad_template = gst_element_class_get_pad_template (element_class, "sink"); g_return_val_if_fail (pad_template != NULL, NULL); caps = gst_alsa_probe_supported_formats (GST_OBJECT (sink), sink->device, sink->handle, gst_pad_template_get_caps (pad_template)); if (caps) { sink->cached_caps = gst_caps_ref (caps); } GST_INFO_OBJECT (sink, "returning caps %" GST_PTR_FORMAT, caps); return caps; }
static GstCaps * gst_app_src_internal_get_caps (GstBaseSrc * bsrc, GstCaps * filter) { GstAppSrc *appsrc = GST_APP_SRC (bsrc); GstCaps *caps; GST_OBJECT_LOCK (appsrc); if ((caps = appsrc->priv->caps)) gst_caps_ref (caps); GST_OBJECT_UNLOCK (appsrc); if (filter) { if (caps) { GstCaps *intersection = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); caps = intersection; } else { caps = gst_caps_ref (filter); } } GST_DEBUG_OBJECT (appsrc, "caps: %" GST_PTR_FORMAT, caps); return caps; }
gboolean gst_v4l2_transform_register (GstPlugin * plugin, const gchar * basename, const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps) { GTypeQuery type_query; GTypeInfo type_info = { 0, }; GType type, subtype; gchar *type_name; GstV4l2TransformCData *cdata; cdata = g_new0 (GstV4l2TransformCData, 1); cdata->device = g_strdup (device_path); cdata->sink_caps = gst_caps_ref (sink_caps); cdata->src_caps = gst_caps_ref (src_caps); type = gst_v4l2_transform_get_type (); g_type_query (type, &type_query); memset (&type_info, 0, sizeof (type_info)); type_info.class_size = type_query.class_size; type_info.instance_size = type_query.instance_size; type_info.class_init = gst_v4l2_transform_subclass_init; type_info.class_data = cdata; type_info.instance_init = gst_v4l2_transform_subinstance_init; type_name = g_strdup_printf ("v4l2%sconvert", basename); subtype = g_type_register_static (type, type_name, &type_info, 0); gst_element_register (plugin, type_name, GST_RANK_NONE, subtype); g_free (type_name); return TRUE; }
static GstCaps * gst_oss_src_getcaps (GstBaseSrc * bsrc) { GstOssSrc *osssrc; GstCaps *caps; osssrc = GST_OSS_SRC (bsrc); if (osssrc->fd == -1) { GST_DEBUG_OBJECT (osssrc, "device not open, using template caps"); return NULL; /* base class will get template caps for us */ } if (osssrc->probed_caps) { GST_LOG_OBJECT (osssrc, "Returning cached caps"); return gst_caps_ref (osssrc->probed_caps); } caps = gst_oss_helper_probe_caps (osssrc->fd); if (caps) { osssrc->probed_caps = gst_caps_ref (caps); } GST_INFO_OBJECT (osssrc, "returning caps %" GST_PTR_FORMAT, caps); return caps; }
static GstCaps * gst_oss_sink_getcaps (GstBaseSink * bsink, GstCaps * filter) { GstOssSink *osssink; GstCaps *caps; osssink = GST_OSSSINK (bsink); if (osssink->fd == -1) { caps = gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink)); } else if (osssink->probed_caps) { caps = gst_caps_ref (osssink->probed_caps); } else { caps = gst_oss_helper_probe_caps (osssink->fd); if (caps && !gst_caps_is_empty (caps)) { osssink->probed_caps = gst_caps_ref (caps); } } if (filter && caps) { GstCaps *intersection; intersection = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); return intersection; } else { return caps; } }
static void gst_frei0r_mixer_class_init (GstFrei0rMixerClass * klass, GstFrei0rMixerClassData * class_data) { GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *gstelement_class = (GstElementClass *) klass; GstPadTemplate *templ; GstCaps *caps; gchar *author; klass->ftable = &class_data->ftable; klass->info = &class_data->info; gobject_class->finalize = gst_frei0r_mixer_finalize; gobject_class->set_property = gst_frei0r_mixer_set_property; gobject_class->get_property = gst_frei0r_mixer_get_property; klass->n_properties = klass->info->num_params; klass->properties = g_new0 (GstFrei0rProperty, klass->n_properties); gst_frei0r_klass_install_properties (gobject_class, klass->ftable, klass->properties, klass->n_properties); author = g_strdup_printf ("Sebastian Dröge <*****@*****.**>, %s", class_data->info.author); gst_element_class_set_details_simple (gstelement_class, class_data->info.name, "Filter/Editor/Video", class_data->info.explanation, author); g_free (author); caps = gst_frei0r_caps_from_color_model (class_data->info.color_model); templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, gst_caps_ref (caps)); gst_element_class_add_pad_template (gstelement_class, templ); templ = gst_pad_template_new ("sink_0", GST_PAD_SINK, GST_PAD_ALWAYS, gst_caps_ref (caps)); gst_element_class_add_pad_template (gstelement_class, templ); templ = gst_pad_template_new ("sink_1", GST_PAD_SINK, GST_PAD_ALWAYS, gst_caps_ref (caps)); gst_element_class_add_pad_template (gstelement_class, templ); if (klass->info->plugin_type == F0R_PLUGIN_TYPE_MIXER3) { templ = gst_pad_template_new ("sink_2", GST_PAD_SINK, GST_PAD_ALWAYS, gst_caps_ref (caps)); gst_element_class_add_pad_template (gstelement_class, templ); } gst_caps_unref (caps); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_frei0r_mixer_change_state); }
static gboolean gst_v4l2_transform_query (GstBaseTransform * trans, GstPadDirection direction, GstQuery * query) { GstV4l2Transform *self = GST_V4L2_TRANSFORM (trans); gboolean ret = TRUE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CAPS:{ GstCaps *filter, *caps = NULL, *result = NULL; GstPad *pad, *otherpad; gst_query_parse_caps (query, &filter); if (direction == GST_PAD_SRC) { pad = GST_BASE_TRANSFORM_SRC_PAD (trans); otherpad = GST_BASE_TRANSFORM_SINK_PAD (trans); if (self->probed_srccaps) caps = gst_caps_ref (self->probed_srccaps); } else { pad = GST_BASE_TRANSFORM_SINK_PAD (trans); otherpad = GST_BASE_TRANSFORM_SRC_PAD (trans); if (self->probed_sinkcaps) caps = gst_caps_ref (self->probed_sinkcaps); } if (!caps) caps = gst_pad_get_pad_template_caps (pad); if (filter) { GstCaps *tmp = caps; caps = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (tmp); } result = gst_pad_peer_query_caps (otherpad, caps); result = gst_caps_make_writable (result); gst_caps_append (result, caps); GST_DEBUG_OBJECT (self, "Returning %s caps %" GST_PTR_FORMAT, GST_PAD_NAME (pad), result); gst_query_set_caps_result (query, result); gst_caps_unref (result); break; } default: ret = GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction, query); break; } return ret; }
static GstCaps * gst_alsasink_getcaps (GstBaseSink * bsink, GstCaps * filter) { GstElementClass *element_class; GstPadTemplate *pad_template; GstAlsaSink *sink = GST_ALSA_SINK (bsink); GstCaps *caps, *templ_caps; if (sink->handle == NULL) { GST_DEBUG_OBJECT (sink, "device not open, using template caps"); return NULL; /* base class will get template caps for us */ } if (sink->cached_caps) { if (filter) { caps = gst_caps_intersect_full (filter, sink->cached_caps, GST_CAPS_INTERSECT_FIRST); GST_LOG_OBJECT (sink, "Returning cached caps %" GST_PTR_FORMAT " with " "filter %" GST_PTR_FORMAT " applied: %" GST_PTR_FORMAT, sink->cached_caps, filter, caps); return caps; } else { GST_LOG_OBJECT (sink, "Returning cached caps %" GST_PTR_FORMAT, sink->cached_caps); return gst_caps_ref (sink->cached_caps); } } element_class = GST_ELEMENT_GET_CLASS (sink); pad_template = gst_element_class_get_pad_template (element_class, "sink"); g_return_val_if_fail (pad_template != NULL, NULL); templ_caps = gst_pad_template_get_caps (pad_template); caps = gst_alsa_probe_supported_formats (GST_OBJECT (sink), sink->device, sink->handle, templ_caps); gst_caps_unref (templ_caps); if (caps) { sink->cached_caps = gst_caps_ref (caps); } GST_INFO_OBJECT (sink, "returning caps %" GST_PTR_FORMAT, caps); if (filter) { GstCaps *intersection; intersection = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); return intersection; } else { return caps; } }
static GstCaps * gst_alsasrc_getcaps (GstBaseSrc * bsrc, GstCaps * filter) { GstElementClass *element_class; GstPadTemplate *pad_template; GstAlsaSrc *src; GstCaps *caps, *templ_caps; src = GST_ALSA_SRC (bsrc); if (src->handle == NULL) { GST_DEBUG_OBJECT (src, "device not open, using template caps"); return GST_BASE_SRC_CLASS (parent_class)->get_caps (bsrc, filter); } if (src->cached_caps) { GST_LOG_OBJECT (src, "Returning cached caps"); if (filter) return gst_caps_intersect_full (filter, src->cached_caps, GST_CAPS_INTERSECT_FIRST); else return gst_caps_ref (src->cached_caps); } element_class = GST_ELEMENT_GET_CLASS (src); pad_template = gst_element_class_get_pad_template (element_class, "src"); g_return_val_if_fail (pad_template != NULL, NULL); templ_caps = gst_pad_template_get_caps (pad_template); GST_INFO_OBJECT (src, "template caps %" GST_PTR_FORMAT, templ_caps); caps = gst_alsa_probe_supported_formats (GST_OBJECT (src), src->device, src->handle, templ_caps); gst_caps_unref (templ_caps); if (caps) { src->cached_caps = gst_caps_ref (caps); } GST_INFO_OBJECT (src, "returning caps %" GST_PTR_FORMAT, caps); if (filter) { GstCaps *intersection; intersection = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (caps); return intersection; } else { return caps; } }
static GstCaps * gst_jpeg_parse_src_getcaps (GstPad * pad) { GstCaps *result; if ((result = GST_PAD_CAPS (pad))) { result = gst_caps_ref (result); GST_DEBUG_OBJECT (pad, "using pad caps %" GST_PTR_FORMAT, result); } else { result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad))); GST_DEBUG_OBJECT (pad, "using pad template caps %" GST_PTR_FORMAT, result); } return result; }
static GstCaps * gst_v4l2sink_get_caps (GstBaseSink * bsink) { GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); GstCaps *ret; GSList *walk; GSList *formats; if (!GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { /* FIXME: copy? */ GST_DEBUG_OBJECT (v4l2sink, "device is not open"); return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (v4l2sink))); } if (v4l2sink->probed_caps) { LOG_CAPS (v4l2sink, v4l2sink->probed_caps); return gst_caps_ref (v4l2sink->probed_caps); } formats = gst_v4l2_object_get_format_list (v4l2sink->v4l2object); ret = gst_caps_new_empty (); for (walk = v4l2sink->v4l2object->formats; walk; walk = walk->next) { struct v4l2_fmtdesc *format; GstStructure *template;
static GstCaps * gst_capsfilter_transform_caps (GstBaseTransform * base, GstPadDirection direction, GstCaps * caps, GstCaps * filter) { GstCapsFilter *capsfilter = GST_CAPSFILTER (base); GstCaps *ret, *filter_caps, *tmp; GST_OBJECT_LOCK (capsfilter); filter_caps = gst_caps_ref (capsfilter->filter_caps); GST_OBJECT_UNLOCK (capsfilter); if (filter) { tmp = gst_caps_intersect_full (filter, filter_caps, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (filter_caps); filter_caps = tmp; } ret = gst_caps_intersect_full (filter_caps, caps, GST_CAPS_INTERSECT_FIRST); GST_DEBUG_OBJECT (capsfilter, "input: %" GST_PTR_FORMAT, caps); GST_DEBUG_OBJECT (capsfilter, "filter: %" GST_PTR_FORMAT, filter); GST_DEBUG_OBJECT (capsfilter, "caps filter: %" GST_PTR_FORMAT, filter_caps); GST_DEBUG_OBJECT (capsfilter, "intersect: %" GST_PTR_FORMAT, ret); gst_caps_unref (filter_caps); return ret; }
static GstCaps * gst_v4l2src_get_caps (GstBaseSrc * src, GstCaps * filter) { GstV4l2Src *v4l2src; GstV4l2Object *obj; GstCaps *ret; GSList *walk; GSList *formats; v4l2src = GST_V4L2SRC (src); obj = v4l2src->v4l2object; if (!GST_V4L2_IS_OPEN (obj)) { return gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (v4l2src)); } if (v4l2src->probed_caps) return gst_caps_ref (v4l2src->probed_caps); formats = gst_v4l2_object_get_format_list (obj); ret = gst_caps_new_empty (); for (walk = formats; walk; walk = walk->next) { struct v4l2_fmtdesc *format; GstStructure *template;
static void gst_type_find_element_emit_have_type (GstTypeFindElement * typefind, guint probability, GstCaps * caps) { GstEvent *event; /* Update caps field immediatly so that caps queries and properties can be * honored in all "have-type" signal handlers. */ GST_OBJECT_LOCK (typefind); if (typefind->caps) gst_caps_unref (typefind->caps); typefind->caps = gst_caps_ref (caps); GST_OBJECT_UNLOCK (typefind); /* Only store the caps event at this point. We give signal handlers * the chance to look at the caps before they are sent downstream. * They are only forwarded downstream later in the default signal * handler after all application signal handlers */ event = gst_event_new_caps (caps); gst_pad_store_sticky_event (typefind->src, event); gst_event_unref (event); g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, probability, caps); }
static GstCaps * gst_v4l2src_get_caps (GstBaseSrc * src) { GstV4l2Src *v4l2src = GST_V4L2SRC (src); GstCaps *ret; GSList *walk; GSList *formats; if (!GST_V4L2_IS_OPEN (v4l2src->v4l2object)) { /* FIXME: copy? */ return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (v4l2src))); } if (v4l2src->probed_caps) return gst_caps_ref (v4l2src->probed_caps); formats = gst_v4l2_object_get_format_list (v4l2src->v4l2object); ret = gst_caps_new_empty (); for (walk = formats; walk; walk = walk->next) { struct v4l2_fmtdesc *format; GstStructure *template;
static GstCaps * gst_aspect_ratio_crop_get_caps (GstPad * pad) { GstPad *peer; GstAspectRatioCrop *aspect_ratio_crop; GstCaps *return_caps; aspect_ratio_crop = GST_ASPECT_RATIO_CROP (gst_pad_get_parent (pad)); g_mutex_lock (aspect_ratio_crop->crop_lock); peer = gst_pad_get_peer (aspect_ratio_crop->sink); if (peer == NULL) { return_caps = gst_static_pad_template_get_caps (&src_template); gst_caps_ref (return_caps); } else { GstCaps *peer_caps; peer_caps = gst_pad_get_caps (peer); return_caps = gst_aspect_ratio_crop_transform_caps (aspect_ratio_crop, peer_caps); gst_caps_unref (peer_caps); gst_object_unref (peer); } g_mutex_unlock (aspect_ratio_crop->crop_lock); gst_object_unref (aspect_ratio_crop); return return_caps; }
static GstCaps * gst_frei0r_mixer_get_caps (GstFrei0rMixer * self, GstPad * pad, GstCaps * filter) { GstCaps *caps = NULL; if (self->caps) { caps = gst_caps_ref (self->caps); } else { GstCaps *tmp; caps = gst_pad_get_pad_template_caps (self->src); if (filter) { tmp = caps; caps = gst_caps_intersect_full (tmp, filter, GST_CAPS_INTERSECT_FIRST); gst_caps_unref (tmp); } caps = gst_frei0r_mixer_query_pad_caps (self->src, pad, caps); caps = gst_frei0r_mixer_query_pad_caps (self->sink0, pad, caps); caps = gst_frei0r_mixer_query_pad_caps (self->sink1, pad, caps); if (self->sink2) caps = gst_frei0r_mixer_query_pad_caps (self->sink2, pad, caps); } return caps; }
static void bt_test_audio_synth_negotiate (GstBtAudioSynth * base, GstCaps * caps) { BtTestAudioSynth *self = (BtTestAudioSynth *) base; self->caps = gst_caps_ref (caps); }
static gboolean gst_capsfilter_accept_caps (GstBaseTransform * base, GstPadDirection direction, GstCaps * caps) { GstCapsFilter *capsfilter = GST_CAPSFILTER (base); GstCaps *filter_caps; gboolean ret; GST_OBJECT_LOCK (capsfilter); filter_caps = gst_caps_ref (capsfilter->filter_caps); GST_OBJECT_UNLOCK (capsfilter); ret = gst_caps_can_intersect (caps, filter_caps); GST_DEBUG_OBJECT (capsfilter, "can intersect: %d", ret); if (ret) { /* if we can intersect, see if the other end also accepts */ if (direction == GST_PAD_SRC) ret = gst_pad_peer_query_accept_caps (GST_BASE_TRANSFORM_SINK_PAD (base), caps); else ret = gst_pad_peer_query_accept_caps (GST_BASE_TRANSFORM_SRC_PAD (base), caps); GST_DEBUG_OBJECT (capsfilter, "peer accept: %d", ret); } gst_caps_unref (filter_caps); return ret; }
static gboolean gst_type_find_element_activate_src_mode (GstPad * pad, GstObject * parent, GstPadMode mode, gboolean active) { gboolean res; GstTypeFindElement *typefind; typefind = GST_TYPE_FIND_ELEMENT (parent); switch (mode) { case GST_PAD_MODE_PULL: /* make sure our task stops pushing, we can't call _stop here because this * activation might happen from the streaming thread. */ gst_pad_pause_task (typefind->sink); res = gst_pad_activate_mode (typefind->sink, mode, active); if (active && res && typefind->caps) { GstCaps *caps; GST_OBJECT_LOCK (typefind); caps = gst_caps_ref (typefind->caps); GST_OBJECT_UNLOCK (typefind); res = gst_pad_set_caps (typefind->src, caps); gst_caps_unref (caps); } break; default: res = TRUE; break; } return res; }
QtCamGstSample::QtCamGstSample(GstBuffer *buffer, GstCaps *caps) : d_ptr(new QtCamGstSamplePrivate) { d_ptr->buffer = gst_buffer_ref(buffer); d_ptr->caps = gst_caps_ref(caps); #if GST_CHECK_VERSION(1,0,0) d_ptr->mapped = false; #endif d_ptr->width = -1; d_ptr->height = -1; d_ptr->format = GST_VIDEO_FORMAT_UNKNOWN; #if GST_CHECK_VERSION(1,0,0) GstVideoInfo info; if (!gst_video_info_from_caps (&info, d_ptr->caps)) { qCritical() << "Failed to parse GStreamer caps"; } else { d_ptr->width = info.width; d_ptr->height = info.height; d_ptr->format = info.finfo->format; } #else if (!gst_video_format_parse_caps (d_ptr->caps, &d_ptr->format, &d_ptr->width, &d_ptr->height)) { qCritical() << "Failed to parse GStreamer caps"; } #endif }
static GstCaps * gst_rtp_pt_demux_get_caps (GstRtpPtDemux * rtpdemux, guint pt) { GstCaps *caps; GValue ret = { 0 }; GValue args[2] = { {0}, {0} }; /* figure out the caps */ g_value_init (&args[0], GST_TYPE_ELEMENT); g_value_set_object (&args[0], rtpdemux); g_value_init (&args[1], G_TYPE_UINT); g_value_set_uint (&args[1], pt); g_value_init (&ret, GST_TYPE_CAPS); g_value_set_boxed (&ret, NULL); g_signal_emitv (args, gst_rtp_pt_demux_signals[SIGNAL_REQUEST_PT_MAP], 0, &ret); g_value_unset (&args[0]); g_value_unset (&args[1]); caps = g_value_dup_boxed (&ret); g_value_unset (&ret); if (caps == NULL) { caps = GST_PAD_CAPS (rtpdemux->sink); if (caps) gst_caps_ref (caps); } GST_DEBUG ("pt %d, got caps %" GST_PTR_FORMAT, pt, caps); return caps; }
QtCamGstSamplePrivate(GstBuffer *b, GstCaps *c) : buffer(gst_buffer_ref(b)), caps(gst_caps_ref(c)), width(-1), height(-1), format(GST_VIDEO_FORMAT_UNKNOWN) { #if GST_CHECK_VERSION(1,0,0) mapped = false; #endif #if GST_CHECK_VERSION(1,0,0) GstVideoInfo info; if (!gst_video_info_from_caps (&info, caps)) { qCritical() << "Failed to parse GStreamer caps"; } else { width = info.width; height = info.height; format = info.finfo->format; } #else if (!gst_video_format_parse_caps (caps, &format, &width, &height)) { qCritical() << "Failed to parse GStreamer caps"; } #endif }
/** * gst_dvbsub_overlay_intersect_by_feature: * * Creates a new #GstCaps based on the following filtering rule. * * For each individual caps contained in given caps, if the * caps uses the given caps feature, keep a version of the caps * with the feature and an another one without. Otherwise, intersect * the caps with the given filter. * * Returns: the new #GstCaps */ static GstCaps * gst_dvbsub_overlay_intersect_by_feature (GstCaps * caps, const gchar * feature, GstCaps * filter) { int i, caps_size; GstCaps *new_caps; new_caps = gst_caps_new_empty (); caps_size = gst_caps_get_size (caps); for (i = 0; i < caps_size; i++) { GstStructure *caps_structure = gst_caps_get_structure (caps, i); GstCapsFeatures *caps_features = gst_caps_features_copy (gst_caps_get_features (caps, i)); GstCaps *filtered_caps; GstCaps *simple_caps = gst_caps_new_full (gst_structure_copy (caps_structure), NULL); gst_caps_set_features (simple_caps, 0, caps_features); if (gst_caps_features_contains (caps_features, feature)) { gst_caps_append (new_caps, gst_caps_copy (simple_caps)); gst_caps_features_remove (caps_features, feature); filtered_caps = gst_caps_ref (simple_caps); } else { filtered_caps = gst_caps_intersect_full (simple_caps, filter, GST_CAPS_INTERSECT_FIRST); } gst_caps_unref (simple_caps); gst_caps_append (new_caps, filtered_caps); } return new_caps; }
static gboolean gst_goo_decgsmfr_check_fixed_src_caps (GstGooAudioFilter* filter) { GstGooDecGsmFr *self = GST_GOO_DECGSMFR (filter); OMX_AUDIO_PARAM_PCMMODETYPE *param; GstCaps *src_caps; param = GOO_TI_GSMFRDEC_GET_OUTPUT_PORT_PARAM (GST_GOO_AUDIO_FILTER (self)->component); src_caps = gst_caps_new_simple ( "audio/x-raw-int", "endianness", G_TYPE_INT, G_BYTE_ORDER, "signed", G_TYPE_BOOLEAN, TRUE, "width", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16, "rate", G_TYPE_INT, 8000, "channels", G_TYPE_INT, 1, NULL ); filter->src_caps = gst_caps_ref (src_caps); gst_pad_set_caps (GST_GOO_AUDIO_FILTER (self)->srcpad, src_caps); gst_caps_unref (src_caps); return TRUE; }
static void gst_audiomixer_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstAudioMixer *audiomixer = GST_AUDIO_MIXER (object); switch (prop_id) { case PROP_FILTER_CAPS:{ GstCaps *new_caps = NULL; GstCaps *old_caps; const GstCaps *new_caps_val = gst_value_get_caps (value); if (new_caps_val != NULL) { new_caps = (GstCaps *) new_caps_val; gst_caps_ref (new_caps); } GST_OBJECT_LOCK (audiomixer); old_caps = audiomixer->filter_caps; audiomixer->filter_caps = new_caps; GST_OBJECT_UNLOCK (audiomixer); if (old_caps) gst_caps_unref (old_caps); GST_DEBUG_OBJECT (audiomixer, "set new caps %" GST_PTR_FORMAT, new_caps); break; } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/** * gst_buffer_copy_metadata: * @dest: a destination #GstBuffer * @src: a source #GstBuffer * @flags: flags indicating what metadata fields should be copied. * * Copies the metadata from @src into @dest. The data, size and mallocdata * fields are not copied. * * @flags indicate which fields will be copied. Use #GST_BUFFER_COPY_ALL to copy * all the metadata fields. * * This function is typically called from a custom buffer copy function after * creating @dest and setting the data, size, mallocdata. * * Since: 0.10.13 */ void gst_buffer_copy_metadata (GstBuffer * dest, const GstBuffer * src, GstBufferCopyFlags flags) { g_return_if_fail (dest != NULL); g_return_if_fail (src != NULL); GST_CAT_LOG (GST_CAT_BUFFER, "copy %p to %p", src, dest); if (flags & GST_BUFFER_COPY_FLAGS) { guint mask; /* copy relevant flags */ mask = GST_BUFFER_FLAG_PREROLL | GST_BUFFER_FLAG_IN_CAPS | GST_BUFFER_FLAG_DELTA_UNIT | GST_BUFFER_FLAG_DISCONT | GST_BUFFER_FLAG_GAP; GST_MINI_OBJECT_FLAGS (dest) |= GST_MINI_OBJECT_FLAGS (src) & mask; } if (flags & GST_BUFFER_COPY_TIMESTAMPS) { GST_BUFFER_TIMESTAMP (dest) = GST_BUFFER_TIMESTAMP (src); GST_BUFFER_DURATION (dest) = GST_BUFFER_DURATION (src); GST_BUFFER_OFFSET (dest) = GST_BUFFER_OFFSET (src); GST_BUFFER_OFFSET_END (dest) = GST_BUFFER_OFFSET_END (src); } if (flags & GST_BUFFER_COPY_CAPS) { if (GST_BUFFER_CAPS (src)) GST_BUFFER_CAPS (dest) = gst_caps_ref (GST_BUFFER_CAPS (src)); else GST_BUFFER_CAPS (dest) = NULL; } }