Message ID | 20200502225704.2911-6-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
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@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@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@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
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);
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@ideasonboard.com> --- src/qcam/dng_writer.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)