android: camera_request: Don't embed full camera3_stream_buffer_t

The camera3_stream_buffer_t structure is meant to communicate between
the camera service and the HAL. They are short-live structures that
don't outlive the .process_capture_request() operation (when queuing
requests) or the .process_capture_result() callback.

We currently store copies of the camera3_stream_buffer_t passed to
.process_capture_request() in Camera3RequestDescriptor::StreamBuffer to
store the structure members that the HAL need, and reuse them when
calling the .process_capture_result() callback. This is conceptually not
right, as the camera3_stream_buffer_t pass to the callback are not the
same objects as the ones received in .process_capture_request().

Store individual fields of the camera3_stream_buffer_t in StreamBuffer
instead of copying the whole structure. This gives the HAL full control
of how data is stored, and properly decouples request queueing from
result reporting.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart 2021-10-19 17:17:59 +05:30 committed by Umang Jain
parent b393edb181
commit e82d7e4767
4 changed files with 63 additions and 47 deletions

View file

@ -147,11 +147,11 @@ int CameraStream::process(const FrameBuffer &source,
Camera3RequestDescriptor *request)
{
/* Handle waiting on fences on the destination buffer. */
int fence = dest.buffer.acquire_fence;
int fence = dest.fence;
if (fence != -1) {
int ret = waitFence(fence);
::close(fence);
dest.buffer.acquire_fence = -1;
dest.fence = -1;
if (ret < 0) {
LOG(HAL, Error) << "Failed waiting for fence: "
<< fence << ": " << strerror(-ret);
@ -167,7 +167,7 @@ int CameraStream::process(const FrameBuffer &source,
* separate thread.
*/
const StreamConfiguration &output = configuration();
CameraBuffer destBuffer(*dest.buffer.buffer, output.pixelFormat,
CameraBuffer destBuffer(*dest.camera3Buffer, output.pixelFormat,
output.size, PROT_READ | PROT_WRITE);
if (!destBuffer.isValid()) {
LOG(HAL, Error) << "Failed to create destination buffer";