From patchwork Wed Sep 4 14:18:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1924 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E896661567 for ; Wed, 4 Sep 2019 16:17:00 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 18B8E1C0010; Wed, 4 Sep 2019 14:16:58 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com, =?utf-8?q?Niklas_S=C3=B6derlund?= , Laurent Pinchart Date: Wed, 4 Sep 2019 16:18:18 +0200 Message-Id: <20190904141825.20697-2-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 1/8] android: camera_device: Add missing static metadata X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:01 -0000 Add all the static metadata keys part of the BC (backward compatible) metadata group, which represent the minimum requirement for devices supporting the LIMITED hardware level. Reviewed-by: Niklas Söderlund Acked-by: Laurent Pinchart Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 272 +++++++++++++++++++++++++++++++--- 1 file changed, 248 insertions(+), 24 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index c27175ac090d..15f57a7fe731 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -134,6 +134,149 @@ camera_metadata_t *CameraDevice::getStaticMetadata() staticMetadata_ = allocate_camera_metadata(STATIC_ENTRY_CAP, STATIC_DATA_CAP); + /* Color correction static metadata. */ + std::vector aberrationModes = { + ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES, + aberrationModes.data(), aberrationModes.size()); + METADATA_ASSERT(ret); + + /* Control static metadata. */ + std::vector aeAvailableAntiBandingModes = { + ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF, + ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ, + ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ, + ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, + aeAvailableAntiBandingModes.data(), + aeAvailableAntiBandingModes.size()); + METADATA_ASSERT(ret); + + std::vector aeAvailableModes = { + ANDROID_CONTROL_AE_MODE_ON, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_AVAILABLE_MODES, + aeAvailableModes.data(), aeAvailableModes.size()); + METADATA_ASSERT(ret); + + std::vector availableAeFpsTarget = { + 15, 30, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, + availableAeFpsTarget.data(), + availableAeFpsTarget.size()); + METADATA_ASSERT(ret); + + std::vector aeCompensationRange = { + 0, 0, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_COMPENSATION_RANGE, + aeCompensationRange.data(), + aeCompensationRange.size()); + METADATA_ASSERT(ret); + + const camera_metadata_rational_t aeCompensationStep[] = { + { 0, 1 } + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_COMPENSATION_STEP, + aeCompensationStep, 1); + METADATA_ASSERT(ret); + + std::vector availableAfModes = { + ANDROID_CONTROL_AF_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AF_AVAILABLE_MODES, + availableAfModes.data(), availableAfModes.size()); + METADATA_ASSERT(ret); + + std::vector availableEffects = { + ANDROID_CONTROL_EFFECT_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AVAILABLE_EFFECTS, + availableEffects.data(), availableEffects.size()); + METADATA_ASSERT(ret); + + std::vector availableSceneModes = { + ANDROID_CONTROL_SCENE_MODE_DISABLED, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AVAILABLE_SCENE_MODES, + availableSceneModes.data(), availableSceneModes.size()); + METADATA_ASSERT(ret); + + std::vector availableStabilizationModes = { + ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, + availableStabilizationModes.data(), + availableStabilizationModes.size()); + METADATA_ASSERT(ret); + + std::vector availableAwbModes = { + ANDROID_CONTROL_AWB_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AWB_AVAILABLE_MODES, + availableAwbModes.data(), availableAwbModes.size()); + METADATA_ASSERT(ret); + + std::vector availableMaxRegions = { + 0, 0, 0, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_MAX_REGIONS, + availableMaxRegions.data(), availableMaxRegions.size()); + METADATA_ASSERT(ret); + + std::vector sceneModesOverride = { + ANDROID_CONTROL_AE_MODE_ON, + ANDROID_CONTROL_AWB_MODE_AUTO, + ANDROID_CONTROL_AF_MODE_AUTO, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_SCENE_MODE_OVERRIDES, + sceneModesOverride.data(), sceneModesOverride.size()); + METADATA_ASSERT(ret); + + uint8_t aeLockAvailable = ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AE_LOCK_AVAILABLE, + &aeLockAvailable, 1); + METADATA_ASSERT(ret); + + uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AWB_LOCK_AVAILABLE, + &awbLockAvailable, 1); + METADATA_ASSERT(ret); + + char availableControlModes = ANDROID_CONTROL_MODE_AUTO; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_CONTROL_AVAILABLE_MODES, + &availableControlModes, 1); + METADATA_ASSERT(ret); + + /* JPEG static metadata. */ + std::vector availableThumbnailSizes = { + 0, 0, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, + availableThumbnailSizes.data(), + availableThumbnailSizes.size()); + METADATA_ASSERT(ret); + /* Sensor static metadata. */ int32_t pixelArraySize[] = { 2592, 1944, @@ -179,6 +322,47 @@ camera_metadata_t *CameraDevice::getStaticMetadata() &orientation, 1); METADATA_ASSERT(ret); + std::vector testPatterModes = { + ANDROID_SENSOR_TEST_PATTERN_MODE_OFF, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES, + testPatterModes.data(), testPatterModes.size()); + METADATA_ASSERT(ret); + + std::vector physicalSize = { + 2592, 1944, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SENSOR_INFO_PHYSICAL_SIZE, + physicalSize.data(), physicalSize.size()); + METADATA_ASSERT(ret); + + uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE, + ×tampSource, 1); + METADATA_ASSERT(ret); + + /* Statistics static metadata. */ + uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES, + &faceDetectMode, 1); + METADATA_ASSERT(ret); + + int32_t maxFaceCount = 0; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, + &maxFaceCount, 1); + METADATA_ASSERT(ret); + + /* Sync static metadata. */ + int32_t maxLatency = ANDROID_SYNC_MAX_LATENCY_UNKNOWN; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SYNC_MAX_LATENCY, &maxLatency, 1); + METADATA_ASSERT(ret); + /* Flash static metadata. */ char flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE; ret = add_camera_metadata_entry(staticMetadata_, @@ -187,50 +371,63 @@ camera_metadata_t *CameraDevice::getStaticMetadata() METADATA_ASSERT(ret); /* Lens static metadata. */ - float fn = 2.53 / 100; + std::vector lensApertures = { + 2.53 / 100, + }; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_LENS_INFO_AVAILABLE_APERTURES, &fn, 1); + ANDROID_LENS_INFO_AVAILABLE_APERTURES, + lensApertures.data(), lensApertures.size()); METADATA_ASSERT(ret); - /* Control metadata. */ - char controlMetadata = ANDROID_CONTROL_MODE_AUTO; + uint8_t lensFacing = ANDROID_LENS_FACING_FRONT; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_CONTROL_AVAILABLE_MODES, - &controlMetadata, 1); + ANDROID_LENS_FACING, &lensFacing, 1); METADATA_ASSERT(ret); - char availableAntiBandingModes[] = { - ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF, - ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ, - ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ, - ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO, + std::vector lensFocalLenghts = { + 1, }; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, - availableAntiBandingModes, 4); + ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, + lensFocalLenghts.data(), + lensFocalLenghts.size()); METADATA_ASSERT(ret); - char aeAvailableModes[] = { - ANDROID_CONTROL_AE_MODE_ON, - ANDROID_CONTROL_AE_MODE_OFF, + std::vector opticalStabilizations = { + ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF, }; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_CONTROL_AE_AVAILABLE_MODES, - aeAvailableModes, 2); + ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, + opticalStabilizations.data(), + opticalStabilizations.size()); METADATA_ASSERT(ret); - controlMetadata = ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE; + float hypeFocalDistance = 0; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_CONTROL_AE_LOCK_AVAILABLE, - &controlMetadata, 1); + ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, + &hypeFocalDistance, 1); METADATA_ASSERT(ret); - uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; + float minFocusDistance = 0; ret = add_camera_metadata_entry(staticMetadata_, - ANDROID_CONTROL_AWB_LOCK_AVAILABLE, - &awbLockAvailable, 1); + ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, + &minFocusDistance, 1); + METADATA_ASSERT(ret); + + /* Noise reduction modes. */ + uint8_t noiseReductionModes = ANDROID_NOISE_REDUCTION_MODE_OFF; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES, + &noiseReductionModes, 1); + METADATA_ASSERT(ret); /* Scaler static metadata. */ + float maxDigitalZoom = 1; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, + &maxDigitalZoom, 1); + METADATA_ASSERT(ret); + std::vector availableStreamFormats = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888, @@ -275,12 +472,39 @@ camera_metadata_t *CameraDevice::getStaticMetadata() minFrameDurations.data(), minFrameDurations.size()); METADATA_ASSERT(ret); + uint8_t croppingType = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_SCALER_CROPPING_TYPE, &croppingType, 1); + METADATA_ASSERT(ret); + /* Info static metadata. */ uint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL, &supportedHWLevel, 1); + /* Request static metadata. */ + int32_t partialResultCount = 1; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_PARTIAL_RESULT_COUNT, + &partialResultCount, 1); + METADATA_ASSERT(ret); + + uint8_t maxPipelineDepth = 2; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_PIPELINE_MAX_DEPTH, + &maxPipelineDepth, 1); + METADATA_ASSERT(ret); + + std::vector availableCapabilities = { + ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_AVAILABLE_CAPABILITIES, + availableCapabilities.data(), + availableCapabilities.size()); + METADATA_ASSERT(ret); + return staticMetadata_; } From patchwork Wed Sep 4 14:18:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1925 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 84FB760BB2 for ; Wed, 4 Sep 2019 16:17:02 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 18C4C1C0011; Wed, 4 Sep 2019 14:17:00 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com, Laurent Pinchart Date: Wed, 4 Sep 2019 16:18:19 +0200 Message-Id: <20190904141825.20697-3-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 2/8] android: camera_device: Use correct sizes for static metadata X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:02 -0000 Use more opportune sizes for the static metadata pack, and for the dynamic metadata sizes which where wrongly set to use the ones defined for the static pack. Acked-by: Laurent Pinchart Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 15f57a7fe731..dee60e3d2931 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -128,11 +128,11 @@ camera_metadata_t *CameraDevice::getStaticMetadata() * more. */ - /* \todo Use correct sizes */ - #define STATIC_ENTRY_CAP 256 - #define STATIC_DATA_CAP 6688 - staticMetadata_ = allocate_camera_metadata(STATIC_ENTRY_CAP, - STATIC_DATA_CAP); + /* + * \todo Keep this in sync with the actual number of entries. + * Currently: 46 entries, 390 bytes + */ + staticMetadata_ = allocate_camera_metadata(50, 500); /* Color correction static metadata. */ std::vector aberrationModes = { @@ -966,11 +966,11 @@ camera_metadata_t *CameraDevice::getResultMetadata(int frame_number, { int ret; - /* \todo Use correct sizes */ - #define RESULT_ENTRY_CAP 256 - #define RESULT_DATA_CAP 6688 - camera_metadata_t *resultMetadata = - allocate_camera_metadata(STATIC_ENTRY_CAP, STATIC_DATA_CAP); + /* + * \todo Keep this in sync with the actual number of entries. + * Currently: 13 entries, 36 bytes + */ + camera_metadata_t *resultMetadata = allocate_camera_metadata(15, 50); const uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AE_STATE, From patchwork Wed Sep 4 14:18:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1926 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 13B4E61567 for ; Wed, 4 Sep 2019 16:17:04 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A79531C0009; Wed, 4 Sep 2019 14:17:02 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com Date: Wed, 4 Sep 2019 16:18:20 +0200 Message-Id: <20190904141825.20697-4-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 3/8] android: camera_device: Remove tags from request template X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:04 -0000 Remove metadata tags wrongly added to the request template constructed by the libcamera HAL. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 97 ----------------------------------- 1 file changed, 97 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index dee60e3d2931..bd69198ec482 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -557,39 +557,6 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) return nullptr; } - /* Set to 0 the number of 'processed and stalling' streams (ie JPEG). */ - int32_t maxOutStream[] = { 0, 2, 0 }; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS, - maxOutStream, 3); - METADATA_ASSERT(ret); - - uint8_t maxPipelineDepth = 5; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_PIPELINE_MAX_DEPTH, - &maxPipelineDepth, 1); - METADATA_ASSERT(ret); - - int32_t inputStreams = 0; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS, - &inputStreams, 1); - METADATA_ASSERT(ret); - - int32_t partialResultCount = 1; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_PARTIAL_RESULT_COUNT, - &partialResultCount, 1); - METADATA_ASSERT(ret); - - uint8_t availableCapabilities[] = { - ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE, - }; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_AVAILABLE_CAPABILITIES, - availableCapabilities, 1); - METADATA_ASSERT(ret); - uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; ret = add_camera_metadata_entry(requestTemplate_, ANDROID_CONTROL_AE_MODE, @@ -632,12 +599,6 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) &awbLock, 1); METADATA_ASSERT(ret); - uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_CONTROL_AWB_LOCK_AVAILABLE, - &awbLockAvailable, 1); - METADATA_ASSERT(ret); - uint8_t flashMode = ANDROID_FLASH_MODE_OFF; ret = add_camera_metadata_entry(requestTemplate_, ANDROID_FLASH_MODE, @@ -655,64 +616,6 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) &captureIntent, 1); METADATA_ASSERT(ret); - /* - * This is quite hard to list at the moment wihtout knowing what - * we could control. - * - * For now, just list in the available Request keys and in the available - * result keys the control and reporting of the AE algorithm. - */ - std::vector availableRequestKeys = { - ANDROID_CONTROL_AE_MODE, - ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, - ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, - ANDROID_CONTROL_AE_LOCK, - ANDROID_CONTROL_AF_TRIGGER, - ANDROID_CONTROL_AWB_MODE, - ANDROID_CONTROL_AWB_LOCK, - ANDROID_CONTROL_AWB_LOCK_AVAILABLE, - ANDROID_CONTROL_CAPTURE_INTENT, - ANDROID_FLASH_MODE, - ANDROID_STATISTICS_FACE_DETECT_MODE, - }; - - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, - availableRequestKeys.data(), - availableRequestKeys.size()); - METADATA_ASSERT(ret); - - std::vector availableResultKeys = { - ANDROID_CONTROL_AE_MODE, - ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, - ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, - ANDROID_CONTROL_AE_LOCK, - ANDROID_CONTROL_AF_TRIGGER, - ANDROID_CONTROL_AWB_MODE, - ANDROID_CONTROL_AWB_LOCK, - ANDROID_CONTROL_AWB_LOCK_AVAILABLE, - ANDROID_CONTROL_CAPTURE_INTENT, - ANDROID_FLASH_MODE, - ANDROID_STATISTICS_FACE_DETECT_MODE, - }; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_AVAILABLE_RESULT_KEYS, - availableResultKeys.data(), - availableResultKeys.size()); - METADATA_ASSERT(ret); - - /* - * \todo The available characteristics are be the tags reported - * as part of the static metadata reported at hal_get_camera_info() - * time. As of now, report an empty list. - */ - std::vector availableCharacteristicsKeys = {}; - ret = add_camera_metadata_entry(requestTemplate_, - ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, - availableCharacteristicsKeys.data(), - availableCharacteristicsKeys.size()); - METADATA_ASSERT(ret); - return requestTemplate_; } From patchwork Wed Sep 4 14:18:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1927 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3F83F61926 for ; Wed, 4 Sep 2019 16:17:06 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 60D131C0017; Wed, 4 Sep 2019 14:17:04 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com Date: Wed, 4 Sep 2019 16:18:21 +0200 Message-Id: <20190904141825.20697-5-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 4/8] android: camera_device: Add missing tags in request template X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:06 -0000 Add two missing tags from the request template generated by the HAL. The tags are reported as missing by the cros_camera_test tool. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index bd69198ec482..969c8192c316 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -611,6 +611,17 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) &faceDetectMode, 1); METADATA_ASSERT(ret); + uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_OFF; + ret = add_camera_metadata_entry(requestTemplate_, + ANDROID_NOISE_REDUCTION_MODE, &noiseReduction, 1); + METADATA_ASSERT(ret); + + uint8_t aberrationMode = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF; + ret = add_camera_metadata_entry(requestTemplate_, + ANDROID_COLOR_CORRECTION_ABERRATION_MODE, + &aberrationMode, 1); + METADATA_ASSERT(ret); + ret = add_camera_metadata_entry(requestTemplate_, ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); From patchwork Wed Sep 4 14:18:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1928 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id D32C260BB2 for ; Wed, 4 Sep 2019 16:17:07 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 643081C0012; Wed, 4 Sep 2019 14:17:06 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com Date: Wed, 4 Sep 2019 16:18:22 +0200 Message-Id: <20190904141825.20697-6-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 5/8] android: camera_device: Use precise sizes for request template X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:08 -0000 Use more opportune sizes, manually calculated, for the generated request template. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 969c8192c316..5f8d19b9ef3d 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -547,11 +547,11 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) if (requestTemplate_) return requestTemplate_; - /* \todo Use correct sizes */ - #define REQUEST_TEMPLATE_ENTRIES 30 - #define REQUEST_TEMPLATE_DATA 2048 - requestTemplate_ = allocate_camera_metadata(REQUEST_TEMPLATE_ENTRIES, - REQUEST_TEMPLATE_DATA); + /* + * \todo Keep this in sync with the actual number of entries. + * Currently: 12 entries, 15 bytes + */ + requestTemplate_ = allocate_camera_metadata(15, 20); if (!requestTemplate_) { LOG(HAL, Error) << "Failed to allocate template metadata"; return nullptr; From patchwork Wed Sep 4 14:18:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1929 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DE92960BB2 for ; Wed, 4 Sep 2019 16:17:09 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 08F9D1C000B; Wed, 4 Sep 2019 14:17:07 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com Date: Wed, 4 Sep 2019 16:18:23 +0200 Message-Id: <20190904141825.20697-7-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 6/8] android: camera_device: Fix handling of request template X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:10 -0000 According to the Android camera HALv3 documentation, the request template metadata pack should not be modified after it is returned to the camera stack from the HAL. Currently, the same metadata pack is used for all types of template request, without updating the capture intent there contained to match the requested template type, as correctly reported by the cros_camera_test test application. In order to avoid modifying the single request template already returned to the camera stack in order to update the capture intent it contains, create a map that associates a dedicated template to each supported capture type. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 98 +++++++++++++++++------------------ src/android/camera_device.h | 2 +- 2 files changed, 49 insertions(+), 51 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 5f8d19b9ef3d..c4f11e91bcf1 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -51,7 +51,7 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr &camera) : running_(false), camera_(camera), staticMetadata_(nullptr), - requestTemplate_(nullptr) + requestTemplates_() { camera_->requestCompleted.connect(this, &CameraDevice::requestComplete); } @@ -62,9 +62,9 @@ CameraDevice::~CameraDevice() free_camera_metadata(staticMetadata_); staticMetadata_ = nullptr; - if (requestTemplate_) - free_camera_metadata(requestTemplate_); - requestTemplate_ = nullptr; + for (auto &it : requestTemplates_) + free_camera_metadata(it.second); + requestTemplates_.clear(); } /* @@ -515,119 +515,117 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) { int ret; - /* - * \todo Inspect type and pick the right metadata pack. - * As of now just use a single one for all templates. - */ - uint8_t captureIntent; - switch (type) { - case CAMERA3_TEMPLATE_PREVIEW: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; - break; - case CAMERA3_TEMPLATE_STILL_CAPTURE: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; - break; - case CAMERA3_TEMPLATE_VIDEO_RECORD: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; - break; - case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; - break; - case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; - break; - case CAMERA3_TEMPLATE_MANUAL: - captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_MANUAL; - break; - default: - LOG(HAL, Error) << "Invalid template request type: " << type; - return nullptr; - } - - if (requestTemplate_) - return requestTemplate_; + if (requestTemplates_.find(type) != requestTemplates_.end()) + return requestTemplates_[type]; /* * \todo Keep this in sync with the actual number of entries. * Currently: 12 entries, 15 bytes */ - requestTemplate_ = allocate_camera_metadata(15, 20); - if (!requestTemplate_) { + camera_metadata_t * requestTemplate = allocate_camera_metadata(15, 20); + if (!requestTemplate) { LOG(HAL, Error) << "Failed to allocate template metadata"; return nullptr; } uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_MODE, &aeMode, 1); METADATA_ASSERT(ret); int32_t aeExposureCompensation = 0; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExposureCompensation, 1); METADATA_ASSERT(ret); uint8_t aePrecaptureTrigger = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, &aePrecaptureTrigger, 1); METADATA_ASSERT(ret); uint8_t aeLock = ANDROID_CONTROL_AE_LOCK_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_LOCK, &aeLock, 1); METADATA_ASSERT(ret); uint8_t afTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AF_TRIGGER, &afTrigger, 1); METADATA_ASSERT(ret); uint8_t awbMode = ANDROID_CONTROL_AWB_MODE_AUTO; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AWB_MODE, &awbMode, 1); METADATA_ASSERT(ret); uint8_t awbLock = ANDROID_CONTROL_AWB_LOCK_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AWB_LOCK, &awbLock, 1); METADATA_ASSERT(ret); uint8_t flashMode = ANDROID_FLASH_MODE_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_FLASH_MODE, &flashMode, 1); METADATA_ASSERT(ret); uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_STATISTICS_FACE_DETECT_MODE, &faceDetectMode, 1); METADATA_ASSERT(ret); uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_NOISE_REDUCTION_MODE, &noiseReduction, 1); METADATA_ASSERT(ret); uint8_t aberrationMode = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF; - ret = add_camera_metadata_entry(requestTemplate_, + ret = add_camera_metadata_entry(requestTemplate, ANDROID_COLOR_CORRECTION_ABERRATION_MODE, &aberrationMode, 1); METADATA_ASSERT(ret); - ret = add_camera_metadata_entry(requestTemplate_, + /* Use the capture intent matching the requested template type. */ + uint8_t captureIntent; + switch (type) { + case CAMERA3_TEMPLATE_PREVIEW: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW; + break; + case CAMERA3_TEMPLATE_STILL_CAPTURE: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE; + break; + case CAMERA3_TEMPLATE_VIDEO_RECORD: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD; + break; + case CAMERA3_TEMPLATE_VIDEO_SNAPSHOT: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT; + break; + case CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG; + break; + case CAMERA3_TEMPLATE_MANUAL: + captureIntent = ANDROID_CONTROL_CAPTURE_INTENT_MANUAL; + break; + default: + LOG(HAL, Error) << "Invalid template request type: " << type; + return nullptr; + } + ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); METADATA_ASSERT(ret); - return requestTemplate_; + requestTemplates_[type] = requestTemplate; + + return requestTemplate; } /* diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 7897ba9dc5c7..64382bbac76a 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -66,7 +66,7 @@ private: std::unique_ptr config_; camera_metadata_t *staticMetadata_; - camera_metadata_t *requestTemplate_; + std::map requestTemplates_; const camera3_callback_ops_t *callbacks_; }; From patchwork Wed Sep 4 14:18:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1930 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6A70660BB2 for ; Wed, 4 Sep 2019 16:17:11 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 151DD1C001C; Wed, 4 Sep 2019 14:17:09 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com Date: Wed, 4 Sep 2019 16:18:24 +0200 Message-Id: <20190904141825.20697-8-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 7/8] android: camera_device: Free metadata in error path X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:11 -0000 The current assertion macro on camera metadata handling operations does not free the allocated metadata pack in case of errors. Fix this by freeing the metadata pack in the error path. Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 140 +++++++++++++++++----------------- src/android/camera_device.h | 3 +- 2 files changed, 72 insertions(+), 71 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index c4f11e91bcf1..a153972fbef0 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -141,7 +141,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES, aberrationModes.data(), aberrationModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Control static metadata. */ std::vector aeAvailableAntiBandingModes = { @@ -154,7 +154,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, aeAvailableAntiBandingModes.data(), aeAvailableAntiBandingModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector aeAvailableModes = { ANDROID_CONTROL_AE_MODE_ON, @@ -162,7 +162,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_AVAILABLE_MODES, aeAvailableModes.data(), aeAvailableModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableAeFpsTarget = { 15, 30, @@ -171,7 +171,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, availableAeFpsTarget.data(), availableAeFpsTarget.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector aeCompensationRange = { 0, 0, @@ -180,7 +180,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_COMPENSATION_RANGE, aeCompensationRange.data(), aeCompensationRange.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); const camera_metadata_rational_t aeCompensationStep[] = { { 0, 1 } @@ -188,7 +188,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_COMPENSATION_STEP, aeCompensationStep, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableAfModes = { ANDROID_CONTROL_AF_MODE_OFF, @@ -196,7 +196,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AF_AVAILABLE_MODES, availableAfModes.data(), availableAfModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableEffects = { ANDROID_CONTROL_EFFECT_MODE_OFF, @@ -204,7 +204,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AVAILABLE_EFFECTS, availableEffects.data(), availableEffects.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableSceneModes = { ANDROID_CONTROL_SCENE_MODE_DISABLED, @@ -212,7 +212,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AVAILABLE_SCENE_MODES, availableSceneModes.data(), availableSceneModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableStabilizationModes = { ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF, @@ -221,7 +221,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, availableStabilizationModes.data(), availableStabilizationModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableAwbModes = { ANDROID_CONTROL_AWB_MODE_OFF, @@ -229,7 +229,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AWB_AVAILABLE_MODES, availableAwbModes.data(), availableAwbModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableMaxRegions = { 0, 0, 0, @@ -237,7 +237,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_MAX_REGIONS, availableMaxRegions.data(), availableMaxRegions.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector sceneModesOverride = { ANDROID_CONTROL_AE_MODE_ON, @@ -247,25 +247,25 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_SCENE_MODE_OVERRIDES, sceneModesOverride.data(), sceneModesOverride.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t aeLockAvailable = ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_LOCK_AVAILABLE, &aeLockAvailable, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AWB_LOCK_AVAILABLE, &awbLockAvailable, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); char availableControlModes = ANDROID_CONTROL_MODE_AUTO; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AVAILABLE_MODES, &availableControlModes, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* JPEG static metadata. */ std::vector availableThumbnailSizes = { @@ -275,7 +275,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, availableThumbnailSizes.data(), availableThumbnailSizes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Sensor static metadata. */ int32_t pixelArraySize[] = { @@ -284,7 +284,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, &pixelArraySize, 2); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); int32_t sensorSizes[] = { 0, 0, 2560, 1920, @@ -292,7 +292,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, &sensorSizes, 4); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); int32_t sensitivityRange[] = { 32, 2400, @@ -300,13 +300,13 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_SENSITIVITY_RANGE, &sensitivityRange, 2); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint16_t filterArr = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, &filterArr, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); int64_t exposureTimeRange[] = { 100000, 200000000, @@ -314,13 +314,13 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, &exposureTimeRange, 2); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); int32_t orientation = 0; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_ORIENTATION, &orientation, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector testPatterModes = { ANDROID_SENSOR_TEST_PATTERN_MODE_OFF, @@ -328,7 +328,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES, testPatterModes.data(), testPatterModes.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector physicalSize = { 2592, 1944, @@ -336,39 +336,39 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_PHYSICAL_SIZE, physicalSize.data(), physicalSize.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t timestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE, ×tampSource, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Statistics static metadata. */ uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES, &faceDetectMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); int32_t maxFaceCount = 0; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, &maxFaceCount, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Sync static metadata. */ int32_t maxLatency = ANDROID_SYNC_MAX_LATENCY_UNKNOWN; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SYNC_MAX_LATENCY, &maxLatency, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Flash static metadata. */ char flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_FLASH_INFO_AVAILABLE, &flashAvailable, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Lens static metadata. */ std::vector lensApertures = { @@ -377,12 +377,12 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_LENS_INFO_AVAILABLE_APERTURES, lensApertures.data(), lensApertures.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t lensFacing = ANDROID_LENS_FACING_FRONT; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_LENS_FACING, &lensFacing, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector lensFocalLenghts = { 1, @@ -391,7 +391,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, lensFocalLenghts.data(), lensFocalLenghts.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector opticalStabilizations = { ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF, @@ -400,33 +400,33 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, opticalStabilizations.data(), opticalStabilizations.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); float hypeFocalDistance = 0; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, &hypeFocalDistance, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); float minFocusDistance = 0; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, &minFocusDistance, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Noise reduction modes. */ uint8_t noiseReductionModes = ANDROID_NOISE_REDUCTION_MODE_OFF; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES, &noiseReductionModes, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Scaler static metadata. */ float maxDigitalZoom = 1; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, &maxDigitalZoom, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableStreamFormats = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, @@ -437,7 +437,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_FORMATS, availableStreamFormats.data(), availableStreamFormats.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableStreamConfigurations = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920, @@ -451,7 +451,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, availableStreamConfigurations.data(), availableStreamConfigurations.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableStallDurations = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920, 33333333, @@ -460,7 +460,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_STALL_DURATIONS, availableStallDurations.data(), availableStallDurations.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector minFrameDurations = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920, 33333333, @@ -470,12 +470,12 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, minFrameDurations.data(), minFrameDurations.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t croppingType = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_CROPPING_TYPE, &croppingType, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); /* Info static metadata. */ uint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED; @@ -488,13 +488,13 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ret = add_camera_metadata_entry(staticMetadata_, ANDROID_REQUEST_PARTIAL_RESULT_COUNT, &partialResultCount, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); uint8_t maxPipelineDepth = 2; ret = add_camera_metadata_entry(staticMetadata_, ANDROID_REQUEST_PIPELINE_MAX_DEPTH, &maxPipelineDepth, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); std::vector availableCapabilities = { ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE, @@ -503,7 +503,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_REQUEST_AVAILABLE_CAPABILITIES, availableCapabilities.data(), availableCapabilities.size()); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, staticMetadata_); return staticMetadata_; } @@ -532,66 +532,66 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_MODE, &aeMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); int32_t aeExposureCompensation = 0; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExposureCompensation, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t aePrecaptureTrigger = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, &aePrecaptureTrigger, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t aeLock = ANDROID_CONTROL_AE_LOCK_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AE_LOCK, &aeLock, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t afTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AF_TRIGGER, &afTrigger, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t awbMode = ANDROID_CONTROL_AWB_MODE_AUTO; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AWB_MODE, &awbMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t awbLock = ANDROID_CONTROL_AWB_LOCK_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_AWB_LOCK, &awbLock, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t flashMode = ANDROID_FLASH_MODE_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_FLASH_MODE, &flashMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t faceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_STATISTICS_FACE_DETECT_MODE, &faceDetectMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t noiseReduction = ANDROID_NOISE_REDUCTION_MODE_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_NOISE_REDUCTION_MODE, &noiseReduction, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); uint8_t aberrationMode = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF; ret = add_camera_metadata_entry(requestTemplate, ANDROID_COLOR_CORRECTION_ABERRATION_MODE, &aberrationMode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); /* Use the capture intent matching the requested template type. */ uint8_t captureIntent; @@ -621,7 +621,7 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) ret = add_camera_metadata_entry(requestTemplate, ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, requestTemplate); requestTemplates_[type] = requestTemplate; @@ -887,35 +887,35 @@ camera_metadata_t *CameraDevice::getResultMetadata(int frame_number, const uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AE_STATE, &ae_state, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t ae_lock = ANDROID_CONTROL_AE_LOCK_OFF; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AE_LOCK, &ae_lock, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); uint8_t af_state = ANDROID_CONTROL_AF_STATE_INACTIVE; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AF_STATE, &af_state, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t awb_state = ANDROID_CONTROL_AWB_STATE_CONVERGED; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AWB_STATE, &awb_state, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t awb_lock = ANDROID_CONTROL_AWB_LOCK_OFF; ret = add_camera_metadata_entry(resultMetadata, ANDROID_CONTROL_AWB_LOCK, &awb_lock, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t lens_state = ANDROID_LENS_STATE_STATIONARY; ret = add_camera_metadata_entry(resultMetadata, ANDROID_LENS_STATE, &lens_state, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); int32_t sensorSizes[] = { 0, 0, 2560, 1920, @@ -923,39 +923,39 @@ camera_metadata_t *CameraDevice::getResultMetadata(int frame_number, ret = add_camera_metadata_entry(resultMetadata, ANDROID_SCALER_CROP_REGION, sensorSizes, 4); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); ret = add_camera_metadata_entry(resultMetadata, ANDROID_SENSOR_TIMESTAMP, ×tamp, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); /* 33.3 msec */ const int64_t rolling_shutter_skew = 33300000; ret = add_camera_metadata_entry(resultMetadata, ANDROID_SENSOR_ROLLING_SHUTTER_SKEW, &rolling_shutter_skew, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); /* 16.6 msec */ const int64_t exposure_time = 16600000; ret = add_camera_metadata_entry(resultMetadata, ANDROID_SENSOR_EXPOSURE_TIME, &exposure_time, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t lens_shading_map_mode = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF; ret = add_camera_metadata_entry(resultMetadata, ANDROID_STATISTICS_LENS_SHADING_MAP_MODE, &lens_shading_map_mode, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); const uint8_t scene_flicker = ANDROID_STATISTICS_SCENE_FLICKER_NONE; ret = add_camera_metadata_entry(resultMetadata, ANDROID_STATISTICS_SCENE_FLICKER, &scene_flicker, 1); - METADATA_ASSERT(ret); + METADATA_ASSERT(ret, resultMetadata); return resultMetadata; } diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 64382bbac76a..9880168a7581 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -19,10 +19,11 @@ #include "message.h" -#define METADATA_ASSERT(_r) \ +#define METADATA_ASSERT(_r, _p) \ do { \ if (!(_r)) break; \ LOG(HAL, Error) << "Error: " << __func__ << ":" << __LINE__; \ + free_camera_metadata((_p)); \ return nullptr; \ } while(0); From patchwork Wed Sep 4 14:18:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1931 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 14E6D6192C for ; Wed, 4 Sep 2019 16:17:13 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 90C361C001F; Wed, 4 Sep 2019 14:17:11 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , kamesan@google.com, jcliang@google.com, shik@google.com, wtlee@google.com, Laurent Pinchart Date: Wed, 4 Sep 2019 16:18:25 +0200 Message-Id: <20190904141825.20697-9-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190904141825.20697-1-jacopo@jmondi.org> References: <20190904141825.20697-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 8/8] android: camera_device: Report available keys X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Sep 2019 14:17:13 -0000 Report the list of available static metadata tags (characteristicKeys), of supported controls (requestKeys) and produced metadata (resultKeys) in the static metadata pack. Reviewed-by: Laurent Pinchart Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 99 ++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index a153972fbef0..e7f295fe2ef4 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -130,9 +130,9 @@ camera_metadata_t *CameraDevice::getStaticMetadata() /* * \todo Keep this in sync with the actual number of entries. - * Currently: 46 entries, 390 bytes + * Currently: 49 entries, 666 bytes */ - staticMetadata_ = allocate_camera_metadata(50, 500); + staticMetadata_ = allocate_camera_metadata(50, 700); /* Color correction static metadata. */ std::vector aberrationModes = { @@ -505,6 +505,101 @@ camera_metadata_t *CameraDevice::getStaticMetadata() availableCapabilities.size()); METADATA_ASSERT(ret, staticMetadata_); + std::vector availableCharacteristicsKeys = { + ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES, + ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, + ANDROID_CONTROL_AE_AVAILABLE_MODES, + ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, + ANDROID_CONTROL_AE_COMPENSATION_RANGE, + ANDROID_CONTROL_AE_COMPENSATION_STEP, + ANDROID_CONTROL_AF_AVAILABLE_MODES, + ANDROID_CONTROL_AVAILABLE_EFFECTS, + ANDROID_CONTROL_AVAILABLE_SCENE_MODES, + ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, + ANDROID_CONTROL_AWB_AVAILABLE_MODES, + ANDROID_CONTROL_MAX_REGIONS, + ANDROID_CONTROL_SCENE_MODE_OVERRIDES, + ANDROID_CONTROL_AE_LOCK_AVAILABLE, + ANDROID_CONTROL_AWB_LOCK_AVAILABLE, + ANDROID_CONTROL_AVAILABLE_MODES, + ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, + ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, + ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, + ANDROID_SENSOR_INFO_SENSITIVITY_RANGE, + ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, + ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, + ANDROID_SENSOR_ORIENTATION, + ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES, + ANDROID_SENSOR_INFO_PHYSICAL_SIZE, + ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE, + ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES, + ANDROID_STATISTICS_INFO_MAX_FACE_COUNT, + ANDROID_SYNC_MAX_LATENCY, + ANDROID_FLASH_INFO_AVAILABLE, + ANDROID_LENS_INFO_AVAILABLE_APERTURES, + ANDROID_LENS_FACING, + ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, + ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, + ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE, + ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE, + ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES, + ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, + ANDROID_SCALER_AVAILABLE_FORMATS, + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, + ANDROID_SCALER_AVAILABLE_STALL_DURATIONS, + ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, + ANDROID_SCALER_CROPPING_TYPE, + ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL, + ANDROID_REQUEST_PARTIAL_RESULT_COUNT, + ANDROID_REQUEST_PIPELINE_MAX_DEPTH, + ANDROID_REQUEST_AVAILABLE_CAPABILITIES, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, + availableCharacteristicsKeys.data(), + availableCharacteristicsKeys.size()); + METADATA_ASSERT(ret, staticMetadata_); + + std::vector availableRequestKeys = { + ANDROID_CONTROL_AE_MODE, + ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION, + ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, + ANDROID_CONTROL_AE_LOCK, + ANDROID_CONTROL_AF_TRIGGER, + ANDROID_CONTROL_AWB_MODE, + ANDROID_CONTROL_AWB_LOCK, + ANDROID_FLASH_MODE, + ANDROID_STATISTICS_FACE_DETECT_MODE, + ANDROID_NOISE_REDUCTION_MODE, + ANDROID_COLOR_CORRECTION_ABERRATION_MODE, + ANDROID_CONTROL_CAPTURE_INTENT, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, + availableRequestKeys.data(), + availableRequestKeys.size()); + METADATA_ASSERT(ret, staticMetadata_); + + std::vector availableResultKeys = { + ANDROID_CONTROL_AE_STATE, + ANDROID_CONTROL_AE_LOCK, + ANDROID_CONTROL_AF_STATE, + ANDROID_CONTROL_AWB_STATE, + ANDROID_CONTROL_AWB_LOCK, + ANDROID_LENS_STATE, + ANDROID_SCALER_CROP_REGION, + ANDROID_SENSOR_TIMESTAMP, + ANDROID_SENSOR_ROLLING_SHUTTER_SKEW, + ANDROID_SENSOR_EXPOSURE_TIME, + ANDROID_STATISTICS_LENS_SHADING_MAP_MODE, + ANDROID_STATISTICS_SCENE_FLICKER, + }; + ret = add_camera_metadata_entry(staticMetadata_, + ANDROID_REQUEST_AVAILABLE_RESULT_KEYS, + availableResultKeys.data(), + availableResultKeys.size()); + METADATA_ASSERT(ret, staticMetadata_); + return staticMetadata_; }