From: Sebastian Dröge Date: Thu, 20 Sep 2012 14:08:28 +0000 (+0200) Subject: eglglessink: Add ::get_caps() vfunc that returns the actually supported caps X-Git-Tag: 1.19.3~507^2~14655 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f9a5fc255d9c372f117cd10c0976a956958c671c;p=platform%2Fupstream%2Fgstreamer.git eglglessink: Add ::get_caps() vfunc that returns the actually supported caps --- diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index c5f657b..ec49f8e 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -224,6 +224,7 @@ static gboolean gst_eglglessink_start (GstBaseSink * sink); static gboolean gst_eglglessink_stop (GstBaseSink * sink); static GstFlowReturn gst_eglglessink_buffer_alloc (GstBaseSink * sink, guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); +static GstCaps *gst_eglglessink_getcaps (GstBaseSink * bsink); /* XOverlay interface cruft */ static gboolean gst_eglglessink_interface_supported @@ -1586,6 +1587,36 @@ gst_eglglessink_show_frame (GstVideoSink * vsink, GstBuffer * buf) return gst_eglglessink_render_and_display (eglglessink, buf); } +static GstCaps * +gst_eglglessink_getcaps (GstBaseSink * bsink) +{ + GstEglGlesSink *eglglessink; + GstCaps *ret = NULL; + + eglglessink = GST_EGLGLESSINK (bsink); + + g_mutex_lock (eglglessink->flow_lock); + if (eglglessink->egl_started) { + GList *l; + + ret = gst_caps_new_empty (); + + for (l = eglglessink->supported_fmts; l; l = l->next) { + GstEglGlesImageFmt *format = l->data; + + gst_caps_append (ret, gst_caps_ref (format->caps)); + } + } else { + ret = + gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD + (bsink))); + } + + g_mutex_unlock (eglglessink->flow_lock); + + return ret; +} + static gboolean gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps) { @@ -1766,6 +1797,7 @@ gst_eglglessink_class_init (GstEglGlesSinkClass * klass) gstbasesink_class->start = gst_eglglessink_start; gstbasesink_class->stop = gst_eglglessink_stop; gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_setcaps); + gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_getcaps); gstbasesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_eglglessink_buffer_alloc);