[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gstreamer-cvs
Subject:    [gst-cvs] gst-plugins-bad: videosignal: add support for all planar
From:       cymacs () kemper ! freedesktop ! org (René Stadler)
Date:       2009-09-26 16:15:26
Message-ID: 20090926161526.4CEDC10051 () kemper ! freedesktop ! org
[Download RAW message or body]

Module: gst-plugins-bad
Branch: master
Commit: d171d713f3eabfe891fab59e94eca352b985c049
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=d171d713f3eabfe891fab59e94eca352b985c049


Author: René Stadler <mail@renestadler.de>
Date:   Fri Sep  4 22:30:27 2009 +0300

videosignal: add support for all planar YUV formats, using gstvideo

---

 gst/videosignal/gstvideodetect.c |   20 ++++++++++++--------
 gst/videosignal/gstvideodetect.h |    3 ++-
 gst/videosignal/gstvideomark.c   |   20 ++++++++++++--------
 gst/videosignal/gstvideomark.h   |    3 ++-
 4 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/gst/videosignal/gstvideodetect.c b/gst/videosignal/gstvideodetect.c
index 3cdf3c6..942392f 100644
--- a/gst/videosignal/gstvideodetect.c
+++ b/gst/videosignal/gstvideodetect.c
@@ -145,14 +145,14 @@ static GstStaticPadTemplate gst_video_detect_src_template =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12 }"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12, Y41B, Y42B, Y444 }"))
     );
 
 static GstStaticPadTemplate gst_video_detect_sink_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12 }"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12, Y41B, Y42B, Y444 }"))
     );
 
 static GstVideoFilterClass *parent_class = NULL;
@@ -163,6 +163,7 @@ gst_video_detect_set_caps (GstBaseTransform * btrans, GstCaps * \
incaps,  {
   GstVideoDetect *vf;
   GstStructure *in_s;
+  guint32 fourcc;
   gboolean ret;
 
   vf = GST_VIDEO_DETECT (btrans);
@@ -171,13 +172,14 @@ gst_video_detect_set_caps (GstBaseTransform * btrans, GstCaps * \
incaps,  
   ret = gst_structure_get_int (in_s, "width", &vf->width);
   ret &= gst_structure_get_int (in_s, "height", &vf->height);
-  ret &= gst_structure_get_fourcc (in_s, "format", &vf->format);
+  ret &= gst_structure_get_fourcc (in_s, "format", &fourcc);
+
+  if (ret)
+    vf->format = gst_video_format_from_fourcc (fourcc);
 
   return ret;
 }
 
-#define GST_VIDEO_I420_Y_ROWSTRIDE(width) (GST_ROUND_UP_4(width))
-
 static void
 gst_video_detect_post_message (GstVideoDetect * videodetect, GstBuffer * buffer,
     guint data)
@@ -227,8 +229,9 @@ gst_video_detect_calc_brightness (GstVideoDetect * videodetect, \
guint8 * data,  }
 
 static void
-gst_video_detect_420 (GstVideoDetect * videodetect, GstBuffer * buffer)
+gst_video_detect_yuv (GstVideoDetect * videodetect, GstBuffer * buffer)
 {
+  GstVideoFormat format;
   gdouble brightness;
   gint i, pw, ph, stride, width, height;
   gint req_width, req_height;
@@ -237,12 +240,13 @@ gst_video_detect_420 (GstVideoDetect * videodetect, GstBuffer * \
buffer)  
   data = GST_BUFFER_DATA (buffer);
 
+  format = videodetect->format;
   width = videodetect->width;
   height = videodetect->height;
 
   pw = videodetect->pattern_width;
   ph = videodetect->pattern_height;
-  stride = GST_VIDEO_I420_Y_ROWSTRIDE (width);
+  stride = gst_video_format_get_row_stride (format, 0, width);
 
   req_width =
       (videodetect->pattern_count + videodetect->pattern_data_count) * pw +
@@ -331,7 +335,7 @@ gst_video_detect_transform_ip (GstBaseTransform * trans, \
GstBuffer * buf)  
   videodetect = GST_VIDEO_DETECT (trans);
 
-  gst_video_detect_420 (videodetect, buf);
+  gst_video_detect_yuv (videodetect, buf);
 
   return ret;
 }
diff --git a/gst/videosignal/gstvideodetect.h b/gst/videosignal/gstvideodetect.h
index 0c39f32..6871709 100644
--- a/gst/videosignal/gstvideodetect.h
+++ b/gst/videosignal/gstvideodetect.h
@@ -21,6 +21,7 @@
 #define __GST_VIDEO_DETECT_H__
 
 #include <gst/video/gstvideofilter.h>
+#include <gst/video/video.h>
 
 G_BEGIN_DECLS
 
@@ -47,7 +48,7 @@ struct _GstVideoDetect {
   GstVideoFilter videofilter;
   
   gint width, height;
-  guint32 format;
+  GstVideoFormat format;
 
   gboolean message;
   gint pattern_width;
diff --git a/gst/videosignal/gstvideomark.c b/gst/videosignal/gstvideomark.c
index 10e748e..14de614 100644
--- a/gst/videosignal/gstvideomark.c
+++ b/gst/videosignal/gstvideomark.c
@@ -92,14 +92,14 @@ static GstStaticPadTemplate gst_video_mark_src_template =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12 }"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12, Y41B, Y42B, Y444 }"))
     );
 
 static GstStaticPadTemplate gst_video_mark_sink_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12 }"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YV12, Y41B, Y42B, Y444 }"))
     );
 
 static GstVideoFilterClass *parent_class = NULL;
@@ -110,6 +110,7 @@ gst_video_mark_set_caps (GstBaseTransform * btrans, GstCaps * \
incaps,  {
   GstVideoMark *vf;
   GstStructure *in_s;
+  guint32 fourcc;
   gboolean ret;
 
   vf = GST_VIDEO_MARK (btrans);
@@ -118,13 +119,14 @@ gst_video_mark_set_caps (GstBaseTransform * btrans, GstCaps * \
incaps,  
   ret = gst_structure_get_int (in_s, "width", &vf->width);
   ret &= gst_structure_get_int (in_s, "height", &vf->height);
-  ret &= gst_structure_get_fourcc (in_s, "format", &vf->format);
+  ret &= gst_structure_get_fourcc (in_s, "format", &fourcc);
+
+  if (ret)
+    vf->format = gst_video_format_from_fourcc (fourcc);
 
   return ret;
 }
 
-#define GST_VIDEO_I420_Y_ROWSTRIDE(width) (GST_ROUND_UP_4(width))
-
 static void
 gst_video_mark_draw_box (GstVideoMark * videomark, guint8 * data,
     gint width, gint height, gint stride, guint8 color)
@@ -141,8 +143,9 @@ gst_video_mark_draw_box (GstVideoMark * videomark, guint8 * data,
 }
 
 static GstFlowReturn
-gst_video_mark_420 (GstVideoMark * videomark, GstBuffer * buffer)
+gst_video_mark_yuv (GstVideoMark * videomark, GstBuffer * buffer)
 {
+  GstVideoFormat format;
   gint i, pw, ph, stride, width, height;
   gint req_width, req_height;
   guint8 *d, *data;
@@ -151,12 +154,13 @@ gst_video_mark_420 (GstVideoMark * videomark, GstBuffer * \
buffer)  
   data = GST_BUFFER_DATA (buffer);
 
+  format = videomark->format;
   width = videomark->width;
   height = videomark->height;
 
   pw = videomark->pattern_width;
   ph = videomark->pattern_height;
-  stride = GST_VIDEO_I420_Y_ROWSTRIDE (width);
+  stride = gst_video_format_get_row_stride (format, 0, width);
 
   req_width =
       (videomark->pattern_count + videomark->pattern_data_count) * pw +
@@ -223,7 +227,7 @@ gst_video_mark_transform_ip (GstBaseTransform * trans, GstBuffer \
* buf)  videomark = GST_VIDEO_MARK (trans);
 
   if (videomark->enabled)
-    return gst_video_mark_420 (videomark, buf);
+    return gst_video_mark_yuv (videomark, buf);
 
   return ret;
 }
diff --git a/gst/videosignal/gstvideomark.h b/gst/videosignal/gstvideomark.h
index b75e7d3..b895d18 100644
--- a/gst/videosignal/gstvideomark.h
+++ b/gst/videosignal/gstvideomark.h
@@ -21,6 +21,7 @@
 #define __GST_VIDEO_MARK_H__
 
 #include <gst/video/gstvideofilter.h>
+#include <gst/video/video.h>
 
 G_BEGIN_DECLS
 
@@ -47,7 +48,7 @@ struct _GstVideoMark {
   GstVideoFilter videofilter;
   
   gint width, height;
-  guint32 format;
+  GstVideoFormat format;
 
   gint pattern_width;
   gint pattern_height;



------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf

_______________________________________________
gstreamer-cvs mailing list
gstreamer-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic