Add VideoUtil.FormatToTemplateCaps() to generate pad template caps
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 22 Sep 2009 07:37:55 +0000 (09:37 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 22 Sep 2009 07:37:55 +0000 (09:37 +0200)
gstreamer-sharp/VideoUtil.custom
gstreamer-sharp/glue/Makefile.am
gstreamer-sharp/glue/videoutil.c [new file with mode: 0644]

index 3b93f7b..45ed281 100644 (file)
@@ -22,3 +22,14 @@ public static Gst.Fourcc FormatToFourcc (Gst.Video.VideoFormat format) {
 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);
+}
index 48945b7..71212b1 100644 (file)
@@ -20,7 +20,8 @@ libgstreamersharpglue_0_10_la_SOURCES =       \
        tunernorm.c \
        adapter.c \
        controller.c \
-       controlsource.c
+       controlsource.c \
+       videoutil.c
 
 nodist_libgstreamersharpglue_0_10_la_SOURCES = generated.c 
 
diff --git a/gstreamer-sharp/glue/videoutil.c b/gstreamer-sharp/glue/videoutil.c
new file mode 100644 (file)
index 0000000..f377d76
--- /dev/null
@@ -0,0 +1,44 @@
+#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;
+}