[libcamera-devel] [PATCH v4 1/2] libcamera: ipu3: Move ipa configuration from start() to configure()
Jean-Michel Hautbois
jeanmichel.hautbois at ideasonboard.com
Wed Mar 17 13:59:56 CET 2021
Hi Laurent,
On 16/03/2021 21:55, Laurent Pinchart wrote:
> Hi Jean-Michel,
>
> Thank you for the patch.
>
> On Tue, Mar 16, 2021 at 04:40:22PM +0100, Jean-Michel Hautbois wrote:
>> IPA was configured after all the pipeline devices were started,
>> including IPA itself...
>> Move it at the end of configure() call.
>>
>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
>
> The change looks good. Could you make sure it doesn't break anything if
> we call configure() twice without any start() in-between ? This check
> should be added to lc-compliance (once we get it merged), in the
> meantime, you can modify any test application to duplicate the
> configure() call. Bonus points if this can be run under valgrind too.
I have cheated with test/camera/capture.cpp, I get too configure() calls
successfully without any issue.
As I really like bonus points, I also passed valgrind on a 'cam' call:
==28310== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==28310== Command: cam -c1 -C100
==28310==
[29:33:24.510402583] [28310] INFO Camera camera_manager.cpp:293
libcamera v0.0.0+2409-d179b494-dirty (2021-03-17T13:55:04+01:00)
[29:33:27.824662259] [28313] INFO IPU3 ipu3.cpp:1128 Registered
Camera[0] "\_SB_.PCI0.LNK1" connected to CSI-2 receiver 1
Using camera \_SB_.PCI0.LNK1
[29:33:28.243120313] [28310] INFO Camera camera.cpp:890 configuring
streams: (0) 1280x720-NV12
Capture 100 frames
106409.888872 (0.00 fps) stream0 seq: 020006 bytesused: 1382400
106409.896575 (129.82 fps) stream0 seq: 020007 bytesused: 1382400
<snip>
106413.324588 (29.91 fps) stream0 seq: 020104 bytesused: 1382400
106413.357822 (30.09 fps) stream0 seq: 020105 bytesused: 1382400
==28310==
==28310== HEAP SUMMARY:
==28310== in use at exit: 0 bytes in 0 blocks
==28310== total heap usage: 18,382 allocs, 18,382 frees, 2,117,494
bytes allocated
==28310==
==28310== All heap blocks were freed -- no leaks are possible
==28310==
==28310== For lists of detected and suppressed errors, rerun with: -s
==28310== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
> Once done,
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Thank you :-).
>
>> ---
>> src/libcamera/pipeline/ipu3/ipu3.cpp | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
>> index 2ea13ec9..bb61ef4a 100644
>> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
>> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
>> @@ -633,6 +633,10 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
>> return ret;
>> }
>>
>> + std::map<uint32_t, ControlInfoMap> entityControls;
>> + entityControls.emplace(0, data->cio2_.sensor()->controls());
>> + data->ipa_->configure(entityControls);
>> +
>> return 0;
>> }
>>
>> @@ -717,7 +721,6 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)
>>
>> int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlList *controls)
>> {
>> - std::map<uint32_t, ControlInfoMap> entityControls;
>> IPU3CameraData *data = cameraData(camera);
>> CIO2Device *cio2 = &data->cio2_;
>> ImgUDevice *imgu = data->imgu_;
>> @@ -744,9 +747,6 @@ int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlLis
>> if (ret)
>> goto error;
>>
>> - entityControls.emplace(0, data->cio2_.sensor()->controls());
>> - data->ipa_->configure(entityControls);
>> -
>> return 0;
>>
>> error:
>
More information about the libcamera-devel
mailing list