[libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for rkisp1
Show Liu
show.liu at linaro.org
Tue Jan 14 09:37:49 CET 2020
Hi Kieran,
Glad to know.
Thanks. :-)
Best Regards,
Show Liu
On Tue, Jan 14, 2020 at 7:02 AM Kieran Bingham <
kieran.bingham at ideasonboard.com> wrote:
> Hi Show,
>
> Thank you,
>
> This is now pushed to master.
> --
> Regards
>
> Kieran
>
>
>
> On 10/01/2020 01:12, Show Liu wrote:
> > Hi Kieran,
> >
> >
> >
> > On Thu, Jan 9, 2020 at 7:40 PM Kieran Bingham
> > <kieran.bingham at ideasonboard.com
> > <mailto:kieran.bingham at ideasonboard.com>> wrote:
> >
> > Hi Show,
> >
> > On 08/01/2020 08:30, Show Liu wrote:
> >
> > The commit log has been lost from the previous version.
> > I will add the following (slightly modified) back in when applying:
> >
> > Add an initial simple test tool for the rkisp1 pipeline based upon
> the
> > IPU3 pipeline test.
> >
> > OK. Thanks.
> >
> >
> > Otherwise, I believe this looks good
> >
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com
> > <mailto:kieran.bingham at ideasonboard.com>>
> >
> >
> > Some time in the future I hope we can have a generic PipelineHandler
> > validation which can re-use a lot of code
> >
> > Agree. I am also thinking about it since Laurent mentioned previously.
> >
> >
> > - but for now I think this is
> > fine, and will get things started.
> >
> >
> > When we know what code is duplicated, we can refactor accordingly.
> >
> > > Signed-off-by: Show Liu <show.liu at linaro.org
> > <mailto:show.liu at linaro.org>>
> > > ---
> > > test/pipeline/meson.build | 1 +
> > > test/pipeline/rkisp1/meson.build | 12 ++
> > > test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 114
> > ++++++++++++++++++
> > > 3 files changed, 127 insertions(+)
> > > create mode 100644 test/pipeline/rkisp1/meson.build
> > > create mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
> > >
> > > diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build
> > > index f434c79..157f789 100644
> > > --- a/test/pipeline/meson.build
> > > +++ b/test/pipeline/meson.build
> > > @@ -1 +1,2 @@
> > > subdir('ipu3')
> > > +subdir('rkisp1')
> > > diff --git a/test/pipeline/rkisp1/meson.build
> > b/test/pipeline/rkisp1/meson.build
> > > new file mode 100644
> > > index 0000000..d3f9749
> > > --- /dev/null
> > > +++ b/test/pipeline/rkisp1/meson.build
> > > @@ -0,0 +1,12 @@
> > > +rkisp1_test = [
> > > + ['rkisp1_pipeline_test',
> 'rkisp1_pipeline_test.cpp'],
> > > +]
> > > +
> > > +foreach t : rkisp1_test
> > > + exe = executable(t[0], t[1],
> > > + dependencies : libcamera_dep,
> > > + link_with : test_libraries,
> > > + include_directories : test_includes_internal)
> > > +
> > > + test(t[0], exe, suite : 'rkisp1', is_parallel : false)
> > > +endforeach
> > > diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
> > b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
> > > new file mode 100644
> > > index 0000000..91a4772
> > > --- /dev/null
> > > +++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp
> > > @@ -0,0 +1,114 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > > +/*
> > > + * Copyright (C) 2020, Linaro
> > > + *
> > > + * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp
> > > + *
> > > + * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test
> > > + */
> > > +
> > > +#include <iostream>
> > > +
> > > +#include <sys/stat.h>
> > > +#include <sys/types.h>
> > > +#include <unistd.h>
> > > +
> > > +#include <libcamera/camera.h>
> > > +#include <libcamera/camera_manager.h>
> > > +
> > > +#include "device_enumerator.h"
> > > +#include "media_device.h"
> > > +#include "media_object.h"
> > > +#include "test.h"
> > > +
> > > +using namespace std;
> > > +using namespace libcamera;
> > > +
> > > +/*
> > > + * Verify that the RK3399 pipeline handler gets matched and
> cameras
> > > + * are enumerated correctly.
> > > + *
> > > + * The test is supposed to be run on rockchip platform.
> > > + *
> > > + * The test lists all cameras registered in the system, if any
> > camera is
> > > + * available at all.
> > > + */
> > > +class RKISP1PipelineTest : public Test
> > > +{
> > > +protected:
> > > + int init();
> > > + int run();
> > > + void cleanup();
> > > +
> > > +private:
> > > + CameraManager *cameraManager_;
> > > + unsigned int sensors_;
> > > +};
> > > +
> > > +int RKISP1PipelineTest::init()
> > > +{
> > > + unique_ptr<DeviceEnumerator> enumerator =
> > DeviceEnumerator::create();
> > > + if (!enumerator) {
> > > + cerr << "Failed to create device enumerator" << endl;
> > > + return TestFail;
> > > + }
> > > +
> > > + if (enumerator->enumerate()) {
> > > + cerr << "Failed to enumerate media devices" << endl;
> > > + return TestFail;
> > > + }
> > > +
> > > + DeviceMatch dm("rkisp1");
> > > +
> > > + std::shared_ptr<MediaDevice> rkisp1 = enumerator->search(dm);
> > > + if (!rkisp1) {
> > > + cerr << "Failed to find rkisp1: test skip" << endl;
> > > + return TestSkip;
> > > + }
> > > +
> > > + int ret = rkisp1->populate();
> > > + if (ret) {
> > > + cerr << "Failed to populate media device "
> > > + << rkisp1->deviceNode() << endl;
> > > + return TestFail;
> > > + }
> > > +
> > > + sensors_ = 0;
> > > + const vector<MediaEntity *> &entities = rkisp1->entities();
> > > + for (MediaEntity *entity : entities) {
> > > + if (entity->function() == MEDIA_ENT_F_CAM_SENSOR)
> > > + sensors_++;
> > > + }
> > > +
> > > + cameraManager_ = new CameraManager();
> > > + ret = cameraManager_->start();
> > > + if (ret) {
> > > + cerr << "Failed to start the CameraManager" << endl;
> > > + return TestFail;
> > > + }
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +int RKISP1PipelineTest::run()
> > > +{
> > > + auto cameras = cameraManager_->cameras();
> > > + for (const std::shared_ptr<Camera> &cam : cameras)
> > > + cout << "Found camera '" << cam->name() << "'" <<
> endl;
> > > +
> > > + if (cameras.size() != sensors_) {
> > > + cerr << cameras.size() << " cameras registered, but
> > " << sensors_
> > > + << " were expected" << endl;
> > > + return TestFail;
> > > + }
> > > +
> > > + return TestPass;
> > > +}
> > > +
> > > +void RKISP1PipelineTest::cleanup()
> > > +{
> > > + cameraManager_->stop();
> > > + delete cameraManager_;
> > > +}
> > > +
> > > +TEST_REGISTER(RKISP1PipelineTest)
>
> --
> Regards
> --
> Kieran
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20200114/160de272/attachment-0001.htm>
More information about the libcamera-devel
mailing list