libcamera: mali-c55: Set bytesused appropriately

At the moment the mali-c55 pipeline handler sets bytesused for a
buffer to be the maximum possible size (i.e. the size of a struct
mali_c55_params_buffer). This is not really in keeping with the goal
of the extensible parameters formats, and will not work with the new
framework for those formats. Update the IPA module and pipeline
handler to set bytesused to the size of the parameters that were
actually supplied rather than the maximum possible size.

Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Daniel Scally
2025-07-17 23:05:38 +01:00
committed by Kieran Bingham
parent cc137b1c6d
commit 2cc66bb547
3 changed files with 6 additions and 6 deletions

View File

@@ -28,7 +28,7 @@ interface IPAMaliC55Interface {
};
interface IPAMaliC55EventInterface {
paramsComputed(uint32 request);
paramsComputed(uint32 request, uint32 bytesused);
statsProcessed(uint32 request, libcamera.ControlList metadata);
setSensorControls(libcamera.ControlList sensorControls);
};

View File

@@ -346,7 +346,8 @@ void IPAMaliC55::fillParams(unsigned int request,
ASSERT(params->total_size <= MALI_C55_PARAMS_MAX_SIZE);
}
paramsComputed.emit(request);
size_t bytesused = offsetof(struct mali_c55_params_buffer, data) + params->total_size;
paramsComputed.emit(request, bytesused);
}
void IPAMaliC55::processStats(unsigned int request, unsigned int bufferId,

View File

@@ -618,7 +618,7 @@ public:
void imageBufferReady(FrameBuffer *buffer);
void paramsBufferReady(FrameBuffer *buffer);
void statsBufferReady(FrameBuffer *buffer);
void paramsComputed(unsigned int requestId);
void paramsComputed(unsigned int requestId, uint32_t bytesused);
void statsProcessed(unsigned int requestId, const ControlList &metadata);
bool match(DeviceEnumerator *enumerator) override;
@@ -1494,7 +1494,7 @@ void PipelineHandlerMaliC55::statsBufferReady(FrameBuffer *buffer)
sensorControls);
}
void PipelineHandlerMaliC55::paramsComputed(unsigned int requestId)
void PipelineHandlerMaliC55::paramsComputed(unsigned int requestId, uint32_t bytesused)
{
MaliC55FrameInfo &frameInfo = frameInfoMap_[requestId];
Request *request = frameInfo.request;
@@ -1505,8 +1505,7 @@ void PipelineHandlerMaliC55::paramsComputed(unsigned int requestId)
* video devices.
*/
frameInfo.paramBuffer->_d()->metadata().planes()[0].bytesused =
sizeof(struct mali_c55_params_buffer);
frameInfo.paramBuffer->_d()->metadata().planes()[0].bytesused = bytesused;
params_->queueBuffer(frameInfo.paramBuffer);
stats_->queueBuffer(frameInfo.statBuffer);