summaryrefslogtreecommitdiff
path: root/test/ipc/meson.build
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-12 17:17:35 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-14 16:00:40 +0300
commit185fe3d4b4d1264b2d72f8c92d17e248092efc46 (patch)
tree7141f270c55f48f67701ec9109f01bf0c5142a56 /test/ipc/meson.build
parenta775234d6612a1fbd3bb586de4704883c1fcd817 (diff)
libcamera: pipeline_handler: Simplify request completion
libcamera guarantees that requests complete in sequence. This requirement is currently pushed down to pipeline handlers. Three out of four of our pipeline handlers implement that requirement based on the sole assumption that buffers will always complete in sequeuence, while the IPU3 pipeline handler implements a more complex logic. It turns out that the logic can be moved to the base PipelineHandler class with support from the Request class. Do so to simplify the pipeline handlers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'test/ipc/meson.build')
0 files changed, 0 insertions, 0 deletions
='#n121'>121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * v4l2_controls.cpp - V4L2 Controls Support
 */

#include "v4l2_controls.h"

/**
 * \file v4l2_controls.h
 * \brief Support for V4L2 Controls using the V4L2 Extended Controls APIs
 *
 * The V4L2 Control API allows application to inspect and modify sets of
 * configurable parameters on a video device or subdevice. The nature of the
 * parameters an application can modify using the control framework depends on
 * what the driver implements support for, and on the characteristics of the
 * underlying hardware platform. Generally controls are used to modify user
 * visible settings, such as the image brightness and exposure time, or
 * non-standard parameters which cannot be controlled through the V4L2 format
 * negotiation API.
 *
 * Controls are identified by a numerical ID, defined by the V4L2 kernel headers
 * and have an associated type. Each control has a value, which is the data that
 * can be modified with V4L2Device::setControls() or retrieved with
 * V4L2Device::getControls().
 *
 * The control's type along with the control's flags define the type of the
 * control's value content. Controls can transport a single data value stored in
 * variable inside the control, or they might as well deal with more complex
 * data types, such as arrays of matrices, stored in a contiguous memory
 * locations associated with the control and called 'the payload'. Such controls
 * are called 'compound controls' and are currently not supported by the
 * libcamera V4L2 control framework.
 *
 * libcamera implements support for controls using the V4L2 Extended Control
 * API, which allows future handling of controls with payloads of arbitrary
 * sizes.
 *
 * The libcamera V4L2 Controls framework operates on lists of controls, wrapped
 * by the V4L2ControlList class, to match the V4L2 extended controls API. The
 * interface to set and get control is implemented by the V4L2Device class, and
 * this file only provides the data type definitions.
 *
 * \todo Add support for compound controls
 */

namespace libcamera {

/**
 * \class V4L2ControlInfo
 * \brief Information on a V4L2 control
 *
 * The V4L2ControlInfo class represents all the information related to a V4L2
 * control, such as its ID, its type, its user-readable name and the expected
 * size of its value data.
 *
 * V4L2ControlInfo instances are created by inspecting the fieldS of a struct
 * v4l2_query_ext_ctrl structure, after it has been filled by the device driver
 * as a consequence of a VIDIOC_QUERY_EXT_CTRL ioctl call.
 *
 * This class does not contain the control value, but only static information on
 * the control, which shall be cached by the caller at initialisation time or
 * the first time the control information is accessed.
 */

/**
 * \brief Construct a V4L2ControlInfo from a struct v4l2_query_ext_ctrl
 * \param ctrl The struct v4l2_query_ext_ctrl as returned by the kernel
 */
V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
{
	id_ = ctrl.id;
	type_ = ctrl.type;
	name_ = static_cast<const char *>(ctrl.name);
	size_ = ctrl.elem_size * ctrl.elems;

	if (ctrl.type == V4L2_CTRL_TYPE_INTEGER64)
		range_ = ControlRange(static_cast<int64_t>(ctrl.minimum),
				      static_cast<int64_t>(ctrl.maximum));
	else
		range_ = ControlRange(static_cast<int32_t>(ctrl.minimum),
				      static_cast<int32_t>(ctrl.maximum));
}

/**
 * \fn V4L2ControlInfo::id()
 * \brief Retrieve the control ID
 * \return The V4L2 control ID
 */

/**
 * \fn V4L2ControlInfo::type()
 * \brief Retrieve the control type as defined by V4L2_CTRL_TYPE_*
 * \return The V4L2 control type
 */

/**
 * \fn V4L2ControlInfo::size()
 * \brief Retrieve the control value data size (in bytes)
 * \return The V4L2 control value data size
 */

/**
 * \fn V4L2ControlInfo::name()
 * \brief Retrieve the control user readable name
 * \return The V4L2 control user readable name
 */

/**
 * \fn V4L2ControlInfo::range()
 * \brief Retrieve the control value range
 * \return The V4L2 control value range
 */

/**
 * \typedef V4L2ControlInfoMap
 * \brief A map of control ID to V4L2ControlInfo
 */

/**
 * \class V4L2Control
 * \brief A V4L2 control value
 *
 * The V4L2Control class represent the value of a V4L2 control. The class
 * stores values that have been read from or will be applied to a V4L2 device.
 *
 * The value stored in the class instances does not reflect what is actually
 * applied to the hardware but is a pure software cache optionally initialized
 * at control creation time and modified by a control read or write operation.
 *
 * The write and read controls the V4L2Control class instances are not meant
 * to be directly used but are instead intended to be grouped in
 * V4L2ControlList instances, which are then passed as parameters to
 * V4L2Device::setControls() and V4L2Device::getControls() operations.
 */

/**
 * \fn V4L2Control::V4L2Control
 * \brief Construct a V4L2 control with \a id and \a value
 * \param id The V4L2 control ID
 * \param value The control value
 */