[libcamera-devel] [PATCH v3 8/8] android: camera_device: Add stream mapping log

Jacopo Mondi jacopo at jmondi.org
Thu Sep 24 18:26:15 CEST 2020


Hi Kieran

On Thu, Sep 24, 2020 at 05:10:23PM +0100, Kieran Bingham wrote:
> Hi Jacopo,
>
> On 22/09/2020 10:47, Jacopo Mondi wrote:
> > To ease following how Android stream gets mapped onto libcamera ones
> > add a (quite verbose) printout before queueing a request to libcamera.
> >
> > The output looks like:
> >  0 -  (320x240)[0x00000022] -> (320x240)[NV12] (direct)
> >  1 -  (640x480)[0x00000021] -> (640x480)[NV12] (internal)
>
> Excellent, - that's definitely helpful.
>
> >
> > Reviewed-by: Hirokazu Honda <hiroh at chromium.org>
> > Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> >  src/android/camera_device.cpp | 15 ++++++++++++++-
> >  1 file changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > index 1b35c72a3de6..316d8293843f 100644
> > --- a/src/android/camera_device.cpp
> > +++ b/src/android/camera_device.cpp
> > @@ -1474,9 +1474,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> >  	Request *request =
> >  		camera_->createRequest(reinterpret_cast<uint64_t>(descriptor));
> >
> > +	LOG(HAL, Debug) << "Queueing Request to libcamera with "
> > +			<< descriptor->numBuffers << " streams";
>
> This doesn't feel right.  You're counting the number of android buffers
> to state the number streams being 'queued' to libcamera.

'android buffers' is actually the number of output streams requested
by android

>
> In the event that one libcamera stream is shared (i.e. say a JPEG
> encode) to generate two android streams, this would be wrong.

Isn't this intended ? I do expect something like

Queueing Request to libcamera with 3 streams
 0 - (4160x3104)[0x00000023] -> (4160x3104)[NV12] (direct)
 1 - (4160x3104)[0x00000023] -> (4160x3104)[NV12] (external)
 2 - (4160x3104)[0x00000023] -> (4160x3104)[NV12] (mapped)

Anyway, we cycle on descriptor->numBuffers, and that's what was
intended to be print out..

>
>
>
> >  	for (unsigned int i = 0; i < descriptor->numBuffers; ++i) {
> > +		camera3_stream *camera3Stream = camera3Buffers[i].stream;
> >  		CameraStream *cameraStream =
> > -			static_cast<CameraStream *>(camera3Buffers[i].stream->priv);
> > +			static_cast<CameraStream *>(camera3Stream->priv);
> >  		const StreamConfiguration &config = config_->at(cameraStream->index());
> >  		Stream *stream = config.stream();
> >
> > @@ -1487,6 +1490,13 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> >  		descriptor->buffers[i].stream = camera3Buffers[i].stream;
> >  		descriptor->buffers[i].buffer = camera3Buffers[i].buffer;
> >
> > +		std::stringstream ss;
> > +		ss << i << " - ("
> > +		   << camera3Stream->width << "x" << camera3Stream->height << ")"
> > +		   << "[" << utils::hex(camera3Stream->format) << "] -> "
>
> We should really add a string mapping for this format ... 21 ... 20 ...
> they're not great for following what's been chosen.
>
> Still, that's it's own patch outright and separate to this I guess.
>
>
> > +		   << "(" << config.size.toString() << ")["
> > +		   << config.pixelFormat.toString() << "]";
> > +
> >  		/*
> >  		 * Inspect the camera stream type, create buffers opportunely
> >  		 * and add them to the Request if required.
> > @@ -1498,6 +1508,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> >  			 * Mapped streams don't need buffers added to the
> >  			 * Request.
> >  			 */
> > +			LOG(HAL, Debug) << ss.str() << " (mapped)";
> >  			continue;
> >
> >  		case CameraStream::Type::Direct:
> > @@ -1509,6 +1520,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> >  			 */
> >  			buffer = createFrameBuffer(*camera3Buffers[i].buffer);
> >  			descriptor->frameBuffers.emplace_back(buffer);
> > +			LOG(HAL, Debug) << ss.str() << " (direct)";
> >  			break;
> >
> >  		case CameraStream::Type::Internal:
> > @@ -1522,6 +1534,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
> >  			 * allocator once it has been processed.
> >  			 */
> >  			buffer = getBuffer(stream);
> > +			LOG(HAL, Debug) << ss.str() << " (internal)";
> >  			break;
> >  		}
> >  		if (!buffer) {
> >
>
> --
> Regards
> --
> Kieran


More information about the libcamera-devel mailing list