[libcamera-devel] [PATCH 5/5] qcam: dng_writer: Generate thumbnail in RGB format

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun May 3 03:25:57 CEST 2020


Hi Laurent,

Thanks for your work.

On 2020-05-03 01:57:04 +0300, Laurent Pinchart wrote:
> While the DNG specification supports greyscale ("BlackIsZero") for
> thumbnails, RawTherapee seems to have trouble reading them. Generate
> thumbnails in RGB instead (but still with greyscale content, to avoid
> having to interpolate colour components).
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

We likely try to get color thumbs in the future, so it's a good thing we 
reserve space for that now as a first step ;-P

Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>

> ---
>  src/qcam/dng_writer.cpp | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp
> index d04a8e161218..bc1a63e69799 100644
> --- a/src/qcam/dng_writer.cpp
> +++ b/src/qcam/dng_writer.cpp
> @@ -74,7 +74,10 @@ void thumbScanlineSBGGRxxP(const FormatInfo &info, void *output,
>  	unsigned int skip = info.bitsPerSample * 16 / 8;
>  
>  	for (unsigned int x = 0; x < width; x++) {
> -		*out++ = (in[0] + in[1] + in[stride] + in[stride + 1]) >> 2;
> +		uint8_t value = (in[0] + in[1] + in[stride] + in[stride + 1]) >> 2;
> +		*out++ = value;
> +		*out++ = value;
> +		*out++ = value;
>  		in += skip;
>  	}
>  }
> @@ -175,16 +178,17 @@ int DNGWriter::write(const char *filename, const Camera *camera,
>  	TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
>  
>  	/*
> -	 * Thumbnail-specific tags. The thumbnail is stored as a greyscale image
> -	 * with 1/16 of the raw image resolution.
> +	 * Thumbnail-specific tags. The thumbnail is stored as an RGB image
> +	 * with 1/16 of the raw image resolution. Greyscale would save space,
> +	 * but doesn't seem well supported by RawTherapee.
>  	 */
>  	TIFFSetField(tif, TIFFTAG_SUBFILETYPE, FILETYPE_REDUCEDIMAGE);
>  	TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, config.size.width / 16);
>  	TIFFSetField(tif, TIFFTAG_IMAGELENGTH, config.size.height / 16);
>  	TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
>  	TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
> -	TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
> -	TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
> +	TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
> +	TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3);
>  	TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
>  	TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list