bayer.c File Reference

Bayer array conversion routines. More...

`#include "config.h"`
`#include "libgphoto2/bayer.h"`
`#include <gphoto2/gphoto2-port-log.h>`
`#include <gphoto2/gphoto2-result.h>`
Include dependency graph for bayer.c:

## Macros

#define | RED 0
#define | GREEN 1
#define | BLUE 2
#define | AD(x, y, w) ((y)*(w)*3+3*(x))

## Functions

int | gp_bayer_expand (unsigned char *input, int w, int h, unsigned char *output, BayerTile tile)
| Expand a bayer raster style image to a RGB raster. More...
int | gp_bayer_interpolate (unsigned char *image, int w, int h, BayerTile tile)
| Interpolate a expanded bayer array into an RGB image. More...
int | gp_bayer_decode (unsigned char *input, int w, int h, unsigned char *output, BayerTile tile)
| Convert a bayer raster style image to a RGB raster. More...

## Detailed Description

Bayer array conversion routines.

Author
  Copyright 2001 Lutz Mueller lutz@.nosp@m.user.nosp@m.s.sf..nosp@m.net
  Copyright 2007 Theodore Kilgore kilgo.nosp@m.ta@a.nosp@m.uburn.nosp@m..edu

  gp_bayer_accrue() from Theodore Kilgore kilgo.nosp@m.ta@a.nosp@m.uburn.nosp@m..edu contains suggestions by B. R. Harris (e-mail address disappeared) and Werner Eugster eugst.nosp@m.er@g.nosp@m.iub.u.nosp@m.nibe.nosp@m..ch

License
  This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

## Function Documentation

## gp_bayer_decode()

int gp_bayer_decode | ( | unsigned char * | input,
|  | int | w,
|  | int | h,
|  | unsigned char * | output,
|  | BayerTile | tile
| ) |  |

Convert a bayer raster style image to a RGB raster.

Parameters

  input | the bayer CCD array as linear input
  w | width of the above array
  h | height of the above array
  output | RGB output array (linear, 3 bytes of R,G,B for every pixel)
  tile | how the 2x2 bayer array is laid out

A regular CCD uses a raster of 2 green, 1 blue and 1 red components to cover a 2x2 pixel area. The camera or the driver then interpolates a 2x2 RGB pixel set out of this data.

This function expands and interpolates the bayer array to 3 times larger bitmap with RGB values interpolated.

Returns
  a gphoto error code

References gp_bayer_expand(), gp_bayer_interpolate(), and GP_OK.

## gp_bayer_expand()

int gp_bayer_expand | ( | unsigned char * | input,
|  | int | w,
|  | int | h,
|  | unsigned char * | output,
|  | BayerTile | tile
| ) |  |

Expand a bayer raster style image to a RGB raster.

Parameters

  input | the bayer CCD array as linear input
  w | width of the above array
  h | height of the above array
  output | RGB output array (linear, 3 bytes of R,G,B for every pixel)
  tile | how the 2x2 bayer array is laid out

A regular CCD uses a raster of 2 green, 1 blue and 1 red components to cover a 2x2 pixel area. The camera or the driver then interpolates a 2x2 RGB pixel set out of this data.

This function expands the bayer array to 3 times larger bitmap with RGB values copied as-is. Pixels were no sensor was there are 0. The data is supposed to be processed further by for instance gp_bayer_interpolate().

Returns
  a gphoto error code

References BAYER_TILE_BGGR, BAYER_TILE_GBRG, BAYER_TILE_GRBG, BAYER_TILE_RGGB, gp_log(), and GP_LOG_DEBUG.

Referenced by gp_ahd_decode(), and gp_bayer_decode().

## gp_bayer_interpolate()

int gp_bayer_interpolate | ( | unsigned char * | image,
|  | int | w,
|  | int | h,
|  | BayerTile | tile
| ) |  |

Interpolate a expanded bayer array into an RGB image.

Parameters

  image | the linear RGB array as both input and output
  w | width of the above array
  h | height of the above array
  tile | how the 2x2 bayer array is laid out

This function interpolates a bayer array which has been pre-expanded by gp_bayer_expand() to an RGB image. It uses various interpolation methods, also see gp_bayer_accrue().

Returns
  a gphoto error code

References BAYER_TILE_BGGR, BAYER_TILE_BGGR_INTERLACED, BAYER_TILE_GBRG, BAYER_TILE_GBRG_INTERLACED, BAYER_TILE_GRBG, BAYER_TILE_GRBG_INTERLACED, BAYER_TILE_RGGB, BAYER_TILE_RGGB_INTERLACED, and GP_ERROR.

Referenced by gp_bayer_decode().