[libcamera-devel] [PATCH] android: camera_device: Add pipeline max depth static metadata
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Sep 2 18:59:06 CEST 2019
Hi Jacopo,
On Thu, Aug 29, 2019 at 06:00:56PM +0300, Laurent Pinchart wrote:
> On Wed, Aug 28, 2019 at 05:42:28PM +0200, Jacopo Mondi wrote:
> > On Wed, Aug 28, 2019 at 11:16:20PM +0800, Ren-Pei Zeng wrote:
> >> Thanks for working on this!
> >>
> >> + uint8_t maxPipelineDepth = 1;
> >> Should this keep the original value, i.e. = 5?
> >
> > My understanding is that as long as the HAL reports to support LEGACY
> > mode this should not be a big issue, as the maxDepth is relevant only
> > in regards to the dynamic control android.sync.frameNumber, which we
> > currently don't report and should be probably set to UNKNOWN as long
> > as we work in backward compatibility mode.
> >
> > Is my understanding correct here in your opinion?
> >
> > I chose 1 because we actually don't apply any control at the moment,
> > and the value there should depend on the platform specific pipeline
> > handler characteristics.
>
> The camera HAL documentation mentions that this value is usually at
> least two, to cover the exposure stage and the readout stage. Would that
> be a better default ?
>
> > Why would you prefer to keep a value of 5 here ? I'm not opposed to
> > it, just for my better understanding!
> >
> >> On Wed, Aug 28, 2019 at 10:12 PM Jacopo Mondi <jacopo at jmondi.org> wrote:
> >>
> >>> The ANDROID_REQUEST_PIPELINE_MAX_DEPTH metadata tag was wrongly
> >>> reported in the capture settings template, while it is actually a static
> >>> camera metadata.
> >>>
> >>> As of Chromium R78 the absence of this specific metadata tag causes a
> >>> system crash. Fix this by reporting the maximum pipeline depth in the
> >>> static metadata pack and set its value to 1 as currently no control is
> >>> applied to the image capture pipeline.
> >>>
> >>> Reported-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >>> Suggested-by: Ren-Pei Zeng <kamesan at google.com>
> >>> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> >>>
> >>> ---
> >>> Laurent, as you're running R78 and first reported the crash, could you
> >>> please
> >>> give this a spin and report if the issue is still present?
>
> I'll test this tonight.
It works \o/
Tested-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >>> ---
> >>> src/android/camera_device.cpp | 13 +++++++------
> >>> 1 file changed, 7 insertions(+), 6 deletions(-)
> >>>
> >>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> >>> index c27175ac090d..7c69d0810eee 100644
> >>> --- a/src/android/camera_device.cpp
> >>> +++ b/src/android/camera_device.cpp
> >>> @@ -281,6 +281,13 @@ camera_metadata_t *CameraDevice::getStaticMetadata()
> >>> ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,
> >>> &supportedHWLevel, 1);
> >>>
> >>> + /* Request static metadata. */
> >>> + uint8_t maxPipelineDepth = 1;
> >>> + ret = add_camera_metadata_entry(staticMetadata_,
> >>> + ANDROID_REQUEST_PIPELINE_MAX_DEPTH,
> >>> + &maxPipelineDepth, 1);
> >>> + METADATA_ASSERT(ret);
> >>> +
> >>> return staticMetadata_;
> >>> }
> >>>
> >>> @@ -340,12 +347,6 @@ const camera_metadata_t
> >>> *CameraDevice::constructDefaultRequestSettings(int type)
> >>> 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,
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list