summaryrefslogtreecommitdiff
path: root/src/android/metadata
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2021-12-10 14:44:21 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-12-13 11:29:01 +0200
commitc8a4b52e3aa3b4724b482c42cb20c3fda7e6572c (patch)
tree904495f6dc7cdbfcf40f040aef412f2a80cdaffe /src/android/metadata
parent3e520cadf18ac53eed0fc98fb1d58368ef80a61d (diff)
libcamera: v4l2_subdevice: Add colorSpace field to V4L2SubdeviceFormat
This adds a ColorSpace field to the V4L2SubdeviceFormat so that we can set and request particular color spaces from V4L2. This commit simply adds the field and fixes some occurrences of brace initializers that would otherwise be broken. A subsequent commit will pass and retrieve the value correctly to/from V4l2 itself. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/android/metadata')
0 files changed, 0 insertions, 0 deletions
n48' href='#n48'>48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (C) 2019, Raspberry Pi (Trading) Limited
 *
 * md_parser.cpp - image sensor metadata parsers
 */

#include <assert.h>
#include <map>
#include <string.h>

#include "md_parser.hpp"

using namespace RPi;

// This function goes through the embedded data to find the offsets (not
// values!), in the data block, where the values of the given registers can
// subsequently be found.

// Embedded data tag bytes, from Sony IMX219 datasheet but general to all SMIA
// sensors, I think.

#define LINE_START 0x0a
#define LINE_END_TAG 0x07
#define REG_HI_BITS 0xaa
#define REG_LOW_BITS 0xa5
#define REG_VALUE 0x5a
#define REG_SKIP 0x55

MdParserSmia::ParseStatus MdParserSmia::findRegs(unsigned char *data,
						 uint32_t regs[], int offsets[],
						 unsigned int num_regs)
{
	assert(num_regs > 0);
	if (data[0] != LINE_START)
		return NO_LINE_START;

	unsigned int current_offset = 1; // after the LINE_START
	unsigned int current_line_start = 0, current_line = 0;
	unsigned int reg_num = 0, first_reg = 0;
	ParseStatus retcode = PARSE_OK;
	while (1) {
		int tag = data[current_offset++];
		if ((bits_per_pixel_ == 10 &&
		     (current_offset + 1 - current_line_start) % 5 == 0) ||
		    (bits_per_pixel_ == 12 &&
		     (current_offset + 1 - current_line_start) % 3 == 0)) {
			if (data[current_offset++] != REG_SKIP)
				return BAD_DUMMY;
		}
		int data_byte = data[current_offset++];
		//printf("Offset %u, tag 0x%02x data_byte 0x%02x\n", current_offset-1, tag, data_byte);
		if (tag == LINE_END_TAG) {
			if (data_byte != LINE_END_TAG)
				return BAD_LINE_END;
			if (num_lines_ && ++current_line == num_lines_)
				return MISSING_REGS;
			if (line_length_bytes_) {
				current_offset =
					current_line_start + line_length_bytes_;
				// Require whole line to be in the buffer (if buffer size set).
				if (buffer_size_bytes_ &&
				    current_offset + line_length_bytes_ >
					    buffer_size_bytes_)