[libcamera-devel] [PATCH 6/8] android: camera_manager: Replace hardcoded stream configuration
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jun 4 04:18:57 CEST 2020
Hi Jacopo,
Thank you for the patch.
On Tue, May 26, 2020 at 04:22:35PM +0200, Jacopo Mondi wrote:
> Replace the hardcoded stream configuration map with the information
> collected at CameraDevice initialization time.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> src/android/camera_device.cpp | 38 ++++++++++++++++++-----------------
> 1 file changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 6cc377820210..f8a52342abe5 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -623,23 +623,22 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
> &maxDigitalZoom, 1);
>
> - std::vector<uint32_t> availableStreamFormats = {
> - ANDROID_SCALER_AVAILABLE_FORMATS_BLOB,
> - ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888,
> - ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED,
> - };
> + std::vector<uint32_t> availableStreamFormats;
> + for (const auto &entry : streamConfigurations_)
> + availableStreamFormats.push_back(entry.androidScalerCode);
std::transform(streamConfigurations_.begin(), streamConfigurations_.end(),
std::back_inserter(availableStreamFormats),
[](const auto &entry) { return entry.androidScalerCode; });
Up to you.
> staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_FORMATS,
> availableStreamFormats.data(),
> availableStreamFormats.size());
>
> - std::vector<uint32_t> availableStreamConfigurations = {
> - ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920,
> - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
> - ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888, 2560, 1920,
> - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
> - ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED, 2560, 1920,
> - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
> - };
> + std::vector<uint32_t> availableStreamConfigurations;
If you want to make this a bit more efficient, you could call
availableStreamConfigurations.reserve(streamConfigurations_.size() * 4);
> + for (const auto &entry : streamConfigurations_) {
> + availableStreamConfigurations.push_back(entry.androidScalerCode);
> + availableStreamConfigurations.push_back(entry.resolution.width);
> + availableStreamConfigurations.push_back(entry.resolution.height);
> + availableStreamConfigurations.push_back(entry.input ?
> + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT :
> + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT);
This is where I would hardcode OUTPUT (see review of previous patches).
> + }
> staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
> availableStreamConfigurations.data(),
> availableStreamConfigurations.size());
> @@ -651,11 +650,14 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
> availableStallDurations.data(),
> availableStallDurations.size());
>
> - std::vector<int64_t> minFrameDurations = {
> - ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920, 33333333,
> - ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED, 2560, 1920, 33333333,
> - ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888, 2560, 1920, 33333333,
> - };
> + /* \todo Collect the minimum frame duration from the camera. */
> + std::vector<int64_t> minFrameDurations;
> + for (const auto &entry : streamConfigurations_) {
> + minFrameDurations.push_back(entry.androidScalerCode);
> + minFrameDurations.push_back(entry.resolution.width);
> + minFrameDurations.push_back(entry.resolution.height);
> + minFrameDurations.push_back(33333333);
> + }
> staticMetadata_->addEntry(ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS,
> minFrameDurations.data(),
> minFrameDurations.size());
Very nice :-)
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list