ipa: rpi: cam_helper: Extend embedded data parsing to RAW14 modes

Fix embedded data byte-skipping for 14-bit modes (4 out of 7 bytes
carry register data), and allow 14-bit modes in IMX708 PDAF parsing.

Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Nick Hollinghurst 2024-03-05 11:01:36 +00:00 committed by Kieran Bingham
parent a63af956ac
commit caed5a551b
2 changed files with 8 additions and 5 deletions

View file

@ -269,7 +269,7 @@ bool CamHelperImx708::parsePdafData(const uint8_t *ptr, size_t len,
{
size_t step = bpp >> 1; /* bytes per PDAF grid entry */
if (bpp < 10 || bpp > 12 || len < 194 * step || ptr[0] != 0 || ptr[1] >= 0x40) {
if (bpp < 10 || bpp > 14 || len < 194 * step || ptr[0] != 0 || ptr[1] >= 0x40) {
LOG(IPARPI, Error) << "PDAF data in unsupported format";
return false;
}

View file

@ -86,10 +86,13 @@ MdParserSmia::ParseStatus MdParserSmia::findRegs(libcamera::Span<const uint8_t>
while (1) {
int tag = buffer[currentOffset++];
if ((bitsPerPixel_ == 10 &&
(currentOffset + 1 - currentLineStart) % 5 == 0) ||
(bitsPerPixel_ == 12 &&
(currentOffset + 1 - currentLineStart) % 3 == 0)) {
/* Non-dummy bytes come in even-sized blocks: skip can only ever follow tag */
while ((bitsPerPixel_ == 10 &&
(currentOffset + 1 - currentLineStart) % 5 == 0) ||
(bitsPerPixel_ == 12 &&
(currentOffset + 1 - currentLineStart) % 3 == 0) ||
(bitsPerPixel_ == 14 &&
(currentOffset - currentLineStart) % 7 >= 4)) {
if (buffer[currentOffset++] != RegSkip)
return BadDummy;
}