public static Gst.Video.VideoFormat FormatFromFourcc (Gst.Fourcc fourcc) {
return FormatFromFourcc (fourcc.Val);
}
+
+[DllImport ("gstreamersharpglue-0.10.dll") ]
+static extern IntPtr gstsharp_gst_videoutil_get_template_caps (Gst.Video.VideoFormat fmt);
+
+public static Gst.Caps FormatToTemplateCaps (Gst.Video.VideoFormat fmt) {
+ IntPtr raw_ret = gstsharp_gst_videoutil_get_template_caps (fmt);
+ if (raw_ret == IntPtr.Zero)
+ return null;
+
+ return (Gst.Caps) Gst.GLib.Opaque.GetOpaque (raw_ret, typeof (Gst.Caps), true);
+}
--- /dev/null
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+GstCaps *
+gstsharp_gst_videoutil_get_template_caps (GstVideoFormat fmt) {
+ if (gst_video_format_is_yuv (fmt)) {
+ guint32 fourcc = gst_video_format_to_fourcc (fmt);
+ GstCaps *caps;
+
+ if (fourcc == 0)
+ return NULL;
+
+ caps = gst_caps_from_string (GST_VIDEO_CAPS_YUV ("AYUV"));
+ gst_caps_set_simple (caps, fourcc, GST_TYPE_FOURCC, fourcc, NULL);
+ return caps;
+ } else {
+ switch (fmt) {
+ case GST_VIDEO_FORMAT_ABGR:
+ return gst_caps_from_string (GST_VIDEO_CAPS_ABGR);
+ case GST_VIDEO_FORMAT_ARGB:
+ return gst_caps_from_string (GST_VIDEO_CAPS_ARGB);
+ case GST_VIDEO_FORMAT_BGR:
+ return gst_caps_from_string (GST_VIDEO_CAPS_BGR);
+ case GST_VIDEO_FORMAT_BGRA:
+ return gst_caps_from_string (GST_VIDEO_CAPS_BGRA);
+ case GST_VIDEO_FORMAT_BGRx:
+ return gst_caps_from_string (GST_VIDEO_CAPS_BGRx);
+ case GST_VIDEO_FORMAT_RGB:
+ return gst_caps_from_string (GST_VIDEO_CAPS_RGB);
+ case GST_VIDEO_FORMAT_RGBA:
+ return gst_caps_from_string (GST_VIDEO_CAPS_RGBA);
+ case GST_VIDEO_FORMAT_RGBx:
+ return gst_caps_from_string (GST_VIDEO_CAPS_RGBx);
+ case GST_VIDEO_FORMAT_xBGR:
+ return gst_caps_from_string (GST_VIDEO_CAPS_xBGR);
+ case GST_VIDEO_FORMAT_xRGB:
+ return gst_caps_from_string (GST_VIDEO_CAPS_xRGB);
+ default:
+ return NULL;
+ }
+ }
+
+ return NULL;
+}