[PATCH 1/5] libcamera: rkisp1: Make tryCompleteRequest() params agnostic
Dan Scally
dan.scally at ideasonboard.com
Thu Feb 15 13:51:32 CET 2024
Hi Kieran, Jacopo
On 13/02/2024 13:26, Kieran Bingham wrote:
> Quoting Jacopo Mondi (2024-02-13 11:10:37)
>> Hi Dan
>>
>> On Mon, Feb 12, 2024 at 03:35:28PM +0000, Daniel Scally wrote:
>>> tryCompleteRequest() doesn't actually need to know the status of the
>>> parameters buffer to decide whether it's ok to complete the Request
>>> or not - remove the check. Since setting the paramsDequeued flag is
>>> all that the paramsReady slot actually does, that can be removed too.
>> When PipelineHandlerRkISP1::tryCompleteRequest() is called
>> succesfully, it destroies the RkISP1Frames associated with the
>> completed request.
>>
>> int RkISP1Frames::destroy(unsigned int frame)
>> {
>> RkISP1FrameInfo *info = find(frame);
>> if (!info)
>> return -ENOENT;
>>
>> pipe_->availableParamBuffers_.push(info->paramBuffer);
>> pipe_->availableStatBuffers_.push(info->statBuffer);
>>
>> frameInfo_.erase(info->frame);
>>
>> delete info;
>>
>> return 0;
>> }
>>
>>
>> This
>> pipe_->availableParamBuffers_.push(info->paramBuffer);
>>
>> returns the parameter buffer to the list of available ones, but to do
>> so, shouldn't we make sure it has been de-queued from the video output
>> device first ?
> That's probably something that should happen in the param buffer ready
> slot...
>
>>> Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
>>> ---
>>> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 --------------------
>>> 1 file changed, 20 deletions(-)
>>>
>>> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
>>> index 586b46d6..5460dc11 100644
>>> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
>>> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
>>> @@ -60,7 +60,6 @@ struct RkISP1FrameInfo {
>>> FrameBuffer *mainPathBuffer;
>>> FrameBuffer *selfPathBuffer;
>>>
>>> - bool paramDequeued;
>>> bool metadataProcessed;
>>> };
>>>
>>> @@ -177,7 +176,6 @@ private:
>>> int createCamera(MediaEntity *sensor);
>>> void tryCompleteRequest(RkISP1FrameInfo *info);
>>> void bufferReady(FrameBuffer *buffer);
>>> - void paramReady(FrameBuffer *buffer);
>>> void statReady(FrameBuffer *buffer);
>>> void frameStart(uint32_t sequence);
>>>
>>> @@ -248,7 +246,6 @@ RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *req
>>> info->mainPathBuffer = mainPathBuffer;
>>> info->selfPathBuffer = selfPathBuffer;
>>> info->statBuffer = statBuffer;
>>> - info->paramDequeued = false;
>>> info->metadataProcessed = false;
>>>
>>> frameInfo_[frame] = info;
>>> @@ -1213,7 +1210,6 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
>>> if (hasSelfPath_)
>>> selfPath_.bufferReady().connect(this, &PipelineHandlerRkISP1::bufferReady);
>>> stat_->bufferReady.connect(this, &PipelineHandlerRkISP1::statReady);
>>> - param_->bufferReady.connect(this, &PipelineHandlerRkISP1::paramReady);
>>>
>>> /*
>>> * Enumerate all sensors connected to the ISP and create one
>>> @@ -1243,9 +1239,6 @@ void PipelineHandlerRkISP1::tryCompleteRequest(RkISP1FrameInfo *info)
>>> if (!info->metadataProcessed)
>>> return;
>>>
>>> - if (!isRaw_ && !info->paramDequeued)
>>> - return;
>>> -
>>> data->frameInfo_.destroy(info->frame);
>>>
>>> completeRequest(request);
>>> @@ -1287,19 +1280,6 @@ void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
>>> tryCompleteRequest(info);
>>> }
>>>
>>> -void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)
>>> -{
>>> - ASSERT(activeCamera_);
>>> - RkISP1CameraData *data = cameraData(activeCamera_);
>>> -
>>> - RkISP1FrameInfo *info = data->frameInfo_.find(buffer);
>>> - if (!info)
>>> - return;
>>> -
>>> - info->paramDequeued = true;
>>> - tryCompleteRequest(info);
> I agree that this doesn't need to be so closely associated with the
> request, but we should track that now the paramBuffer is 'free' and
> ready to be reused, so I'd at least expect that in here we add it to a
> free-list, which is then consumed when asking the IPA to populate the
> next param buffer.
Yeah this was really stupid...it of course needs to be returned to the availableParamBuffers_ list
here and that's how it was working until about 20 minutes before posting the series, but when I was
rebased to tidy up this patch I thought "Why do we even need this" and deleted it - so that was dumb
and I obviously didn't test it properly after that rebase.
>
>>> -}
>>> -
>>> void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)
>>> {
>>> ASSERT(activeCamera_);
>>> --
>>> 2.34.1
>>>
More information about the libcamera-devel
mailing list