Commit Graph

73 Commits

Author SHA1 Message Date
Naushir Patuck
7ee7dc3369 camera_sensor: Suppress error message if test patterns are unavailable
If a sensor driver does not support test patterns (e.g. IMX477),
libcamera throws an unnecessary error message during initialisation when
it sets the test pattern to off.

Fix this by moving the error message into setTestPatternMode() where the
pipeline handler explicitly requests to set a test pattern.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2022-06-06 15:08:34 +03:00
Laurent Pinchart
37958dfd71 libcamera: Replace toString with operator<<() for geometry classes
Now that geometry classes implement the stream formatting operator<<(),
use it instead of the toString() function.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2022-05-04 14:11:25 +03:00
Laurent Pinchart
1a9587b8f2 libcamera: camera_sensor: Drop const on the return value of sizes()
The sizes() function returns a value, not a reference. There's no need
for it to be const.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2022-04-06 20:25:48 +03:00
Daniel Scally
9c003a5321 libcamera: camera_sensor: Discover VCMs through ancillary links
Add a function to check for and initialise any VCMs linked to the
CameraSensor's entity by ancillary links. This should initialise
the lens_ member with the linked entity. Call the new function
during CameraSensor::init().

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Scally <djrscally@gmail.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2022-03-15 17:20:59 +00:00
David Plowman
7f1e39e3e2 libcamera: camera_sensor: Clear camera flips after opening the device
We clear the V4L2_CID_HFLIP and V4L2_CID_VFLIP controls immediately
after opening the camera device. This means the camera's Bayer format
and mbus codes will be in the sensor's "native" order, and we document
this to be the case so that it can be relied upon.

Clearing the flips is harmless where sensor flips do not affect the
Bayer order.

This also fixes a bug in the Raspberry Pi pipeline handler where the
native Bayer order was being computed wrongly, but the new behaviour
here will be helpful to other pipeline handlers too. A subsequent
commit will tidy up the Raspberry Pi pipeline handler in this area as
it can now be simplified.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Fixes: 83a5128161 (pipeline: raspberrypi: Convert the pipeline handler to use media controller)
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2022-01-19 10:27:07 +00:00
David Plowman
c8a4b52e3a 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>
2021-12-13 11:29:01 +02:00
Hirokazu Honda
e1b70e764f libcamera: camera_sensor: Enable to set a test pattern mode
This adds a function to set a camera sensor driver a test pattern
mode. CameraSensor initializes the test pattern mode by Off.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-12-06 17:41:46 +01:00
Hirokazu Honda
5148c0aa7e libcamera: camera_sensor: Reference test pattern modes by enum type
The CameraSensor stores TestPatternModes as an int32_t. This prevents
the compiler from verifying the usage against the defined enum types.

Fix references to the TestPatternMode to store the value as the
TestPatternModeEnum type which is defined by the control generator.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-12-06 17:41:45 +01:00
Laurent Pinchart
4b24b0bfe6 libcamera: camera_sensor: Fix doxygen warning
Commit ad2bcbe5b5 ("libcamera: camera_lens: add CameraLens as a member
of CameraSensor") incorrectly named the focusLens() function
"focusLens_" in the documentation, causing a doxygen warning. Fix it.

Fixes: ad2bcbe5b5 ("libcamera: camera_lens: add CameraLens as a member of CameraSensor")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-12-03 13:21:23 +02:00
Han-Lin Chen
ad2bcbe5b5 libcamera: camera_lens: add CameraLens as a member of CameraSensor
Add CameraLens as a member of CameraSensor. The patch does not implement how
to link the lens to the specific sensor yet. Only to provide an interface for
pipeline handler's usage.

Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-12-03 10:23:26 +00:00
Han-Lin Chen
5d2aad02e8 libcamera: add model() for retrieving model name in V4L2Subdevice
CameraSensor retrieves model name from media entity. Move the heuristics
method into V4L2Subdevice, so CameraLens can reuse the function.

Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-12-03 10:23:26 +00:00
Hirokazu Honda
3c059b9164 libcamera: camera_sensor: Reverse the key and value of test pattern mode map
The key and value of the test pattern mode are originally the index of
v4l2 control and the corresponding test pattern mode control value.
This key and value are useful in the initialization for reporting
available test pattern modes. However, the map of the reversed key and
value is much more useful in applying a requested test pattern mode.
Reverses the key and value of the map as the initialization is one
time but the test pattern mode request will be multiple times.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-10-05 03:30:36 +03:00
Umang Jain
a18c9f0490 libcamera: camera_sensor: Transform CameraSensor::sizes()
In CameraSensor, the mbusCodes() and sizes() accessor functions
retrieves all the supported media bus codes and the supported sizes
respectively. However, this is quite limiting since the caller
probably isn't in a position to match which range of sizes are
supported for a particular mbusCode.

Hence, the caller is most likely interested to know about the sizes
supported for a particular media bus code. This patch transforms the
existing CameraSensor::sizes() to CameraSensor::sizes(mbuscode) to
achieve that goal.

The patch also transforms existing CIO2Device::sizes() in IPU3 pipeline
handler to CIO2Device::sizes(PixelFormat) on a similar principle. The
function is then plumbed to CameraSensor::sizes(mbusCode) to enumerate
the per-format sizes as required in
PipelineHandlerIPU3::generateConfiguration().

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Tested-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-08-31 12:26:54 +05:30
Laurent Pinchart
a48a000a33 libcamera: Rename 'method' to 'function'
Usage of 'method' to refer to member functions comes from Java. The C++
standard uses the term 'function' only. Replace 'method' with 'function'
or 'member function' through the whole code base and documentation.
While at it, fix two typos (s/backeng/backend/).

The BoundMethod and Object::invokeMethod() are left as-is here, and will
be addressed separately.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-08-09 15:40:32 +03:00
David Plowman
bdf04cca08 libcamera: Add support for monochrome sensors
This commit adds support for monochrome (greyscale) raw sensors. These
are sensors that have no colour filter array, so all pixels are the
same and there are no distinct colour channels.

These sensors still require many of an ISP's processing stages, such
as denoise, tone mapping, but not those that involve colours (such as
demosaic, or colour matrices).

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-06-28 19:33:42 +03:00
Kieran Bingham
cbdc93e9d1 libcamera/base: Move utils to the base library
Move the utils functionality to the libcamera/base library.

Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-06-25 16:11:02 +01:00
Hirokazu Honda
5d0eb40249 libcamera: CameraSensor: Enable retrieving supported test pattern modes
This enables retrieving supported test pattern modes through
CameraSensorInfo.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-06-14 14:10:58 +02:00
Umang Jain
378f572e7f ipa: ipc: Rename CameraSensorInfo to IPACameraSensorInfo
This matches the naming convention for IPA IPC.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Acked-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-05-24 14:13:32 +03:00
Umang Jain
6449590b63 ipa: mojom: Move CameraSensorInfo struct exclusively to IPA IPC
CameraSensorInfo structure is designed to pass in camera sensor related
information from pipeline-handler to IPA. Since the pipeline-handler
and IPA are connected via mojom IPC IPA interface, the interface
itself provides a more suitable placement of CameraSensorInfo,
instead of camera_sensor.h (which is a libcamera internal header
ultimately, at this point).

As CameraSensorInfo is already defined in core.mojom, it is just
a matter of removing [skipHeader] tag to allow code-generation
of CameraSensorInfo.

Finally, update header paths to include CameraSensorInfo definition
from IPA interfaces instead of "libcamera/internal/camera_sensor.h".

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-05-24 14:13:28 +03:00
David Plowman
91122dea97 libcamera: camera_sensor: Fix frame lengths calculated by sensorInfo()
The minimum and maximum vblanking can change when a new format is
applied to the sensor subdevice, so be sure to retrieve up-to-date
values.

The V4L2Device acquires the new updateControlInfo() method to perform
this function, and which the CameraSensor calls automatically if its
setFormat method is used to update the sensor.

However, not all pipeline handlers invoke the setFormat method
directly, so the new method must be made publicly available for
pipeline handlers to call if they need to.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-05-11 02:31:08 +03:00
Jacopo Mondi
cdfcb05bed libcamera: camera_sensor: Register static properties
Register static properties in the CameraSensor class by inspecting the
camera sensor properties database.

Static properties are overridden by properties retrieved from
the kernel interface at run-time if any overlap between the two
sets occurs.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-05-10 15:08:26 +02:00
Jacopo Mondi
c3269524e4 libcamera: camera_sensor: Demote error message
The CameraSensor class is noisy enough in reporting the missing
sensor driver features.

Demote an error message about defaulting the active sensor area when
retrieving the camera sensor info to a warning.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-04-15 15:52:53 +02:00
Jacopo Mondi
285d365186 libcamera: camera_sensor: Do not register Location if not available
Do not register the Location property if not available from the firmware
interface instead of defaulting it to External.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-03-22 08:59:07 +01:00
Jacopo Mondi
f484857994 libcamera: camera_sensor: Cap resolution to max frame size
Since commit 96aecfe365 ("libcamera: camera_sensor: Use active area
size as resolution") the CameraSensor::resolution() method returned the
sensor's active pixel area size.

As the CameraSensor::resolution() method is widely used in the library
code base to retrieve the maximum frame size the sensor can produce,
in case it is smaller than the pixel area size the returned size cannot
be used to configure the sensor correctly.

Fix this by returning the maximum frame resolution the sensor can
produce, or the pixel area size in case the sensor embeds and ISP that
can upscale and the supported maximum frame size is thus larger that
the pixel array size.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-03-08 16:21:13 +01:00
Laurent Pinchart
f490a87fd3 libcamera: camera_sensor: Accept entities exposing the ISP function
Camera sensors can include an ISP, which may be reported as a separate
entity from the pixel array in the media graph.

Support such sensors by accepting MEDIA_ENT_F_PROC_VIDEO_ISP as a valid
entity type. This allows using sensors that can be fully (or at least
meaningfully) configured through the ISP's source pad only. Sensors that
require further configuration, on the ISP sink pad and/or on the pixel
array's source pad, will require further extension to the CameraSensor
class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2021-03-03 22:52:04 +02:00
Laurent Pinchart
96aecfe365 libcamera: camera_sensor: Use active area size as resolution
When a sensor can upscale the image, the native sensor resolution isn't
equal to the largest size reported by the sensor. Use the active area
size instead, and default it to the largest enumerated size if the crop
rectangle targets are not supported.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2021-03-03 22:52:00 +02:00
Paul Elder
edc771ef2f libcamera: camera_sensor: Print warning when orientation is unknown
Print a warning when the orientation of a sensor is unknown. The
location property is still defaulted to external.

Also add a recommended controls list, similar to the optional and
mandatory controls list, to handle controls in a similar situation in
the future.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-02-24 19:38:39 +09:00
Laurent Pinchart
79266225d2 libcamera: camera_sensor: Check control availability from idmap
The presence of mandatory and optional controls is checked in
CameraSensor::validateSensorDriver() by trying to retrieve them. This
causes an error message to be printed in the V4L2Device class if an
optional control isn't present, while this isn't an error.

To fix this, use the control idmap reported by the V4L2Device to check
for controls availability. The function can now print the whole list of
missing controls, making debugging easier.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2021-02-05 01:24:35 +02:00
Laurent Pinchart
5e1f0d8b54 libcamera: camera_sensor: Restrict sensor info to raw sensors
YUV sensors don't provide the necessary information to fill
CameraSensorInfo, as they include an ISP and provide a higher-level API
that doesn't always expose low-level information. The CameraSensor class
makes low-level V4L2 controls mandatory for all sensors, which prevents
usage of YUV sensors with the simple pipeline handler.

Make CameraSensor::sensorInfo() available for raw sensors only. This
won't introduce any regression in pipeline handlers that currently use
the sensorInfo() function as they all operate with raw sensors, and
won't be a limitation for the simple pipeline handler as well as it
doesn't use sensor info. If part of the sensor info (such as the active
pixel array size for instance) becomes useful to expose for YUV sensors
in the future, the sensorInfo() function can be extended to report that
information only and skip data that is only available for raw sensors.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2021-02-05 01:24:35 +02:00
Laurent Pinchart
f19cbd517b libcamera: camera_sensor: Store Bayer pattern in class member
The Bayer pattern is retrieved based on the media bus formats supported
by the sensor, when registering camera sensor properties. To prepare for
its usage elsewhere in the CameraSensor class, store it in a private
member variable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
2021-02-05 01:24:35 +02:00
Naushir Patuck
d7fd40ea2b libcamera: camera_sensor: Add frame length limits to CameraSensorInfo
Sensor frame length is made up of active and inactive (blanking) lines.
The minimum and maximum frame length values may be used by pipeline
handlers to limit frame durations based on the sensor mode capabilities.

Store the minimum and maximum allowable frame length values (in lines)
in the CameraSensorInfo structure. These values are computed in
CameraSensor::sensorInfo() by querying the sensor subdevice
V4L2_CID_VBLANK control limits. This in turn means that V4L2_CID_VBLANK
is now a mandatory subdevice control.

Signed-off-by: Naushir Patuck <naush@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>
2021-02-05 01:23:19 +02:00
Jacopo Mondi
f1b0c7f5e3 libcamera: camera_sensor: Make VBLANK mandatory
Add the V4L2_CID_VBLANK control to the list of mandatory controls
the sensor driver has to report and document the new requirement.

The vertical blanking control is used to calculate the frame duration.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-02-05 00:05:26 +02:00
Niklas Söderlund
d8595ebf20 libcamera: camera_sensor: Expose the camera device
Expose the device backing the CameraSensor instance.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-01-29 15:35:28 +01:00
Jacopo Mondi
021752924b libcamera: camera_sensor: Make V4L2_CID_EXPOSURE mandatory
Add the V4L2_CID_EXPOSURE control to the list of mandatory controls the
sensor driver has to report and document this new requirement.

While at it, re-sort the mandatory V4L2 controls in alphabetical
order in the CameraSensor class and remove the above comment as
the usage of the controls is better reported in the documentation.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-25 14:54:04 +01:00
Jacopo Mondi
db19dcb75d libcamera: CameraSensor: Mention V4L2 in get/setControls()
The current CameraSensor interface for reading and writing controls
is currently based on V4L2 controls.

Mention that more clearly in the documentation and, while at it, re-sort
the documentation to match the methods declaration order.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-25 14:53:16 +01:00
Jacopo Mondi
db6a3bfa6e libcamera: camera_sensor: Initialize VIMC properties
The VIMC driver does not yet support all the features required
for all sensor drivers. As it is the main testing platforms and the
driver changes might take a long time to land in the developments
and testing platforms, temporary close the gap by skipping driver
validation and initializing properties with static information such
as the sensor resolution.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:14 +01:00
Jacopo Mondi
c35123e6f9 libcamera: camera_sensor: Do not default 'rotation'
The 'rotation' property is not critical. Only register it if the
sensor driver reports it.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:14 +01:00
Jacopo Mondi
87ceac9c8c libcamera: camera_sensor: Default 'location' to External
If the sensor driver does not report the camera location default it
to 'External' instead of 'Front'.

As the camera location is used to construct the camera unique name
presented to the user, it makes more sense to report multiple 'External'
cameras instead of multiple 'Front' ones.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:13 +01:00
Jacopo Mondi
8deb7e4331 libcamera: camera_sensor: Default analogue crop rectangle
As support for the V4L2_SEL_TGT_CROP selection target used to read the
sensor analogue crop rectangle is schedule to become mandatory but is
still optional, use the sensor's active area size as fallback value to
allow the creation of the CameraSensorInfo in the case the driver does
not support it.

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:13 +01:00
Jacopo Mondi
125ee6ddd6 libcamera: camera_sensor: Provide fall-back for sensor properties
Support for the V4L2 selection API is currently optional in the
CameraSensor class. Properties registered by using values read through
that API are defaulted in several different places (the Android camera
HAL or the CameraSensor class).

In the future support for the selection API will be made mandatory, but to
give time to sensor drivers in all test platforms to be updated, use
sensor resolution as fallback values for sensor pixel array properties
and cache them as class member variables.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:13 +01:00
Jacopo Mondi
8502d4c52d libcamera: camera_sensor: Validate driver support
The CameraSensor class requires the sensor driver to report
information through V4L2 controls and through the V4L2 selection API,
and uses that information to register Camera properties and to
construct CameraSensorInfo class instances to provide them to the IPA.

Currently, validation of the kernel support happens each time a
feature is requested, with slighly similar debug/error messages
output to the user in case a feature is not supported.

Rationalize this by validating the sensor driver requirements in a
single function

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2021-01-18 10:39:13 +01:00
Jacopo Mondi
0a0264da8d libcamera: camera_sensor: Register ColorFilterArrangement
Inspect the list of media bus codes supported by the camera sensor
in order to deduce the color filter arrangement and register the
ColorFilterArrangement draft property.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-12-30 11:22:52 +01:00
Jacopo Mondi
8aaa41ee9b libcamera: camera_sensor: Initialize PixelArray properties
Initialize pixel array properties 'PixelArraySize' and
'PixelArrayActiveAreas' by inspecting the V4L2 CROP_BOUNDS and
CROP_DEFAULT selection targets.

The properties are registered only if the sensor subdevice support
the above mentioned selection targets.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-12-07 14:26:33 +01:00
Jacopo Mondi
3cb48fb921 libcamera: camera_sensor: Break out properties initialization
Break out initialization to its own function in preparation to
add more properties.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-12-07 14:26:33 +01:00
Jacopo Mondi
b33a5c4153 libcamera: camera_sensor: Adjust CameraSensorInfo::analogCrop
The CameraSensorInfo::analogCrop top-left corner is defined relatively
to the sensor active area.

The analogCrop rectangle is constucted by retrieving the V4L2
selection target V4L2_SEL_TGT_CROP which is instead defined relatively
to the whole sensor's pixel array size.

Adjust the the analogCrop rectangle subtracting from its top-left corner
the active area distance from the full pixel array.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
2020-12-07 14:26:33 +01:00
Hirokazu Honda
e04bd18589 libcamera: Omit extra semicolons
The end semicolons with LOG_DEFINE_CATEGORY,
LOG_DECLARE_CATEGORY and REGISTER_PIPELINE_HANDLER are
unnecessary.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-10-20 13:15:52 +03:00
Niklas Söderlund
e0913d56c2 libcamera: camera_sensor: Set sensor model property
Set the sensor model property.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-10-02 15:04:41 +02:00
Niklas Söderlund
082a5b2dfe libcamera: camera_sensor: Add accessors for sensor ID
Add an accessors so that the sensor ID can be used outside CameraSensor.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2020-08-05 20:07:13 +02:00
Niklas Söderlund
f23e6127ad libcamera: camera_sensor: Generate a sensor ID
The ID is generated from information in the firmware description of the
sensor if available or from module and model information if the sensor
is virtual (for example VIMC).

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-08-05 20:07:13 +02:00
Niklas Söderlund
dcda73ec14 libcamera: v4l2_subdevice: Replace ImageFormats with a map
Replace the V4L2Subdevice usage of the ImageFormats class with a
std::map and the utils::map_keys() helper.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2020-07-23 16:31:41 +02:00