[{"id":3395,"web_url":"https://patchwork.libcamera.org/comment/3395/","msgid":"<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>","date":"2020-01-09T11:40:19","subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Show,\n\nOn 08/01/2020 08:30, Show Liu wrote:\n\nThe commit log has been lost from the previous version.\nI will add the following (slightly modified) back in when applying:\n\nAdd an initial simple test tool for the rkisp1 pipeline based upon the\nIPU3 pipeline test.\n\nOtherwise, I believe this looks good\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\nSome time in the future I hope we can have a generic PipelineHandler\nvalidation which can re-use a lot of code - but for now I think this is\nfine, and will get things started.\n\nWhen we know what code is duplicated, we can refactor accordingly.\n\n> Signed-off-by: Show Liu <show.liu@linaro.org>\n> ---\n>  test/pipeline/meson.build                     |   1 +\n>  test/pipeline/rkisp1/meson.build              |  12 ++\n>  test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 114 ++++++++++++++++++\n>  3 files changed, 127 insertions(+)\n>  create mode 100644 test/pipeline/rkisp1/meson.build\n>  create mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> \n> diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build\n> index f434c79..157f789 100644\n> --- a/test/pipeline/meson.build\n> +++ b/test/pipeline/meson.build\n> @@ -1 +1,2 @@\n>  subdir('ipu3')\n> +subdir('rkisp1')\n> diff --git a/test/pipeline/rkisp1/meson.build b/test/pipeline/rkisp1/meson.build\n> new file mode 100644\n> index 0000000..d3f9749\n> --- /dev/null\n> +++ b/test/pipeline/rkisp1/meson.build\n> @@ -0,0 +1,12 @@\n> +rkisp1_test = [\n> +    ['rkisp1_pipeline_test',            'rkisp1_pipeline_test.cpp'],\n> +]\n> +\n> +foreach t : rkisp1_test\n> +    exe = executable(t[0], t[1],\n> +                     dependencies : libcamera_dep,\n> +                     link_with : test_libraries,\n> +                     include_directories : test_includes_internal)\n> +\n> +    test(t[0], exe, suite : 'rkisp1', is_parallel : false)\n> +endforeach\n> diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> new file mode 100644\n> index 0000000..91a4772\n> --- /dev/null\n> +++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> @@ -0,0 +1,114 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp\n> + *\n> + * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test\n> + */\n> +\n> +#include <iostream>\n> +\n> +#include <sys/stat.h>\n> +#include <sys/types.h>\n> +#include <unistd.h>\n> +\n> +#include <libcamera/camera.h>\n> +#include <libcamera/camera_manager.h>\n> +\n> +#include \"device_enumerator.h\"\n> +#include \"media_device.h\"\n> +#include \"media_object.h\"\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +using namespace libcamera;\n> +\n> +/*\n> + * Verify that the RK3399 pipeline handler gets matched and cameras\n> + * are enumerated correctly.\n> + *\n> + * The test is supposed to be run on rockchip platform.\n> + *\n> + * The test lists all cameras registered in the system, if any camera is\n> + * available at all.\n> + */\n> +class RKISP1PipelineTest : public Test\n> +{\n> +protected:\n> +\tint init();\n> +\tint run();\n> +\tvoid cleanup();\n> +\n> +private:\n> +\tCameraManager *cameraManager_;\n> +\tunsigned int sensors_;\n> +};\n> +\n> +int RKISP1PipelineTest::init()\n> +{\n> +\tunique_ptr<DeviceEnumerator> enumerator = DeviceEnumerator::create();\n> +\tif (!enumerator) {\n> +\t\tcerr << \"Failed to create device enumerator\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\tif (enumerator->enumerate()) {\n> +\t\tcerr << \"Failed to enumerate media devices\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\tDeviceMatch dm(\"rkisp1\");\n> +\n> +\tstd::shared_ptr<MediaDevice> rkisp1 = enumerator->search(dm);\n> +\tif (!rkisp1) {\n> +\t\tcerr << \"Failed to find rkisp1: test skip\" << endl;\n> +\t\treturn TestSkip;\n> +\t}\n> +\n> +\tint ret = rkisp1->populate();\n> +\tif (ret) {\n> +\t\tcerr << \"Failed to populate media device \"\n> +\t\t\t<< rkisp1->deviceNode() << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\tsensors_ = 0;\n> +\tconst vector<MediaEntity *> &entities = rkisp1->entities();\n> +\tfor (MediaEntity *entity : entities) {\n> +\t\tif (entity->function() == MEDIA_ENT_F_CAM_SENSOR)\n> +\t\t\tsensors_++;\n> +\t}\n> +\n> +\tcameraManager_ = new CameraManager();\n> +\tret = cameraManager_->start();\n> +\tif (ret) {\n> +\t\tcerr << \"Failed to start the CameraManager\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\treturn 0;\n> +}\n> +\n> +int RKISP1PipelineTest::run()\n> +{\n> +\tauto cameras = cameraManager_->cameras();\n> +\tfor (const std::shared_ptr<Camera> &cam : cameras)\n> +\t\tcout << \"Found camera '\" << cam->name() << \"'\" << endl;\n> +\n> +\tif (cameras.size() != sensors_) {\n> +\t\tcerr << cameras.size() << \" cameras registered, but \" << sensors_\n> +\t\t     << \" were expected\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\treturn TestPass;\n> +}\n> +\n> +void RKISP1PipelineTest::cleanup()\n> +{\n> +\tcameraManager_->stop();\n> +\tdelete cameraManager_;\n> +}\n> +\n> +TEST_REGISTER(RKISP1PipelineTest)\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 304DE6045F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jan 2020 12:40:26 +0100 (CET)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6338130E;\n\tThu,  9 Jan 2020 12:40:25 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1578570025;\n\tbh=0vQdOVlnSZFJqgx3+SMJFdzMmMwr5Yk8DXw/Cp5EUMk=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=d1n7hwPJuUnOE2Y5FuRwRfAKHHtHRDmKog/5LCtqhcoD3X+t6Hp17jtHHfqdTfCCj\n\tpdC7r9hTtc1lFDtPCJ7SPUQPjWvWV4nh7S/Xy9BzCGFryWqOC0aExPLV/if0UudrUn\n\t4lxMpQbcTKBaCkoDq3O9Ki3JC4f30O/dK6HSdEbw=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Show Liu <show.liu@linaro.org>, libcamera-devel@lists.libcamera.org","Cc":"peter.griffin@linaro.org","References":"<20200108083003.16428-1-show.liu@linaro.org>\n\t<20200108083003.16428-2-show.liu@linaro.org>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>","Date":"Thu, 9 Jan 2020 11:40:19 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.9.0","MIME-Version":"1.0","In-Reply-To":"<20200108083003.16428-2-show.liu@linaro.org>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Thu, 09 Jan 2020 11:40:26 -0000"}},{"id":3396,"web_url":"https://patchwork.libcamera.org/comment/3396/","msgid":"<CA+yuoHrptRqWsUfFC8KZAzZEuDzv=c+tPgjerr95e6kHPkbzDQ@mail.gmail.com>","date":"2020-01-10T01:12:03","subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","submitter":{"id":24,"url":"https://patchwork.libcamera.org/api/people/24/","name":"Show Liu","email":"show.liu@linaro.org"},"content":"Hi Kieran,\n\n\n\nOn Thu, Jan 9, 2020 at 7:40 PM Kieran Bingham <\nkieran.bingham@ideasonboard.com> wrote:\n\n> Hi Show,\n>\n> On 08/01/2020 08:30, Show Liu wrote:\n>\n> The commit log has been lost from the previous version.\n> I will add the following (slightly modified) back in when applying:\n>\n> Add an initial simple test tool for the rkisp1 pipeline based upon the\n> IPU3 pipeline test.\n>\nOK. Thanks.\n\n>\n> Otherwise, I believe this looks good\n>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n>\n> Some time in the future I hope we can have a generic PipelineHandler\n> validation which can re-use a lot of code\n\nAgree.  I am also thinking about it since Laurent mentioned previously.\n\n\n> - but for now I think this is\n> fine, and will get things started.\n>\n\n> When we know what code is duplicated, we can refactor accordingly.\n>\n> > Signed-off-by: Show Liu <show.liu@linaro.org>\n> > ---\n> >  test/pipeline/meson.build                     |   1 +\n> >  test/pipeline/rkisp1/meson.build              |  12 ++\n> >  test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 114 ++++++++++++++++++\n> >  3 files changed, 127 insertions(+)\n> >  create mode 100644 test/pipeline/rkisp1/meson.build\n> >  create mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> >\n> > diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build\n> > index f434c79..157f789 100644\n> > --- a/test/pipeline/meson.build\n> > +++ b/test/pipeline/meson.build\n> > @@ -1 +1,2 @@\n> >  subdir('ipu3')\n> > +subdir('rkisp1')\n> > diff --git a/test/pipeline/rkisp1/meson.build\n> b/test/pipeline/rkisp1/meson.build\n> > new file mode 100644\n> > index 0000000..d3f9749\n> > --- /dev/null\n> > +++ b/test/pipeline/rkisp1/meson.build\n> > @@ -0,0 +1,12 @@\n> > +rkisp1_test = [\n> > +    ['rkisp1_pipeline_test',            'rkisp1_pipeline_test.cpp'],\n> > +]\n> > +\n> > +foreach t : rkisp1_test\n> > +    exe = executable(t[0], t[1],\n> > +                     dependencies : libcamera_dep,\n> > +                     link_with : test_libraries,\n> > +                     include_directories : test_includes_internal)\n> > +\n> > +    test(t[0], exe, suite : 'rkisp1', is_parallel : false)\n> > +endforeach\n> > diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> > new file mode 100644\n> > index 0000000..91a4772\n> > --- /dev/null\n> > +++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> > @@ -0,0 +1,114 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp\n> > + *\n> > + * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test\n> > + */\n> > +\n> > +#include <iostream>\n> > +\n> > +#include <sys/stat.h>\n> > +#include <sys/types.h>\n> > +#include <unistd.h>\n> > +\n> > +#include <libcamera/camera.h>\n> > +#include <libcamera/camera_manager.h>\n> > +\n> > +#include \"device_enumerator.h\"\n> > +#include \"media_device.h\"\n> > +#include \"media_object.h\"\n> > +#include \"test.h\"\n> > +\n> > +using namespace std;\n> > +using namespace libcamera;\n> > +\n> > +/*\n> > + * Verify that the RK3399 pipeline handler gets matched and cameras\n> > + * are enumerated correctly.\n> > + *\n> > + * The test is supposed to be run on rockchip platform.\n> > + *\n> > + * The test lists all cameras registered in the system, if any camera is\n> > + * available at all.\n> > + */\n> > +class RKISP1PipelineTest : public Test\n> > +{\n> > +protected:\n> > +     int init();\n> > +     int run();\n> > +     void cleanup();\n> > +\n> > +private:\n> > +     CameraManager *cameraManager_;\n> > +     unsigned int sensors_;\n> > +};\n> > +\n> > +int RKISP1PipelineTest::init()\n> > +{\n> > +     unique_ptr<DeviceEnumerator> enumerator =\n> DeviceEnumerator::create();\n> > +     if (!enumerator) {\n> > +             cerr << \"Failed to create device enumerator\" << endl;\n> > +             return TestFail;\n> > +     }\n> > +\n> > +     if (enumerator->enumerate()) {\n> > +             cerr << \"Failed to enumerate media devices\" << endl;\n> > +             return TestFail;\n> > +     }\n> > +\n> > +     DeviceMatch dm(\"rkisp1\");\n> > +\n> > +     std::shared_ptr<MediaDevice> rkisp1 = enumerator->search(dm);\n> > +     if (!rkisp1) {\n> > +             cerr << \"Failed to find rkisp1: test skip\" << endl;\n> > +             return TestSkip;\n> > +     }\n> > +\n> > +     int ret = rkisp1->populate();\n> > +     if (ret) {\n> > +             cerr << \"Failed to populate media device \"\n> > +                     << rkisp1->deviceNode() << endl;\n> > +             return TestFail;\n> > +     }\n> > +\n> > +     sensors_ = 0;\n> > +     const vector<MediaEntity *> &entities = rkisp1->entities();\n> > +     for (MediaEntity *entity : entities) {\n> > +             if (entity->function() == MEDIA_ENT_F_CAM_SENSOR)\n> > +                     sensors_++;\n> > +     }\n> > +\n> > +     cameraManager_ = new CameraManager();\n> > +     ret = cameraManager_->start();\n> > +     if (ret) {\n> > +             cerr << \"Failed to start the CameraManager\" << endl;\n> > +             return TestFail;\n> > +     }\n> > +\n> > +     return 0;\n> > +}\n> > +\n> > +int RKISP1PipelineTest::run()\n> > +{\n> > +     auto cameras = cameraManager_->cameras();\n> > +     for (const std::shared_ptr<Camera> &cam : cameras)\n> > +             cout << \"Found camera '\" << cam->name() << \"'\" << endl;\n> > +\n> > +     if (cameras.size() != sensors_) {\n> > +             cerr << cameras.size() << \" cameras registered, but \" <<\n> sensors_\n> > +                  << \" were expected\" << endl;\n> > +             return TestFail;\n> > +     }\n> > +\n> > +     return TestPass;\n> > +}\n> > +\n> > +void RKISP1PipelineTest::cleanup()\n> > +{\n> > +     cameraManager_->stop();\n> > +     delete cameraManager_;\n> > +}\n> > +\n> > +TEST_REGISTER(RKISP1PipelineTest)\n> >\n>\n> --\n> Regards\n> --\n> Kieran\n>","headers":{"Return-Path":"<show.liu@linaro.org>","Received":["from mail-il1-x143.google.com (mail-il1-x143.google.com\n\t[IPv6:2607:f8b0:4864:20::143])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7A37F6045F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 10 Jan 2020 02:12:16 +0100 (CET)","by mail-il1-x143.google.com with SMTP id b15so472068iln.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 09 Jan 2020 17:12:16 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=ImBknITAkDVrGLwBLZptKx1M2Id4S8xGazcmR8asyx8=;\n\tb=USs276eTOo2aAq6QJpOlqojsSKiBoPE6itW2DN2n1XQWfDoQ9sQ2cMckAssyAN88fu\n\tTKwPW+dRYBpGBmpLW9ETEYuMOKckDpJziIAHNKoWF3Ro3VsWtf/LrwmZiYw2Q0GumTtb\n\tdpeBwiE0nXwTKfs4IZQrTW/vjOjt28JVLO4PKlBPFlgsh/3YEdMmgzuhvpeqNIFds5/5\n\t8w+dBg0XTap4Zxk3qVEGonDa28PooyHM0MCOvj3JulqRfXXCKxHYu0GT7xgDzgDNR6nx\n\tbaFDnC0t4PTXBSz3GBzz6pWIi8YkeRwbjkPZXWk4JUPKgufbyDhX95Jq4ab4YsZpsGIO\n\teS0A==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=ImBknITAkDVrGLwBLZptKx1M2Id4S8xGazcmR8asyx8=;\n\tb=uMGJGhOkJ2Bb5P0PkXxlpKyZ1Ns1SRL85KwNSjPMgx0E4A+rfh2D6MmTVahlkgiYPT\n\tZowu9QTjWj2RO7mZ8Ljo5xFbwW/A1gj5gSR5ax1Enzxu1XJxojyhudNJ6nFkCmimRuVW\n\tGnq7prskIfFkP5DoN2/td9fAfzI2loHVsVT/YdlOIsWPbiHN0vO3KRCfmmzhtpaPHBK+\n\tAyri6PmWxuhKlXf4zAH05rrF/kZVFrbTp/ltgDmHCsSKXnfNPUTuW7eld/sODODKIGUN\n\t1zGS/jc3RxCz+/aWGy2dZaOdRX8xxBmpT5r29q1pPvX7YGmkTtzskomExpsL73NbUHJ5\n\tioUw==","X-Gm-Message-State":"APjAAAVn0f0QVdCXViB9JuR4+hSg8/LzLY1MUfBgRniomY6+m3xJKki3\n\t9uwhM/l49GVR/z2d5n4RdhpqeR8lT4vVKxB8wGOTbg==","X-Google-Smtp-Source":"APXvYqyCYsqGS/A7ZNTh2d9fD0oJx9OFDUei2syeEVEt6xu56ZsiT73qiSv6Z0s7MJO/bXkOJbJndKeyHXtU7juIuT0=","X-Received":"by 2002:a92:350d:: with SMTP id c13mr416773ila.205.1578618734888;\n\tThu, 09 Jan 2020 17:12:14 -0800 (PST)","MIME-Version":"1.0","References":"<20200108083003.16428-1-show.liu@linaro.org>\n\t<20200108083003.16428-2-show.liu@linaro.org>\n\t<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>","In-Reply-To":"<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>","From":"Show Liu <show.liu@linaro.org>","Date":"Fri, 10 Jan 2020 09:12:03 +0800","Message-ID":"<CA+yuoHrptRqWsUfFC8KZAzZEuDzv=c+tPgjerr95e6kHPkbzDQ@mail.gmail.com>","To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org, \n\tPeter Griffin <peter.griffin@linaro.org>","Content-Type":"multipart/alternative; boundary=\"000000000000edec52059bbed09a\"","Subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 10 Jan 2020 01:12:16 -0000"}},{"id":3434,"web_url":"https://patchwork.libcamera.org/comment/3434/","msgid":"<75d4bab3-4514-e9f2-3d39-f1b9f7b92541@ideasonboard.com>","date":"2020-01-13T23:02:24","subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Show,\n\nThank you,\n\nThis is now pushed to master.\n--\nRegards\n\nKieran\n\n\n\nOn 10/01/2020 01:12, Show Liu wrote:\n> Hi Kieran,\n> \n> \n> \n> On Thu, Jan 9, 2020 at 7:40 PM Kieran Bingham\n> <kieran.bingham@ideasonboard.com\n> <mailto:kieran.bingham@ideasonboard.com>> wrote:\n> \n>     Hi Show,\n> \n>     On 08/01/2020 08:30, Show Liu wrote:\n> \n>     The commit log has been lost from the previous version.\n>     I will add the following (slightly modified) back in when applying:\n> \n>     Add an initial simple test tool for the rkisp1 pipeline based upon the\n>     IPU3 pipeline test.\n> \n> OK. Thanks. \n> \n> \n>     Otherwise, I believe this looks good\n> \n>     Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com\n>     <mailto:kieran.bingham@ideasonboard.com>>\n> \n> \n>     Some time in the future I hope we can have a generic PipelineHandler\n>     validation which can re-use a lot of code\n> \n> Agree.  I am also thinking about it since Laurent mentioned previously.\n>  \n> \n>     - but for now I think this is\n>     fine, and will get things started.\n> \n> \n>     When we know what code is duplicated, we can refactor accordingly.\n> \n>     > Signed-off-by: Show Liu <show.liu@linaro.org\n>     <mailto:show.liu@linaro.org>>\n>     > ---\n>     >  test/pipeline/meson.build                     |   1 +\n>     >  test/pipeline/rkisp1/meson.build              |  12 ++\n>     >  test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 114\n>     ++++++++++++++++++\n>     >  3 files changed, 127 insertions(+)\n>     >  create mode 100644 test/pipeline/rkisp1/meson.build\n>     >  create mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n>     >\n>     > diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build\n>     > index f434c79..157f789 100644\n>     > --- a/test/pipeline/meson.build\n>     > +++ b/test/pipeline/meson.build\n>     > @@ -1 +1,2 @@\n>     >  subdir('ipu3')\n>     > +subdir('rkisp1')\n>     > diff --git a/test/pipeline/rkisp1/meson.build\n>     b/test/pipeline/rkisp1/meson.build\n>     > new file mode 100644\n>     > index 0000000..d3f9749\n>     > --- /dev/null\n>     > +++ b/test/pipeline/rkisp1/meson.build\n>     > @@ -0,0 +1,12 @@\n>     > +rkisp1_test = [\n>     > +    ['rkisp1_pipeline_test',            'rkisp1_pipeline_test.cpp'],\n>     > +]\n>     > +\n>     > +foreach t : rkisp1_test\n>     > +    exe = executable(t[0], t[1],\n>     > +                     dependencies : libcamera_dep,\n>     > +                     link_with : test_libraries,\n>     > +                     include_directories : test_includes_internal)\n>     > +\n>     > +    test(t[0], exe, suite : 'rkisp1', is_parallel : false)\n>     > +endforeach\n>     > diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n>     b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n>     > new file mode 100644\n>     > index 0000000..91a4772\n>     > --- /dev/null\n>     > +++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n>     > @@ -0,0 +1,114 @@\n>     > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n>     > +/*\n>     > + * Copyright (C) 2020, Linaro\n>     > + *\n>     > + * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp\n>     > + *\n>     > + * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test\n>     > + */\n>     > +\n>     > +#include <iostream>\n>     > +\n>     > +#include <sys/stat.h>\n>     > +#include <sys/types.h>\n>     > +#include <unistd.h>\n>     > +\n>     > +#include <libcamera/camera.h>\n>     > +#include <libcamera/camera_manager.h>\n>     > +\n>     > +#include \"device_enumerator.h\"\n>     > +#include \"media_device.h\"\n>     > +#include \"media_object.h\"\n>     > +#include \"test.h\"\n>     > +\n>     > +using namespace std;\n>     > +using namespace libcamera;\n>     > +\n>     > +/*\n>     > + * Verify that the RK3399 pipeline handler gets matched and cameras\n>     > + * are enumerated correctly.\n>     > + *\n>     > + * The test is supposed to be run on rockchip platform.\n>     > + *\n>     > + * The test lists all cameras registered in the system, if any\n>     camera is\n>     > + * available at all.\n>     > + */\n>     > +class RKISP1PipelineTest : public Test\n>     > +{\n>     > +protected:\n>     > +     int init();\n>     > +     int run();\n>     > +     void cleanup();\n>     > +\n>     > +private:\n>     > +     CameraManager *cameraManager_;\n>     > +     unsigned int sensors_;\n>     > +};\n>     > +\n>     > +int RKISP1PipelineTest::init()\n>     > +{\n>     > +     unique_ptr<DeviceEnumerator> enumerator =\n>     DeviceEnumerator::create();\n>     > +     if (!enumerator) {\n>     > +             cerr << \"Failed to create device enumerator\" << endl;\n>     > +             return TestFail;\n>     > +     }\n>     > +\n>     > +     if (enumerator->enumerate()) {\n>     > +             cerr << \"Failed to enumerate media devices\" << endl;\n>     > +             return TestFail;\n>     > +     }\n>     > +\n>     > +     DeviceMatch dm(\"rkisp1\");\n>     > +\n>     > +     std::shared_ptr<MediaDevice> rkisp1 = enumerator->search(dm);\n>     > +     if (!rkisp1) {\n>     > +             cerr << \"Failed to find rkisp1: test skip\" << endl;\n>     > +             return TestSkip;\n>     > +     }\n>     > +\n>     > +     int ret = rkisp1->populate();\n>     > +     if (ret) {\n>     > +             cerr << \"Failed to populate media device \"\n>     > +                     << rkisp1->deviceNode() << endl;\n>     > +             return TestFail;\n>     > +     }\n>     > +\n>     > +     sensors_ = 0;\n>     > +     const vector<MediaEntity *> &entities = rkisp1->entities();\n>     > +     for (MediaEntity *entity : entities) {\n>     > +             if (entity->function() == MEDIA_ENT_F_CAM_SENSOR)\n>     > +                     sensors_++;\n>     > +     }\n>     > +\n>     > +     cameraManager_ = new CameraManager();\n>     > +     ret = cameraManager_->start();\n>     > +     if (ret) {\n>     > +             cerr << \"Failed to start the CameraManager\" << endl;\n>     > +             return TestFail;\n>     > +     }\n>     > +\n>     > +     return 0;\n>     > +}\n>     > +\n>     > +int RKISP1PipelineTest::run()\n>     > +{\n>     > +     auto cameras = cameraManager_->cameras();\n>     > +     for (const std::shared_ptr<Camera> &cam : cameras)\n>     > +             cout << \"Found camera '\" << cam->name() << \"'\" << endl;\n>     > +\n>     > +     if (cameras.size() != sensors_) {\n>     > +             cerr << cameras.size() << \" cameras registered, but\n>     \" << sensors_\n>     > +                  << \" were expected\" << endl;\n>     > +             return TestFail;\n>     > +     }\n>     > +\n>     > +     return TestPass;\n>     > +}\n>     > +\n>     > +void RKISP1PipelineTest::cleanup()\n>     > +{\n>     > +     cameraManager_->stop();\n>     > +     delete cameraManager_;\n>     > +}\n>     > +\n>     > +TEST_REGISTER(RKISP1PipelineTest)","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B386D6017C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2020 00:02:27 +0100 (CET)","from [192.168.1.106]\n\t(cpc108967-cmbg20-2-0-cust420.5-4.cable.virginm.net [81.101.7.165])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0E4BC30E;\n\tTue, 14 Jan 2020 00:02:26 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1578956547;\n\tbh=ZnV3Z3RyhsMABVoiZTeIkWbNlAxPJEccLdFrwZPROk4=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=SNJ5L+h98vhs1GwSA7ZPwF2qvT7lB9eE4WWqHajYSF9O7HkD52xlOlYNiHwGCtx/L\n\tIB7iebmDVbDLtVaxaICQa5vNvs5UPEBgr4jzpIqHSSd9HA1Ol3P+OottncfgZARlf4\n\t411HArjS41uC7E99ydVJOFBxjqP92+Dxzvl2U/aI=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Show Liu <show.liu@linaro.org>","Cc":"libcamera-devel@lists.libcamera.org,\n\tPeter Griffin <peter.griffin@linaro.org>","References":"<20200108083003.16428-1-show.liu@linaro.org>\n\t<20200108083003.16428-2-show.liu@linaro.org>\n\t<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>\n\t<CA+yuoHrptRqWsUfFC8KZAzZEuDzv=c+tPgjerr95e6kHPkbzDQ@mail.gmail.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<75d4bab3-4514-e9f2-3d39-f1b9f7b92541@ideasonboard.com>","Date":"Mon, 13 Jan 2020 23:02:24 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.9.0","MIME-Version":"1.0","In-Reply-To":"<CA+yuoHrptRqWsUfFC8KZAzZEuDzv=c+tPgjerr95e6kHPkbzDQ@mail.gmail.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 13 Jan 2020 23:02:27 -0000"}},{"id":3441,"web_url":"https://patchwork.libcamera.org/comment/3441/","msgid":"<CA+yuoHokwFvcBoaSUM72c2DpXt9H+ggWS42XTQwfSNd51QXQTQ@mail.gmail.com>","date":"2020-01-14T08:37:49","subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","submitter":{"id":24,"url":"https://patchwork.libcamera.org/api/people/24/","name":"Show Liu","email":"show.liu@linaro.org"},"content":"Hi Kieran,\n\nGlad to know.\nThanks. :-)\n\nBest Regards,\nShow Liu\n\n\nOn Tue, Jan 14, 2020 at 7:02 AM Kieran Bingham <\nkieran.bingham@ideasonboard.com> wrote:\n\n> Hi Show,\n>\n> Thank you,\n>\n> This is now pushed to master.\n> --\n> Regards\n>\n> Kieran\n>\n>\n>\n> On 10/01/2020 01:12, Show Liu wrote:\n> > Hi Kieran,\n> >\n> >\n> >\n> > On Thu, Jan 9, 2020 at 7:40 PM Kieran Bingham\n> > <kieran.bingham@ideasonboard.com\n> > <mailto:kieran.bingham@ideasonboard.com>> wrote:\n> >\n> >     Hi Show,\n> >\n> >     On 08/01/2020 08:30, Show Liu wrote:\n> >\n> >     The commit log has been lost from the previous version.\n> >     I will add the following (slightly modified) back in when applying:\n> >\n> >     Add an initial simple test tool for the rkisp1 pipeline based upon\n> the\n> >     IPU3 pipeline test.\n> >\n> > OK. Thanks.\n> >\n> >\n> >     Otherwise, I believe this looks good\n> >\n> >     Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com\n> >     <mailto:kieran.bingham@ideasonboard.com>>\n> >\n> >\n> >     Some time in the future I hope we can have a generic PipelineHandler\n> >     validation which can re-use a lot of code\n> >\n> > Agree.  I am also thinking about it since Laurent mentioned previously.\n> >\n> >\n> >     - but for now I think this is\n> >     fine, and will get things started.\n> >\n> >\n> >     When we know what code is duplicated, we can refactor accordingly.\n> >\n> >     > Signed-off-by: Show Liu <show.liu@linaro.org\n> >     <mailto:show.liu@linaro.org>>\n> >     > ---\n> >     >  test/pipeline/meson.build                     |   1 +\n> >     >  test/pipeline/rkisp1/meson.build              |  12 ++\n> >     >  test/pipeline/rkisp1/rkisp1_pipeline_test.cpp | 114\n> >     ++++++++++++++++++\n> >     >  3 files changed, 127 insertions(+)\n> >     >  create mode 100644 test/pipeline/rkisp1/meson.build\n> >     >  create mode 100644 test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> >     >\n> >     > diff --git a/test/pipeline/meson.build b/test/pipeline/meson.build\n> >     > index f434c79..157f789 100644\n> >     > --- a/test/pipeline/meson.build\n> >     > +++ b/test/pipeline/meson.build\n> >     > @@ -1 +1,2 @@\n> >     >  subdir('ipu3')\n> >     > +subdir('rkisp1')\n> >     > diff --git a/test/pipeline/rkisp1/meson.build\n> >     b/test/pipeline/rkisp1/meson.build\n> >     > new file mode 100644\n> >     > index 0000000..d3f9749\n> >     > --- /dev/null\n> >     > +++ b/test/pipeline/rkisp1/meson.build\n> >     > @@ -0,0 +1,12 @@\n> >     > +rkisp1_test = [\n> >     > +    ['rkisp1_pipeline_test',\n> 'rkisp1_pipeline_test.cpp'],\n> >     > +]\n> >     > +\n> >     > +foreach t : rkisp1_test\n> >     > +    exe = executable(t[0], t[1],\n> >     > +                     dependencies : libcamera_dep,\n> >     > +                     link_with : test_libraries,\n> >     > +                     include_directories : test_includes_internal)\n> >     > +\n> >     > +    test(t[0], exe, suite : 'rkisp1', is_parallel : false)\n> >     > +endforeach\n> >     > diff --git a/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> >     b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> >     > new file mode 100644\n> >     > index 0000000..91a4772\n> >     > --- /dev/null\n> >     > +++ b/test/pipeline/rkisp1/rkisp1_pipeline_test.cpp\n> >     > @@ -0,0 +1,114 @@\n> >     > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> >     > +/*\n> >     > + * Copyright (C) 2020, Linaro\n> >     > + *\n> >     > + * Based on test/pipeline/ipu3/ipu3_pipeline_test.cpp\n> >     > + *\n> >     > + * rkisp1_pipeline_test.cpp - Rockchip RK3399 rkisp1 pipeline test\n> >     > + */\n> >     > +\n> >     > +#include <iostream>\n> >     > +\n> >     > +#include <sys/stat.h>\n> >     > +#include <sys/types.h>\n> >     > +#include <unistd.h>\n> >     > +\n> >     > +#include <libcamera/camera.h>\n> >     > +#include <libcamera/camera_manager.h>\n> >     > +\n> >     > +#include \"device_enumerator.h\"\n> >     > +#include \"media_device.h\"\n> >     > +#include \"media_object.h\"\n> >     > +#include \"test.h\"\n> >     > +\n> >     > +using namespace std;\n> >     > +using namespace libcamera;\n> >     > +\n> >     > +/*\n> >     > + * Verify that the RK3399 pipeline handler gets matched and\n> cameras\n> >     > + * are enumerated correctly.\n> >     > + *\n> >     > + * The test is supposed to be run on rockchip platform.\n> >     > + *\n> >     > + * The test lists all cameras registered in the system, if any\n> >     camera is\n> >     > + * available at all.\n> >     > + */\n> >     > +class RKISP1PipelineTest : public Test\n> >     > +{\n> >     > +protected:\n> >     > +     int init();\n> >     > +     int run();\n> >     > +     void cleanup();\n> >     > +\n> >     > +private:\n> >     > +     CameraManager *cameraManager_;\n> >     > +     unsigned int sensors_;\n> >     > +};\n> >     > +\n> >     > +int RKISP1PipelineTest::init()\n> >     > +{\n> >     > +     unique_ptr<DeviceEnumerator> enumerator =\n> >     DeviceEnumerator::create();\n> >     > +     if (!enumerator) {\n> >     > +             cerr << \"Failed to create device enumerator\" << endl;\n> >     > +             return TestFail;\n> >     > +     }\n> >     > +\n> >     > +     if (enumerator->enumerate()) {\n> >     > +             cerr << \"Failed to enumerate media devices\" << endl;\n> >     > +             return TestFail;\n> >     > +     }\n> >     > +\n> >     > +     DeviceMatch dm(\"rkisp1\");\n> >     > +\n> >     > +     std::shared_ptr<MediaDevice> rkisp1 = enumerator->search(dm);\n> >     > +     if (!rkisp1) {\n> >     > +             cerr << \"Failed to find rkisp1: test skip\" << endl;\n> >     > +             return TestSkip;\n> >     > +     }\n> >     > +\n> >     > +     int ret = rkisp1->populate();\n> >     > +     if (ret) {\n> >     > +             cerr << \"Failed to populate media device \"\n> >     > +                     << rkisp1->deviceNode() << endl;\n> >     > +             return TestFail;\n> >     > +     }\n> >     > +\n> >     > +     sensors_ = 0;\n> >     > +     const vector<MediaEntity *> &entities = rkisp1->entities();\n> >     > +     for (MediaEntity *entity : entities) {\n> >     > +             if (entity->function() == MEDIA_ENT_F_CAM_SENSOR)\n> >     > +                     sensors_++;\n> >     > +     }\n> >     > +\n> >     > +     cameraManager_ = new CameraManager();\n> >     > +     ret = cameraManager_->start();\n> >     > +     if (ret) {\n> >     > +             cerr << \"Failed to start the CameraManager\" << endl;\n> >     > +             return TestFail;\n> >     > +     }\n> >     > +\n> >     > +     return 0;\n> >     > +}\n> >     > +\n> >     > +int RKISP1PipelineTest::run()\n> >     > +{\n> >     > +     auto cameras = cameraManager_->cameras();\n> >     > +     for (const std::shared_ptr<Camera> &cam : cameras)\n> >     > +             cout << \"Found camera '\" << cam->name() << \"'\" <<\n> endl;\n> >     > +\n> >     > +     if (cameras.size() != sensors_) {\n> >     > +             cerr << cameras.size() << \" cameras registered, but\n> >     \" << sensors_\n> >     > +                  << \" were expected\" << endl;\n> >     > +             return TestFail;\n> >     > +     }\n> >     > +\n> >     > +     return TestPass;\n> >     > +}\n> >     > +\n> >     > +void RKISP1PipelineTest::cleanup()\n> >     > +{\n> >     > +     cameraManager_->stop();\n> >     > +     delete cameraManager_;\n> >     > +}\n> >     > +\n> >     > +TEST_REGISTER(RKISP1PipelineTest)\n>\n> --\n> Regards\n> --\n> Kieran\n>","headers":{"Return-Path":"<show.liu@linaro.org>","Received":["from mail-io1-xd32.google.com (mail-io1-xd32.google.com\n\t[IPv6:2607:f8b0:4864:20::d32])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 440006045D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2020 09:38:02 +0100 (CET)","by mail-io1-xd32.google.com with SMTP id c16so12899609ioh.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2020 00:38:02 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=KeZoEBsDZ7tvCUZgOp4hETddwTkoxmH5Dr/78354CUE=;\n\tb=OA3fCbArc8JfVhOcP7+G1X7ugLGpZd7evFU/OEWQlsHGldl96aG/LbbKA5UyyTfb/Y\n\tPQcn/I5eLYfo+uu7t23JM+kWBvd92TaajmNjYaXnO/TmCKGcB32Cu59pewN8bMPPSIEi\n\tZEYbIC6Qw3BGphbKCoOTqNQZdRx7b6GKB2antGlCo04Csm8gjGFrFCYwPAeH6NOJHL+6\n\ttxLmNnIzulKwwp4qiqogPWDmuHM2VLYC+0MDyZbygy2uTqYCGJQr4u/RCuuecf8nc8RB\n\t+JEJ/EJrmLXomtz4v3dikhr3mtAANF26hwcZng89XlNv9MCkKOtQbO847rgTkcptcIaW\n\tU4lw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=KeZoEBsDZ7tvCUZgOp4hETddwTkoxmH5Dr/78354CUE=;\n\tb=AzEDNc6JiajHQoCIeb9D25OnvkvLBRz0B6tTbskLvZonM5sXfeP19TBmlrTyQJid95\n\tSg3gbHCAOaGwbi3Tp5wUgUnj5a1JsgGs5Ie61pQjss1DzOKmYFA2hbqPZlgPsLPFY6zN\n\tLXtA8bjd8FyUjK8Xwwc1o9Zev0d7SIY40STXx4uNjAtfhBs42Dv+4DfaD6XKG7GvHvyb\n\tozkJ/DjgWJ87TVunb5bIA5STQY1W3bTkzyaZScp0K0LDVE/+iVcBuchR8BbfaiNznpy7\n\tv2D6qP3TzBcCy9rQTGmTCJ9WRFM2TPr37OJfJaqkpIY5l6fOSu8nNGNJzXldYlxclHOX\n\tRaSw==","X-Gm-Message-State":"APjAAAXp1TB7TlweAg8c4kTNinH7x74pc2Q58mSNyN0XosGwigM30I+J\n\tBaO7luCPj2qzMUJCU1IWR2DK0/bO250hRN0GaKrTOw==","X-Google-Smtp-Source":"APXvYqyJEdG0Lkux8xAg1M2U2W2zO8hGofEF2/VP9RF0aGeYWDRY3hCEQWpu2rBJ8wDm6KfyM7W98hVB0RCnPLWpgGA=","X-Received":"by 2002:a02:b703:: with SMTP id\n\tg3mr18038173jam.101.1578991080732; \n\tTue, 14 Jan 2020 00:38:00 -0800 (PST)","MIME-Version":"1.0","References":"<20200108083003.16428-1-show.liu@linaro.org>\n\t<20200108083003.16428-2-show.liu@linaro.org>\n\t<c9a7be50-da6e-d09c-8db7-a324281d782b@ideasonboard.com>\n\t<CA+yuoHrptRqWsUfFC8KZAzZEuDzv=c+tPgjerr95e6kHPkbzDQ@mail.gmail.com>\n\t<75d4bab3-4514-e9f2-3d39-f1b9f7b92541@ideasonboard.com>","In-Reply-To":"<75d4bab3-4514-e9f2-3d39-f1b9f7b92541@ideasonboard.com>","From":"Show Liu <show.liu@linaro.org>","Date":"Tue, 14 Jan 2020 16:37:49 +0800","Message-ID":"<CA+yuoHokwFvcBoaSUM72c2DpXt9H+ggWS42XTQwfSNd51QXQTQ@mail.gmail.com>","To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org, \n\tPeter Griffin <peter.griffin@linaro.org>","Content-Type":"multipart/alternative; boundary=\"000000000000789cf5059c15824d\"","Subject":"Re: [libcamera-devel] [PATCH v3 1/1] rkisp1: add pipeline test for\n\trkisp1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 14 Jan 2020 08:38:02 -0000"}}]