[{"id":18700,"web_url":"https://patchwork.libcamera.org/comment/18700/","msgid":"<28218c71-4020-0275-ec56-60e3a480f499@ideasonboard.com>","date":"2021-08-11T13:58:30","subject":"Re: [libcamera-devel] [PATCH v6] test: gstreamer: Add test for\n\tgstreamer single stream","submitter":{"id":75,"url":"https://patchwork.libcamera.org/api/people/75/","name":"Jean-Michel Hautbois","email":"jeanmichel.hautbois@ideasonboard.com"},"content":"Hi Vedant,\n\nThanks for the patch,\n\nOn 11/08/2021 15:48, Vedant Paranjape wrote:\n> This patch adds a test to test if single stream using\n> libcamera's gstreamer element works.\n> \n\nCould you elaborate the commit message ?\nWhat is the gstreamer pipeline used for testing ?\nAs far as I can tell, it looks like you are doing something similar to\ngst-launch libcamerasrc ! videoconvert ! fakesink\n\nWhy do you need a convert before the sink as you are not doing anything\nwith the buffer ?\nThis might be useful information.\n\n> Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> ---\n>  .../gstreamer_single_stream_test.cpp          | 116 ++++++++++++++++++\n>  test/gstreamer/meson.build                    |  19 +++\n>  test/meson.build                              |   1 +\n>  3 files changed, 136 insertions(+)\n>  create mode 100644 test/gstreamer/gstreamer_single_stream_test.cpp\n>  create mode 100644 test/gstreamer/meson.build\n> \n> diff --git a/test/gstreamer/gstreamer_single_stream_test.cpp b/test/gstreamer/gstreamer_single_stream_test.cpp\n> new file mode 100644\n> index 00000000..1cee23eb\n> --- /dev/null\n> +++ b/test/gstreamer/gstreamer_single_stream_test.cpp\n> @@ -0,0 +1,116 @@\n> +#include <gst/gst.h>\n> +#include <iostream>\n> +\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +\n> +class GstreamerSingleStreamTest : public Test\n> +{\n> +protected:\n> +\tint init() override\n> +\t{\n> +\t\t/* Initialize GStreamer */\n> +\t\tGError *err_init = nullptr;\n> +\t\tif (!gst_init_check(nullptr, nullptr, &err_init)) {\n> +\t\t\tg_printerr(\"Could not initialize GStreamer: %s\\n\",\n> +\t\t\t\t   err_init ? err_init->message : \"unknown error\");\n> +\t\t\tif (err_init)\n> +\t\t\t\tg_error_free(err_init);\n> +\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Create the elements */\n> +\t\tlibcamera_src_ = gst_element_factory_make(\"libcamerasrc\", \"libcamera\");\n> +\t\tconvert0_ = gst_element_factory_make(\"videoconvert\", \"convert0\");\n> +\t\tsink0_ = gst_element_factory_make(\"fakevideosink\", \"sink0\");\n\nOut of curiosity: are you planning to have more complex tests too ?\nSomething to verify the framerate for instance ?\n\n> +\n> +\t\t/* Create the empty pipeline_ */\n> +\t\tpipeline_ = gst_pipeline_new(\"test-pipeline\");\n> +\n> +\t\tif (!pipeline_ || !convert0_ || !sink0_ || !libcamera_src_) {\n> +\t\t\tg_printerr(\"Not all elements could be created.\\n\");\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +\tvoid cleanup() override\n> +\t{\n> +\t\tgst_message_unref(msg_);\n> +\t\tgst_object_unref(bus_);\n> +\t\tgst_element_set_state(pipeline_, GST_STATE_NULL);\n> +\t\tgst_object_unref(pipeline_);\n> +\t}\n> +\n> +\tint run() override\n> +\t{\n> +\t\t/* Build the pipeline */\n> +\t\tgst_bin_add_many(GST_BIN(pipeline_), libcamera_src_, convert0_, sink0_, NULL);\n> +\t\tif (gst_element_link_many(libcamera_src_, convert0_, sink0_, NULL) != TRUE) {\n> +\t\t\tg_printerr(\"Elements could not be linked.\\n\");\n> +\t\t\tgst_object_unref(pipeline_);\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Start playing */\n> +\t\tret_ = gst_element_set_state(pipeline_, GST_STATE_PLAYING);\n> +\t\tif (ret_ == GST_STATE_CHANGE_FAILURE) {\n> +\t\t\tg_printerr(\"Unable to set the pipeline to the playing state.\\n\");\n> +\t\t\tgst_object_unref(pipeline_);\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Wait until error or EOS or timeout after 2 seconds*/\n> +\t\tGstClockTime timeout = 2000000000;\n> +\t\tbus_ = gst_element_get_bus(pipeline_);\n> +\t\tmsg_ = gst_bus_timed_pop_filtered(bus_, timeout,\n> +\t\t\t\t\t\t  GstMessageType((uint)GST_MESSAGE_ERROR | (uint)GST_MESSAGE_EOS));\n> +\n> +\t\t/* Parse error message */\n> +\t\tif (msg_ == NULL)\n> +\t\t\treturn TestPass;\n> +\n> +\t\tswitch (GST_MESSAGE_TYPE(msg_)) {\n> +\t\tcase GST_MESSAGE_ERROR:\n> +\t\t\tGstreamerPrintError(msg_);\n> +\t\t\treturn TestFail;\n> +\t\t\tbreak;\n> +\t\tcase GST_MESSAGE_EOS:\n> +\t\t\tg_print(\"End-Of-Stream reached.\\n\");\n> +\t\t\treturn TestFail;\n> +\t\t\tbreak;\n> +\t\tdefault:\n> +\t\t\tg_printerr(\"Unexpected message received.\\n\");\n> +\t\t\treturn TestFail;\n> +\t\t\tbreak;\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +private:\n> +\tGstElement *pipeline_, *libcamera_src_, *convert0_, *sink0_;\n> +\tGstBus *bus_;\n> +\tGstMessage *msg_;\n> +\tGstStateChangeReturn ret_;\n> +\n> +\tvoid GstreamerPrintError(GstMessage *msg)\n> +\t{\n> +\t\tGError *err;\n> +\t\tgchar *debug_info;\n> +\n> +\t\tgst_message_parse_error(msg, &err, &debug_info);\n> +\t\tg_printerr(\"Error received from element %s: %s\\n\",\n> +\t\t\t   GST_OBJECT_NAME(msg->src), err->message);\n> +\t\tg_printerr(\"Debugging information: %s\\n\",\n> +\t\t\t   debug_info ? debug_info : \"none\");\n> +\t\tg_clear_error(&err);\n> +\t\tg_free(debug_info);\n> +\t}\n> +};\n> +\n> +TEST_REGISTER(GstreamerSingleStreamTest)\n> +\n> diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> new file mode 100644\n> index 00000000..b99aa0da\n> --- /dev/null\n> +++ b/test/gstreamer/meson.build\n> @@ -0,0 +1,19 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +if not gst_enabled\n> +    subdir_done()\n> +endif\n> +\n> +gstreamer_tests = [\n> +    ['single_stream_test',   'gstreamer_single_stream_test.cpp'],\n> +]\n> +gstreamer_dep = dependency('gstreamer-1.0', required: true)\n> +\n> +foreach t : gstreamer_tests\n> +    exe = executable(t[0], t[1],\n> +                     dependencies : [libcamera_private, gstreamer_dep],\n> +                     link_with : test_libraries,\n> +                     include_directories : test_includes_internal)\n> +\n> +    test(t[0], exe, suite : 'gstreamer', is_parallel : false)\n> +endforeach\n> diff --git a/test/meson.build b/test/meson.build\n> index 3bceb5df..d0466f17 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -11,6 +11,7 @@ subdir('libtest')\n>  \n>  subdir('camera')\n>  subdir('controls')\n> +subdir('gstreamer')\n>  subdir('ipa')\n>  subdir('ipc')\n>  subdir('log')\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id ED02CC3240\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 11 Aug 2021 13:58:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 54D696884F;\n\tWed, 11 Aug 2021 15:58:33 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8B52468826\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 11 Aug 2021 15:58:32 +0200 (CEST)","from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:3594:1af5:960b:2013])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1DAD5DD;\n\tWed, 11 Aug 2021 15:58:32 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"F7JsZZWV\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1628690312;\n\tbh=MrZsgE9RpHcBKlHgjcA24OK8TNCV6QuKXONu05wZcoo=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=F7JsZZWVoORgJxsxhcHG1zzfa8MYPt7Nr8EMgf2/p55irMRtcDAC+R9J/jcRRN3Tn\n\tTprR1T7FG7YhCs0kO3AUfOT03aVA5mJ5mRwLsoqBlzuNq82OBu56Qe1+dgiLgonceK\n\t+PVtwBqivAGzIetfGxuM/nsDdwvoILHsvyDtyD04=","To":"Vedant Paranjape <vedantparanjape160201@gmail.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210811134820.126423-1-vedantparanjape160201@gmail.com>","From":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","Message-ID":"<28218c71-4020-0275-ec56-60e3a480f499@ideasonboard.com>","Date":"Wed, 11 Aug 2021 15:58:30 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210811134820.126423-1-vedantparanjape160201@gmail.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH v6] test: gstreamer: Add test for\n\tgstreamer single stream","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":18703,"web_url":"https://patchwork.libcamera.org/comment/18703/","msgid":"<CACGrz-OvFmAE-6d0KMBbQVQYR9rGHZ5mpCGmw-NxNrUjGs2o3Q@mail.gmail.com>","date":"2021-08-11T14:33:12","subject":"Re: [libcamera-devel] [PATCH v6] test: gstreamer: Add test for\n\tgstreamer single stream","submitter":{"id":85,"url":"https://patchwork.libcamera.org/api/people/85/","name":"Vedant Paranjape","email":"vedantparanjape160201@gmail.com"},"content":"Hi Jean-Michel,\nThanks for the review,\n\n\nOn Wed, Aug 11, 2021 at 7:28 PM Jean-Michel Hautbois <\njeanmichel.hautbois@ideasonboard.com> wrote:\n\n> Hi Vedant,\n>\n> Thanks for the patch,\n>\n> On 11/08/2021 15:48, Vedant Paranjape wrote:\n> > This patch adds a test to test if single stream using\n> > libcamera's gstreamer element works.\n> >\n>\n> Could you elaborate the commit message ?\n> What is the gstreamer pipeline used for testing ?\n>\n\ngstreamer pipeline is being used to test the gstreamer element in libcamera.\n\nAs far as I can tell, it looks like you are doing something similar to\n> gst-launch libcamerasrc ! videoconvert ! fakesink\n>\n> Why do you need a convert before the sink as you are not doing anything\n> with the buffer ?\n>\n\nTo check if the camera generated legible data.\n\nThis might be useful information.\n>\n> > Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> > ---\n> >  .../gstreamer_single_stream_test.cpp          | 116 ++++++++++++++++++\n> >  test/gstreamer/meson.build                    |  19 +++\n> >  test/meson.build                              |   1 +\n> >  3 files changed, 136 insertions(+)\n> >  create mode 100644 test/gstreamer/gstreamer_single_stream_test.cpp\n> >  create mode 100644 test/gstreamer/meson.build\n> >\n> > diff --git a/test/gstreamer/gstreamer_single_stream_test.cpp\n> b/test/gstreamer/gstreamer_single_stream_test.cpp\n> > new file mode 100644\n> > index 00000000..1cee23eb\n> > --- /dev/null\n> > +++ b/test/gstreamer/gstreamer_single_stream_test.cpp\n> > @@ -0,0 +1,116 @@\n> > +#include <gst/gst.h>\n> > +#include <iostream>\n> > +\n> > +#include \"test.h\"\n> > +\n> > +using namespace std;\n> > +\n> > +class GstreamerSingleStreamTest : public Test\n> > +{\n> > +protected:\n> > +     int init() override\n> > +     {\n> > +             /* Initialize GStreamer */\n> > +             GError *err_init = nullptr;\n> > +             if (!gst_init_check(nullptr, nullptr, &err_init)) {\n> > +                     g_printerr(\"Could not initialize GStreamer: %s\\n\",\n> > +                                err_init ? err_init->message : \"unknown\n> error\");\n> > +                     if (err_init)\n> > +                             g_error_free(err_init);\n> > +\n> > +                     return TestFail;\n> > +             }\n> > +\n> > +             /* Create the elements */\n> > +             libcamera_src_ = gst_element_factory_make(\"libcamerasrc\",\n> \"libcamera\");\n> > +             convert0_ = gst_element_factory_make(\"videoconvert\",\n> \"convert0\");\n> > +             sink0_ = gst_element_factory_make(\"fakevideosink\",\n> \"sink0\");\n>\n> Out of curiosity: are you planning to have more complex tests too ?\n> Something to verify the framerate for instance ?\n>\n\nYes, I will eventually do this, next in line is test for multistream using\ngstreamer.\n\n> +\n> > +             /* Create the empty pipeline_ */\n> > +             pipeline_ = gst_pipeline_new(\"test-pipeline\");\n> > +\n> > +             if (!pipeline_ || !convert0_ || !sink0_ ||\n> !libcamera_src_) {\n> > +                     g_printerr(\"Not all elements could be created.\\n\");\n> > +                     return TestFail;\n> > +             }\n> > +\n> > +             return TestPass;\n> > +     }\n> > +\n> > +     void cleanup() override\n> > +     {\n> > +             gst_message_unref(msg_);\n> > +             gst_object_unref(bus_);\n> > +             gst_element_set_state(pipeline_, GST_STATE_NULL);\n> > +             gst_object_unref(pipeline_);\n> > +     }\n> > +\n> > +     int run() override\n> > +     {\n> > +             /* Build the pipeline */\n> > +             gst_bin_add_many(GST_BIN(pipeline_), libcamera_src_,\n> convert0_, sink0_, NULL);\n> > +             if (gst_element_link_many(libcamera_src_, convert0_,\n> sink0_, NULL) != TRUE) {\n> > +                     g_printerr(\"Elements could not be linked.\\n\");\n> > +                     gst_object_unref(pipeline_);\n> > +                     return TestFail;\n> > +             }\n> > +\n> > +             /* Start playing */\n> > +             ret_ = gst_element_set_state(pipeline_, GST_STATE_PLAYING);\n> > +             if (ret_ == GST_STATE_CHANGE_FAILURE) {\n> > +                     g_printerr(\"Unable to set the pipeline to the\n> playing state.\\n\");\n> > +                     gst_object_unref(pipeline_);\n> > +                     return TestFail;\n> > +             }\n> > +\n> > +             /* Wait until error or EOS or timeout after 2 seconds*/\n> > +             GstClockTime timeout = 2000000000;\n> > +             bus_ = gst_element_get_bus(pipeline_);\n> > +             msg_ = gst_bus_timed_pop_filtered(bus_, timeout,\n> > +\n>  GstMessageType((uint)GST_MESSAGE_ERROR | (uint)GST_MESSAGE_EOS));\n> > +\n> > +             /* Parse error message */\n> > +             if (msg_ == NULL)\n> > +                     return TestPass;\n> > +\n> > +             switch (GST_MESSAGE_TYPE(msg_)) {\n> > +             case GST_MESSAGE_ERROR:\n> > +                     GstreamerPrintError(msg_);\n> > +                     return TestFail;\n> > +                     break;\n> > +             case GST_MESSAGE_EOS:\n> > +                     g_print(\"End-Of-Stream reached.\\n\");\n> > +                     return TestFail;\n> > +                     break;\n> > +             default:\n> > +                     g_printerr(\"Unexpected message received.\\n\");\n> > +                     return TestFail;\n> > +                     break;\n> > +             }\n> > +\n> > +             return TestPass;\n> > +     }\n> > +\n> > +private:\n> > +     GstElement *pipeline_, *libcamera_src_, *convert0_, *sink0_;\n> > +     GstBus *bus_;\n> > +     GstMessage *msg_;\n> > +     GstStateChangeReturn ret_;\n> > +\n> > +     void GstreamerPrintError(GstMessage *msg)\n> > +     {\n> > +             GError *err;\n> > +             gchar *debug_info;\n> > +\n> > +             gst_message_parse_error(msg, &err, &debug_info);\n> > +             g_printerr(\"Error received from element %s: %s\\n\",\n> > +                        GST_OBJECT_NAME(msg->src), err->message);\n> > +             g_printerr(\"Debugging information: %s\\n\",\n> > +                        debug_info ? debug_info : \"none\");\n> > +             g_clear_error(&err);\n> > +             g_free(debug_info);\n> > +     }\n> > +};\n> > +\n> > +TEST_REGISTER(GstreamerSingleStreamTest)\n> > +\n> > diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> > new file mode 100644\n> > index 00000000..b99aa0da\n> > --- /dev/null\n> > +++ b/test/gstreamer/meson.build\n> > @@ -0,0 +1,19 @@\n> > +# SPDX-License-Identifier: CC0-1.0\n> > +\n> > +if not gst_enabled\n> > +    subdir_done()\n> > +endif\n> > +\n> > +gstreamer_tests = [\n> > +    ['single_stream_test',   'gstreamer_single_stream_test.cpp'],\n> > +]\n> > +gstreamer_dep = dependency('gstreamer-1.0', required: true)\n> > +\n> > +foreach t : gstreamer_tests\n> > +    exe = executable(t[0], t[1],\n> > +                     dependencies : [libcamera_private, gstreamer_dep],\n> > +                     link_with : test_libraries,\n> > +                     include_directories : test_includes_internal)\n> > +\n> > +    test(t[0], exe, suite : 'gstreamer', is_parallel : false)\n> > +endforeach\n> > diff --git a/test/meson.build b/test/meson.build\n> > index 3bceb5df..d0466f17 100644\n> > --- a/test/meson.build\n> > +++ b/test/meson.build\n> > @@ -11,6 +11,7 @@ subdir('libtest')\n> >\n> >  subdir('camera')\n> >  subdir('controls')\n> > +subdir('gstreamer')\n> >  subdir('ipa')\n> >  subdir('ipc')\n> >  subdir('log')\n> >\n>\n\nRegards,\n*Vedant Paranjape*","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BDE41BD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 11 Aug 2021 14:33:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2224F6884F;\n\tWed, 11 Aug 2021 16:33:26 +0200 (CEST)","from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com\n\t[IPv6:2607:f8b0:4864:20::b35])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C527F68826\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 11 Aug 2021 16:33:24 +0200 (CEST)","by mail-yb1-xb35.google.com with SMTP id a93so5096697ybi.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 11 Aug 2021 07:33:24 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"qfu/HWca\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=yPjjDZxREYGtqRAFxP0fXzjCH/flNSvxb7a9XMHmew0=;\n\tb=qfu/HWcaye/gqdMc0FP7v6QXacU+rBLsZj6g45TPYE3aWsfgCnTylbTLlUsOU05o9c\n\tWW37oeoBdZezvUPLq/q+44lrzATuvW5d732F4sEB0s6W14L97kMvL+Y/006AIZ3S8ogD\n\tWTiueTHff6aoRyN2wE3SY5eNz5E/x94Un8brCkHL8eQRYxD1MZGw9BgD08MlTo8V9hjG\n\t+3d+qmNzmvQ70+aWqFVRoAw84g1w4CwOtd4FK85jcXtUJnFCFMT3Kd33KZ4Y8eC//qkz\n\tqaQSOrPu54HF4dxxejiqOZK38LpWPINpPuO2UskJkSi1fyB2YS4XEaoPlFdsIjvbWiqI\n\tM8sg==","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=yPjjDZxREYGtqRAFxP0fXzjCH/flNSvxb7a9XMHmew0=;\n\tb=Qccy7y5jhip+HZDWIMIckITAARItQtTDXTEyaExDzPhwebEUlBvR91KT/4ZLK1nTOb\n\tOXM0T7+TZwRX0ML1WBOEMKhNsMHEBpe++JhlNl9PiO1gsyXiY9hrpN2G+cf0goZdLmrs\n\tonXNxHKLqj1UfCzLWyt5jS8RPWU+GQhIbjljUAgQSh09+kgJQFiDLfbUS6MIPo2Tq9mf\n\tmKuesJvRoOdVIjqxg5UvUO51V9PmsWDWKuNuHCPRieowBwb+Y/HcN8ZsOIfbf1VWasx6\n\te0wPBPw6/t/pApM5TgnpgnI+Prcm58fwTpyE/dW8/Pp0V4T8ZE31ycP6bnC4V82jVcxk\n\tQIeA==","X-Gm-Message-State":"AOAM5334e8eFrDIb8FeM0psU581mZqRUDGZjN9WCEVTWTa64NUVOXA07\n\tS5AMztRiXa81v3TzIGlNkv9mHWdiSIPe0gDwqtsn2jwkxBg=","X-Google-Smtp-Source":"ABdhPJykxJ0HIFYAwuiT1oJU7Jucshw6uUmy6UKSMKaj2kdb35BLi0xXRG/6H58mEXg3CVnJl+ZWhNEELcsFrSKNXfU=","X-Received":"by 2002:a25:37cf:: with SMTP id\n\te198mr25034616yba.223.1628692403287; \n\tWed, 11 Aug 2021 07:33:23 -0700 (PDT)","MIME-Version":"1.0","References":"<20210811134820.126423-1-vedantparanjape160201@gmail.com>\n\t<28218c71-4020-0275-ec56-60e3a480f499@ideasonboard.com>","In-Reply-To":"<28218c71-4020-0275-ec56-60e3a480f499@ideasonboard.com>","From":"Vedant Paranjape <vedantparanjape160201@gmail.com>","Date":"Wed, 11 Aug 2021 20:03:12 +0530","Message-ID":"<CACGrz-OvFmAE-6d0KMBbQVQYR9rGHZ5mpCGmw-NxNrUjGs2o3Q@mail.gmail.com>","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"000000000000257b3c05c949808d\"","Subject":"Re: [libcamera-devel] [PATCH v6] test: gstreamer: Add test for\n\tgstreamer single stream","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]