summaryrefslogtreecommitdiffstats
path: root/patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff')
-rw-r--r--patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff120
1 files changed, 120 insertions, 0 deletions
diff --git a/patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff b/patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff
new file mode 100644
index 000000000..9c786700a
--- /dev/null
+++ b/patches/gst-plugins-bad-0.10.10/bayer2rgb_configurable_first_line.diff
@@ -0,0 +1,120 @@
+Subject: gst-plugins-bad bayer2rgb: Make first line configurable
+From: Sascha Hauer <s.hauer@pengutronix.de>
+
+Since people can't agree whether the first line of a bayer pattern
+is a blue/green line or a green/red line make it configurable.
+
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+
+---
+ gst/bayer/gstbayer2rgb.c | 36 +++++++++++++++++++++++++++---------
+ 1 file changed, 27 insertions(+), 9 deletions(-)
+
+Index: gst-plugins-bad-0.10.8/gst/bayer/gstbayer2rgb.c
+===================================================================
+--- gst-plugins-bad-0.10.8.orig/gst/bayer/gstbayer2rgb.c
++++ gst-plugins-bad-0.10.8/gst/bayer/gstbayer2rgb.c
+@@ -108,6 +108,7 @@ struct _GstBayer2RGB
+ int r_off; /* offset for red */
+ int g_off; /* offset for green */
+ int b_off; /* offset for blue */
++ gboolean bg_first; /* first line is blue/green */
+ };
+
+ struct _GstBayer2RGBClass
+@@ -138,7 +139,8 @@ GST_ELEMENT_DETAILS ("Bayer to RGB decod
+
+ enum
+ {
+- PROP_0
++ PROP_0,
++ PROP_BGFIRST,
+ };
+
+ #define DEBUG_INIT(bla) \
+@@ -195,6 +197,13 @@ gst_bayer2rgb_class_init (GstBayer2RGBCl
+ GST_DEBUG_FUNCPTR (gst_bayer2rgb_set_caps);
+ GST_BASE_TRANSFORM_CLASS (klass)->transform =
+ GST_DEBUG_FUNCPTR (gst_bayer2rgb_transform);
++
++ g_object_class_install_property(gobject_class, PROP_BGFIRST,
++ g_param_spec_boolean("bg_first",
++ "B/G first",
++ "First line is a blue/green line",
++ TRUE,
++ G_PARAM_READWRITE));
+ }
+
+ static void
+@@ -209,8 +218,12 @@ static void
+ gst_bayer2rgb_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+ {
++ GstBayer2RGB *filter = GST_BAYER2RGB (object);
+
+ switch (prop_id) {
++ case PROP_BGFIRST:
++ filter->bg_first = g_value_get_boolean(value);
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -221,8 +234,12 @@ static void
+ gst_bayer2rgb_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+ {
++ GstBayer2RGB *filter = GST_BAYER2RGB (object);
+
+ switch (prop_id) {
++ case PROP_BGFIRST:
++ g_value_set_boolean(value, filter->bg_first);
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -291,6 +308,7 @@ gst_bayer2rgb_reset (GstBayer2RGB * filt
+ filter->r_off = 0;
+ filter->g_off = 0;
+ filter->b_off = 0;
++ filter->bg_first = 1;
+ }
+
+ static GstCaps *
+@@ -468,19 +486,19 @@ do_row0_col0 (uint8_t * input, uint8_t *
+ int type;
+
+ /* Horizontal edges */
+- hborder (input, output, 0, GREENB, filter);
++ hborder (input, output, 0, filter->bg_first ? GREENB : RED, filter);
+ if (filter->height & 1)
+- type = GREENB; /* odd # rows, "bottom" edge same as top */
++ type = filter->bg_first ? GREENB : RED; /* odd # rows, "bottom" edge same as top */
+ else
+- type = RED; /* even #, bottom side different */
++ type = filter->bg_first ? RED : GREENB; /* even #, bottom side different */
+ hborder (input, output, 1, type, filter);
+
+ /* Vertical edges */
+- vborder (input, output, 0, GREENR, filter);
++ vborder (input, output, 0, filter->bg_first ? GREENR : BLUE, filter);
+ if (filter->width & 1)
+- type = GREENR; /* odd # cols, "right" edge same as left */
++ type = filter->bg_first ? GREENR : BLUE; /* odd # cols, "right" edge same as left */
+ else
+- type = RED; /* even #, right side different */
++ type = filter->bg_first ? RED : GREENB; /* even #, right side different */
+ vborder (input, output, 1, type, filter);
+ }
+
+@@ -565,9 +583,9 @@ do_body (uint8_t * input, uint8_t * outp
+ * be RED for odd-numbered rows and GREENB for even rows.
+ */
+ if (h & 1)
+- type = RED;
++ type = filter->bg_first ? RED : GREENB;
+ else
+- type = GREENB;
++ type = filter->bg_first ? GREENB : RED;
+ /* Calculate the starting position for the row */
+ op = h * filter->width * filter->pixsize; /* output (converted) pos */
+ ip = h * filter->stride; /* input (bayer data) pos */