Introduce a new field in the controls serialization protocol to allow discerning which ControlIdMap a ControlInfoMap refers to. The newly introduced IdMapType enumeration describes the possible info maps: - Either the globally available controls::controls and properties::properties maps, which are valid across IPC boundaries - A ControlIdMap created locally by the V4L2 device, which is not valid across the IPC boundaries At de-serialization time the idMapType field is inspected and - If the idmap is a globally defined one, there's no need to create new ControlId instances when populating the de-serialized ControlInfoMap. Use the globally available map to retrieve the ControlId reference and use it. - If the idmap is a map only available locally, create a new ControlId as it used to happen before this patch. As a direct consequence, this change allows us to perform lookup by ControlId reference on de-serialized ControlIdMap that refers to the libcamera defined controls::controls and properties::properties. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
55 lines
948 B
C
55 lines
948 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* ipa_controls.h - IPA Control handling
|
|
*/
|
|
#ifndef __LIBCAMERA_IPA_CONTROLS_H__
|
|
#define __LIBCAMERA_IPA_CONTROLS_H__
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define IPA_CONTROLS_FORMAT_VERSION 1
|
|
|
|
enum ipa_controls_id_map_type {
|
|
IPA_CONTROL_ID_MAP_CONTROLS,
|
|
IPA_CONTROL_ID_MAP_PROPERTIES,
|
|
IPA_CONTROL_ID_MAP_V4L2,
|
|
};
|
|
|
|
struct ipa_controls_header {
|
|
uint32_t version;
|
|
uint32_t handle;
|
|
uint32_t entries;
|
|
uint32_t size;
|
|
uint32_t data_offset;
|
|
enum ipa_controls_id_map_type id_map_type;
|
|
uint32_t reserved[2];
|
|
};
|
|
|
|
struct ipa_control_value_entry {
|
|
uint32_t id;
|
|
uint8_t type;
|
|
uint8_t is_array;
|
|
uint16_t count;
|
|
uint32_t offset;
|
|
uint32_t padding[1];
|
|
};
|
|
|
|
struct ipa_control_info_entry {
|
|
uint32_t id;
|
|
uint32_t type;
|
|
uint32_t offset;
|
|
uint32_t padding[1];
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __LIBCAMERA_IPA_CONTROLS_H__ */
|