From bfdcf076740287a334744f8c874c3ac4f91d4598 Mon Sep 17 00:00:00 2001 From: "William M. Brack" Date: Fri, 14 Mar 2008 17:33:09 +0000 Subject: [PATCH] gst/videotestsrc/videotestsrc.c: Fix Bayer pattern generation. Original commit message from CVS: Patch by: William M. Brack * gst/videotestsrc/videotestsrc.c: Fix Bayer pattern generation. --- ChangeLog | 6 +++++ gst/videotestsrc/videotestsrc.c | 47 ++++++++++++++++++++++++++++----- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e788eeb8e2..3c2b86bdcb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-03-14 David Schleef + + Patch by: William M. Brack + + * gst/videotestsrc/videotestsrc.c: Fix Bayer pattern generation. + 2008-03-14 Wim Taymans * gst/playback/gststreamselector.c: (gst_selector_pad_event), diff --git a/gst/videotestsrc/videotestsrc.c b/gst/videotestsrc/videotestsrc.c index bf70a8b267..2becd0b3f3 100644 --- a/gst/videotestsrc/videotestsrc.c +++ b/gst/videotestsrc/videotestsrc.c @@ -304,7 +304,10 @@ static void paint_hline_str3 (paintinfo * p, int x, int y, int w); static void paint_hline_RGB565 (paintinfo * p, int x, int y, int w); static void paint_hline_xRGB1555 (paintinfo * p, int x, int y, int w); -static void paint_hline_bayer (paintinfo * p, int x, int y, int w); +#if 0 +static void paint_hline_bayer_GRBG (paintinfo * p, int x, int y, int w); +#endif +static void paint_hline_bayer_BGGR (paintinfo * p, int x, int y, int w); struct fourcc_list_struct fourcc_list[] = { /* packed */ @@ -390,7 +393,11 @@ struct fourcc_list_struct fourcc_list[] = { 15, 0x00007c00, 0x000003e0, 0x0000001f}, - {VTS_BAYER, "BAY8", "Bayer", 8, paint_setup_bayer, paint_hline_bayer} + /* Need to know if this is correct */ +#if 0 + {VTS_BAYER, "BAY8", "BayerRGGB", 8, paint_setup_bayer, paint_hline_bayer_GRBG} +#endif + {VTS_BAYER, "BA81", "BayerBGGR", 8, paint_setup_bayer, paint_hline_bayer_BGGR} }; int n_fourccs = G_N_ELEMENTS (fourcc_list); @@ -1467,16 +1474,17 @@ paint_setup_bayer (paintinfo * p, unsigned char *dest) p->endptr = p->dest + p->ystride * p->height; } +#if 0 static void -paint_hline_bayer (paintinfo * p, int x, int y, int w) +paint_hline_bayer_GRBG (paintinfo * p, int x, int y, int w) { int offset = y * p->ystride; uint8_t *dest = p->yp + offset; int i; - if (y & 1) { + if ((y & 1) == 0) { for (i = x; i < x + w; i++) { - if (i & 1) { + if ((i & 1) == 0) { dest[i] = p->color->G; } else { dest[i] = p->color->B; @@ -1484,7 +1492,7 @@ paint_hline_bayer (paintinfo * p, int x, int y, int w) } } else { for (i = x; i < x + w; i++) { - if (i & 1) { + if ((i & 1) == 0) { dest[i] = p->color->R; } else { dest[i] = p->color->G; @@ -1492,3 +1500,30 @@ paint_hline_bayer (paintinfo * p, int x, int y, int w) } } } +#endif + +static void +paint_hline_bayer_BGGR (paintinfo * p, int x, int y, int w) +{ + int offset = y * p->ystride; + uint8_t *dest = p->yp + offset; + int i; + + if ((y & 1) == 0) { + for (i = x; i < x + w; i++) { + if ((i & 1) == 0) { + dest[i] = p->color->B; + } else { + dest[i] = p->color->G; + } + } + } else { + for (i = x; i < x + w; i++) { + if ((i & 1) == 0) { + dest[i] = p->color->G; + } else { + dest[i] = p->color->R; + } + } + } +}