diff options
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.diff | 120 |
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 */ |