[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