Message ID | 20240627125310.2533622-4-stefan.klug@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Quoting Stefan Klug (2024-06-27 13:51:11) > Add support for RAW10 and RAW12 to the dng_writer. This is needed on > imx8mp to produce tuning images. Both formats were tested on a debix > som with a imx335. > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > --- > src/apps/common/dng_writer.cpp | 76 ++++++++++++++++++++++++++++++++++ > 1 file changed, 76 insertions(+) > > diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp > index 2cb320ff327b..162c41a84011 100644 > --- a/src/apps/common/dng_writer.cpp > +++ b/src/apps/common/dng_writer.cpp > @@ -136,6 +136,34 @@ void packScanlineRaw8(void *output, const void *input, unsigned int width) > std::copy(in, in + width, out); > } > > +void packScanlineRaw10(void *output, const void *input, unsigned int width) > +{ > + const uint16_t *in = static_cast<const uint16_t *>(input); > + uint8_t *out = static_cast<uint8_t *>(output); > + > + for (unsigned int i = 0; i < width; i += 4) { > + *out++ = (in[0] & 0x3fc) >> 2; > + *out++ = (in[0] & 0x003) << 6 | (in[1] & 0x3f0) >> 4; > + *out++ = (in[1] & 0x00f) << 4 | (in[2] & 0x3c0) >> 6; > + *out++ = (in[2] & 0x03f) << 2 | (in[3] & 0x300) >> 8; > + *out++ = (in[3] & 0x0ff); > + in += 4; > + } > +} > + > +void packScanlineRaw12(void *output, const void *input, unsigned int width) > +{ > + const uint16_t *in = static_cast<const uint16_t *>(input); > + uint8_t *out = static_cast<uint8_t *>(output); > + > + for (unsigned int i = 0; i < width; i += 2) { > + *out++ = (in[0] & 0xff0) >> 4; > + *out++ = (in[0] & 0x00f) << 4 | (in[1] & 0xf00) >> 8; > + *out++ = (in[1] & 0x0ff); > + in += 2; > + } > +} > + > void packScanlineRaw16(void *output, const void *input, unsigned int width) > { > const uint16_t *in = static_cast<const uint16_t *>(input); > @@ -341,6 +369,54 @@ const std::map<PixelFormat, FormatInfo> formatInfo = { > .packScanline = packScanlineRaw8, > .thumbScanline = thumbScanlineRawXX_CSI2P, > } }, > + { formats::SBGGR10, { > + .bitsPerSample = 10, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, Blue, Green, Green, Red ? > + .packScanline = packScanlineRaw10, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SGBRG10, { > + .bitsPerSample = 10, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, Green, Blue, Red, Green ? Same for the others ... ? > + .packScanline = packScanlineRaw10, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SGRBG10, { > + .bitsPerSample = 10, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineRaw10, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SRGGB10, { > + .bitsPerSample = 10, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineRaw10, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SBGGR12, { > + .bitsPerSample = 12, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineSBGGR12, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SGBRG12, { > + .bitsPerSample = 12, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineSBGGR12, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SGRBG12, { > + .bitsPerSample = 12, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineSBGGR12, > + .thumbScanline = thumbScanlineRawXX, > + } }, > + { formats::SRGGB12, { > + .bitsPerSample = 12, > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > + .packScanline = packScanlineSBGGR12, > + .thumbScanline = thumbScanlineRawXX, > + } }, > { formats::SBGGR16, { > .bitsPerSample = 16, > .pattern = { CFAPatternBlue, CFAPatternGreen, CFAPatternGreen, CFAPatternRed }, > -- > 2.43.0 >
On Thu, Jun 27, 2024 at 02:13:08PM +0100, Kieran Bingham wrote: > Quoting Stefan Klug (2024-06-27 13:51:11) > > Add support for RAW10 and RAW12 to the dng_writer. This is needed on > > imx8mp to produce tuning images. Both formats were tested on a debix > > som with a imx335. > > > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > > --- > > src/apps/common/dng_writer.cpp | 76 ++++++++++++++++++++++++++++++++++ > > 1 file changed, 76 insertions(+) > > > > diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp > > index 2cb320ff327b..162c41a84011 100644 > > --- a/src/apps/common/dng_writer.cpp > > +++ b/src/apps/common/dng_writer.cpp > > @@ -136,6 +136,34 @@ void packScanlineRaw8(void *output, const void *input, unsigned int width) > > std::copy(in, in + width, out); > > } > > > > +void packScanlineRaw10(void *output, const void *input, unsigned int width) > > +{ > > + const uint16_t *in = static_cast<const uint16_t *>(input); > > + uint8_t *out = static_cast<uint8_t *>(output); > > + > > + for (unsigned int i = 0; i < width; i += 4) { > > + *out++ = (in[0] & 0x3fc) >> 2; > > + *out++ = (in[0] & 0x003) << 6 | (in[1] & 0x3f0) >> 4; > > + *out++ = (in[1] & 0x00f) << 4 | (in[2] & 0x3c0) >> 6; > > + *out++ = (in[2] & 0x03f) << 2 | (in[3] & 0x300) >> 8; > > + *out++ = (in[3] & 0x0ff); > > + in += 4; > > + } > > +} > > + > > +void packScanlineRaw12(void *output, const void *input, unsigned int width) > > +{ > > + const uint16_t *in = static_cast<const uint16_t *>(input); > > + uint8_t *out = static_cast<uint8_t *>(output); > > + > > + for (unsigned int i = 0; i < width; i += 2) { > > + *out++ = (in[0] & 0xff0) >> 4; > > + *out++ = (in[0] & 0x00f) << 4 | (in[1] & 0xf00) >> 8; > > + *out++ = (in[1] & 0x0ff); > > + in += 2; > > + } > > +} > > + > > void packScanlineRaw16(void *output, const void *input, unsigned int width) > > { > > const uint16_t *in = static_cast<const uint16_t *>(input); > > @@ -341,6 +369,54 @@ const std::map<PixelFormat, FormatInfo> formatInfo = { > > .packScanline = packScanlineRaw8, > > .thumbScanline = thumbScanlineRawXX_CSI2P, > > } }, > > + { formats::SBGGR10, { > > + .bitsPerSample = 10, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > Blue, Green, Green, Red ? Ouch, you are so right. Will fix. Cheers, Stefan > > > + .packScanline = packScanlineRaw10, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SGBRG10, { > > + .bitsPerSample = 10, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > Green, Blue, Red, Green ? > > Same for the others ... ? > > > + .packScanline = packScanlineRaw10, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SGRBG10, { > > + .bitsPerSample = 10, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineRaw10, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SRGGB10, { > > + .bitsPerSample = 10, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineRaw10, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SBGGR12, { > > + .bitsPerSample = 12, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineSBGGR12, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SGBRG12, { > > + .bitsPerSample = 12, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineSBGGR12, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SGRBG12, { > > + .bitsPerSample = 12, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineSBGGR12, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > + { formats::SRGGB12, { > > + .bitsPerSample = 12, > > + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, > > + .packScanline = packScanlineSBGGR12, > > + .thumbScanline = thumbScanlineRawXX, > > + } }, > > { formats::SBGGR16, { > > .bitsPerSample = 16, > > .pattern = { CFAPatternBlue, CFAPatternGreen, CFAPatternGreen, CFAPatternRed }, > > -- > > 2.43.0 > >
diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp index 2cb320ff327b..162c41a84011 100644 --- a/src/apps/common/dng_writer.cpp +++ b/src/apps/common/dng_writer.cpp @@ -136,6 +136,34 @@ void packScanlineRaw8(void *output, const void *input, unsigned int width) std::copy(in, in + width, out); } +void packScanlineRaw10(void *output, const void *input, unsigned int width) +{ + const uint16_t *in = static_cast<const uint16_t *>(input); + uint8_t *out = static_cast<uint8_t *>(output); + + for (unsigned int i = 0; i < width; i += 4) { + *out++ = (in[0] & 0x3fc) >> 2; + *out++ = (in[0] & 0x003) << 6 | (in[1] & 0x3f0) >> 4; + *out++ = (in[1] & 0x00f) << 4 | (in[2] & 0x3c0) >> 6; + *out++ = (in[2] & 0x03f) << 2 | (in[3] & 0x300) >> 8; + *out++ = (in[3] & 0x0ff); + in += 4; + } +} + +void packScanlineRaw12(void *output, const void *input, unsigned int width) +{ + const uint16_t *in = static_cast<const uint16_t *>(input); + uint8_t *out = static_cast<uint8_t *>(output); + + for (unsigned int i = 0; i < width; i += 2) { + *out++ = (in[0] & 0xff0) >> 4; + *out++ = (in[0] & 0x00f) << 4 | (in[1] & 0xf00) >> 8; + *out++ = (in[1] & 0x0ff); + in += 2; + } +} + void packScanlineRaw16(void *output, const void *input, unsigned int width) { const uint16_t *in = static_cast<const uint16_t *>(input); @@ -341,6 +369,54 @@ const std::map<PixelFormat, FormatInfo> formatInfo = { .packScanline = packScanlineRaw8, .thumbScanline = thumbScanlineRawXX_CSI2P, } }, + { formats::SBGGR10, { + .bitsPerSample = 10, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineRaw10, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SGBRG10, { + .bitsPerSample = 10, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineRaw10, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SGRBG10, { + .bitsPerSample = 10, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineRaw10, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SRGGB10, { + .bitsPerSample = 10, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineRaw10, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SBGGR12, { + .bitsPerSample = 12, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineSBGGR12, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SGBRG12, { + .bitsPerSample = 12, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineSBGGR12, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SGRBG12, { + .bitsPerSample = 12, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineSBGGR12, + .thumbScanline = thumbScanlineRawXX, + } }, + { formats::SRGGB12, { + .bitsPerSample = 12, + .pattern = { CFAPatternRed, CFAPatternGreen, CFAPatternGreen, CFAPatternBlue }, + .packScanline = packScanlineSBGGR12, + .thumbScanline = thumbScanlineRawXX, + } }, { formats::SBGGR16, { .bitsPerSample = 16, .pattern = { CFAPatternBlue, CFAPatternGreen, CFAPatternGreen, CFAPatternRed },
Add support for RAW10 and RAW12 to the dng_writer. This is needed on imx8mp to produce tuning images. Both formats were tested on a debix som with a imx335. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- src/apps/common/dng_writer.cpp | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+)