Message ID | 20210308170728.2212649-3-jacopo@jmondi.org |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thank you for the patch. On Mon, Mar 08, 2021 at 06:07:27PM +0100, Jacopo Mondi wrote: > The camera supported FPS range is crucial to distinguish between > capture templates for preview and video recording. If the pipeline > handler did not specify an available FPS range by registering the > controls::FrameDurations property so far the control was simply not > added to the generated capture template. > > In order to prepare to generate templates for video recording which > require a fixed FPS range, fail earlier in generating any template at > all if the available FPS range is not provided by the Camera. > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/android/camera_device.cpp | 36 +++++++++++++++++++---------------- > 1 file changed, 20 insertions(+), 16 deletions(-) > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp > index c72e0c73eb5e..0621ec26feb8 100644 > --- a/src/android/camera_device.cpp > +++ b/src/android/camera_device.cpp > @@ -1386,6 +1386,26 @@ CameraMetadata *CameraDevice::requestTemplatePreview() > return nullptr; > } > > + /* Get the FPS range registered in the static metadata. */ > + camera_metadata_ro_entry_t entry; > + bool found = staticMetadata_->getEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, > + &entry); > + if (!found) { > + LOG(HAL, Error) << "Cannot create capture template without FPS range"; > + return nullptr; > + } > + > + /* > + * \todo Depending on the requested CaptureIntent, the FPS range > + * needs to be adjusted. For example, the capture template for > + * video capture intent shall report a fixed value. > + * > + * Also assume the AE_AVAILABLE_TARGET_FPS_RANGE static metadata > + * has been assembled as {{min, max} {max, max}}. > + */ > + requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, > + entry.data.i32, 2); > + > uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; > requestTemplate->addEntry(ANDROID_CONTROL_AE_MODE, > &aeMode, 1); > @@ -1402,22 +1422,6 @@ CameraMetadata *CameraDevice::requestTemplatePreview() > requestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK, > &aeLock, 1); > > - /* Get the FPS range registered in the static metadata. */ > - camera_metadata_ro_entry_t entry; > - bool found = staticMetadata_->getEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, > - &entry); > - if (found) > - /* > - * \todo Depending on the requested CaptureIntent, the FPS range > - * needs to be adjusted. For example, the capture template for > - * video capture intent shall report a fixed value. > - * > - * Also assume the AE_AVAILABLE_TARGET_FPS_RANGE static metadata > - * has been assembled as {{min, max} {max, max}}. > - */ > - requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, > - entry.data.i32, 2); > - > uint8_t aeAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO; > requestTemplate->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE, > &aeAntibandingMode, 1);
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index c72e0c73eb5e..0621ec26feb8 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1386,6 +1386,26 @@ CameraMetadata *CameraDevice::requestTemplatePreview() return nullptr; } + /* Get the FPS range registered in the static metadata. */ + camera_metadata_ro_entry_t entry; + bool found = staticMetadata_->getEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, + &entry); + if (!found) { + LOG(HAL, Error) << "Cannot create capture template without FPS range"; + return nullptr; + } + + /* + * \todo Depending on the requested CaptureIntent, the FPS range + * needs to be adjusted. For example, the capture template for + * video capture intent shall report a fixed value. + * + * Also assume the AE_AVAILABLE_TARGET_FPS_RANGE static metadata + * has been assembled as {{min, max} {max, max}}. + */ + requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, + entry.data.i32, 2); + uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; requestTemplate->addEntry(ANDROID_CONTROL_AE_MODE, &aeMode, 1); @@ -1402,22 +1422,6 @@ CameraMetadata *CameraDevice::requestTemplatePreview() requestTemplate->addEntry(ANDROID_CONTROL_AE_LOCK, &aeLock, 1); - /* Get the FPS range registered in the static metadata. */ - camera_metadata_ro_entry_t entry; - bool found = staticMetadata_->getEntry(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, - &entry); - if (found) - /* - * \todo Depending on the requested CaptureIntent, the FPS range - * needs to be adjusted. For example, the capture template for - * video capture intent shall report a fixed value. - * - * Also assume the AE_AVAILABLE_TARGET_FPS_RANGE static metadata - * has been assembled as {{min, max} {max, max}}. - */ - requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, - entry.data.i32, 2); - uint8_t aeAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO; requestTemplate->addEntry(ANDROID_CONTROL_AE_ANTIBANDING_MODE, &aeAntibandingMode, 1);
The camera supported FPS range is crucial to distinguish between capture templates for preview and video recording. If the pipeline handler did not specify an available FPS range by registering the controls::FrameDurations property so far the control was simply not added to the generated capture template. In order to prepare to generate templates for video recording which require a fixed FPS range, fail earlier in generating any template at all if the available FPS range is not provided by the Camera. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> --- src/android/camera_device.cpp | 36 +++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-)