[libcamera-devel] Fixing debayering?

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jul 6 15:16:47 CEST 2022


Hi Rafael,

On Wed, Jul 06, 2022 at 02:37:04PM +0300, Rafael Diniz wrote:
> Thanks Laurent.
> 
> I'm wondering if the frames SBGGR8 passed to this code are in the 
> required format...
> /** Monochrome RGBA or GL_LUMINANCE Bayer encoded texture.*/

That part should be fine. In ViewFinderGL::doRender(), for RAW8 formats,
we have

		glTexImage2D(GL_TEXTURE_2D,
			     0,
			     GL_LUMINANCE,
			     stride_,
			     size_.height(),
			     0,
			     GL_LUMINANCE,
			     GL_UNSIGNED_BYTE,
			     image_->data(0).data());

With GL_LUMINANCE + GL_UNSIGNED_BYTE, the texture sampler will read the
texture with one byte per pixel, and store the value of the byte in the
.r, .g and .b components (scaled from [0, 255] to [0.0, 1.0]). The
fragment shader then uses the .r component only.

One point to note is that the texture sampler will perform interpolation
if the coordinates passed to it don't fall on a texel. For RAW8 formats,
interpolation won't give correct results, as the sampler would try to
interpolate between neighbour pixels with different colour filter. For
that reason, ViewFinderGL::selectFormat() sets textureMinMagFilters_ to
GL_NEAREST, which is then used in ViewFinderGL::configureTexture() to
setup the min/mag filters. The lack of interpolation will affect the
image quality when the display size is different than the capture size.

> Trying to dig a bit further.
> 
> On 7/6/22 07:50, Laurent Pinchart wrote:
> > On Wed, Jul 06, 2022 at 12:26:29PM +0300, Rafael Diniz via libcamera-devel wrote:
> >> Hi all,
> >>
> >> The last annoying bug I can find in using qcam on the Pinephone (at
> >> least on lower resolutions, as high resolutions are still borked) is the
> >> debayering from SBGGR8, which is clearly producing artifacts. Where can
> >> I find its implementation? I plan to read it and compare to the
> >> canonical one and see what could be wrong.
> > 
> > The implementation is in src/qcam/assets/shader/bayer_8.vert and
> > src/qcam/assets/shader/bayer_8.frag.

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list