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

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Sep 24 18:29:44 CEST 2020


On 24/09/2020 17:26, Jacopo Mondi wrote:
> 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..


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.

--
K

> 
>>
>>
>>
>>>  	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

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list