[libcamera-devel] [PATCH v3 8/8] android: camera_device: Add stream mapping log
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Sep 29 03:37:05 CEST 2020
Hi Jacopo,
Thank you for the patch.
On Fri, Sep 25, 2020 at 11:39:19AM +0200, Jacopo Mondi wrote:
> On Thu, Sep 24, 2020 at 05:29:44PM +0100, Kieran Bingham wrote:
> > On 24/09/2020 17:26, Jacopo Mondi wrote:
> > > On Thu, Sep 24, 2020 at 05:10:23PM +0100, Kieran Bingham wrote:
> > >> On 22/09/2020 10:47, Jacopo Mondi wrote:
> > >>> To ease following how Android stream gets mapped onto libcamera ones
s/stream gets/streams get/
s/onto/to/
> > >>> 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..
> >
> > It's confusing because - how many streams are there in the libcamera
> > request... (I don't believe it's 3?)
> >
> > Maybe you could fix it by saying instead:
> >
> > "Queuing Request to libcamera to satisfy 3 streams"...
> > But the request going to libcamera - does not have 3 streams still - so
> > it just sounds odd.
>
> uff
>
> What I meant is that android has queued a request to the libcamera HAL
> layer with #n streams of the reported format and size and the reported
> mapping mode.
I also think the message is slightly confusing. How about "Queuing
Request to libcamera for 3 HAL streams" ? That's a simple change and
would make sure it can't be understood as queuing a request with 3
libcamera streams.
The change is good, it really helps understanding what happens.
> > >>> 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() << "]";
The output would be a bit different, but you could use config.toString()
to simplify this.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > >>> +
> > >>> /*
> > >>> * 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,
Laurent Pinchart
More information about the libcamera-devel
mailing list