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 GstCaps * gst_oss_sink_getcaps (GstBaseSink * bsink) { GstOssSink *osssink; GstCaps *caps; osssink = GST_OSSSINK (bsink); if (osssink->fd == -1) { caps = gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink))); } else if (osssink->probed_caps) { caps = gst_caps_copy (osssink->probed_caps); } else { caps = gst_oss_helper_probe_caps (osssink->fd); if (caps && !gst_caps_is_empty (caps)) { osssink->probed_caps = gst_caps_copy (caps); } } return caps; }