summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gstreamer-sharp/VideoUtil.custom11
-rw-r--r--gstreamer-sharp/glue/Makefile.am3
-rw-r--r--gstreamer-sharp/glue/videoutil.c44
3 files changed, 57 insertions, 1 deletions
diff --git a/gstreamer-sharp/VideoUtil.custom b/gstreamer-sharp/VideoUtil.custom
index 3b93f7b..45ed281 100644
--- a/gstreamer-sharp/VideoUtil.custom
+++ b/gstreamer-sharp/VideoUtil.custom
@@ -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);
+}
diff --git a/gstreamer-sharp/glue/Makefile.am b/gstreamer-sharp/glue/Makefile.am
index 48945b7..71212b1 100644
--- a/gstreamer-sharp/glue/Makefile.am
+++ b/gstreamer-sharp/glue/Makefile.am
@@ -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
index 0000000..f377d76
--- /dev/null
+++ b/gstreamer-sharp/glue/videoutil.c
@@ -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;
+}