[{"id":18662,"web_url":"https://patchwork.libcamera.org/comment/18662/","msgid":"<20210810075613.GT2167@pyrite.rasen.tech>","date":"2021-08-10T07:56:13","subject":"Re: [libcamera-devel] [PATCH v2] test: gstreamer: Add unit test to\n\ttest gstreamer single stream working","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Vedant,\n\ntest: gstreamer: Add unit test to test gstreamer single stream working\n\nOn Tue, Aug 10, 2021 at 01:10:04PM +0530, Vedant Paranjape wrote:\n> This patch adds unit test to test if single stream using\n\ns/unit/a/\n\nI think here it's fine, but since the subject needs to be concice, I\nthink the second \"test\" is redundant. \"Add test for gstreamer single\nstream\" maybe is sufficient? Not sure how the others think, maybe this\nwould be too concise :p\n\n> libcamera's gstreamer element works.\n> \n> Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> ---\n>  .../gstreamer_single_stream_test.cpp          | 118 ++++++++++++++++++\n>  test/gstreamer/meson.build                    |  15 +++\n>  test/meson.build                              |   1 +\n>  3 files changed, 134 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..c249a048\n> --- /dev/null\n> +++ b/test/gstreamer/gstreamer_single_stream_test.cpp\n> @@ -0,0 +1,118 @@\n> +#include <iostream>\n> +#include <gst/gst.h>\n> +\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +\n> +class GstreamerSingleStreamTest: public Test\n> +{\n> +protected:\n> +    GstElement *pipeline, *libcamera_src, *convert0, *sink0;\n> +    GstBus *bus;\n> +    GstMessage *msg;\n> +    GstStateChangeReturn ret;\n\n\nI think these can go in private. Also since they're all member variables\nthey should have a _ suffix.\n\n(for the whole file) indentation\n\n> +\n> +    int GstreamerPrintError(GstMessage *msg_)\n> +    {\n> +        int TestResult = TestPass;\n> +\n> +        if (msg_ != NULL) {\n> +            GError *err;\n> +            gchar *debug_info;\n> +\n> +            switch (GST_MESSAGE_TYPE(msg_)) {\n> +                case GST_MESSAGE_ERROR:\n\nFrom here,\n\n> +                    gst_message_parse_error(msg_, &err, &debug_info);\n> +                    g_printerr(\"Error received from element %s: %s\\n\", GST_OBJECT_NAME(msg_->src), err->message);\n> +                    g_printerr(\"Debugging information: %s\\n\", debug_info ? debug_info : \"none\");\n> +                    g_clear_error(&err);\n> +                    g_free(debug_info);\n> +                    TestResult = TestFail;\n\nto here, I meant this block should be in some print error function.\n\n> +                    break;\n> +                case GST_MESSAGE_EOS:\n> +                    g_printerr(\"End-Of-Stream reached.\\n\");\n\nFor example, this isn't an error, so this certainly doesn't belong in a\n\"PrintError\" function :D\n\n> +                    TestResult = TestFail;\n> +                    break;\n> +                default:\n> +                    /* We should not reach here because we only asked for ERRORs and EOS */\n> +                    g_printerr(\"Unexpected message received.\\n\");\n> +                    TestResult = TestFail;\n> +                    break;\n> +            }\n> +        }\n> +\n> +        return TestResult;\n> +    }\n> +\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\", err_init ? err_init->message : \"unknown error occurred\");\n\nBreak up the line.\n\ns/occurred//\n\n\n> +            if (err_init) {\n> +                g_error_free(err_init);\n> +            }\n\nDon't need the braces.\n\n> +\n> +            return TestFail;\n> +        }\n> +\n> +        /* Create the elements */\n> +        libcamera_src = gst_element_factory_make(\"libcamerasrc\", \"libcamera\");\n> +        convert0 = gst_element_factory_make(\"videoconvert\", \"convert0\");\n> +        sink0 = gst_element_factory_make(\"autovideosink\", \"sink0\");\n> +\n> +        /* Create the empty pipeline */\n> +        pipeline = gst_pipeline_new(\"test-pipeline\");\n> +\n> +        if (!pipeline || !convert0 || !sink0 || !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, convert0, sink0, NULL);\n> +        if (gst_element_link_many(libcamera_src, convert0, sink0, NULL) != TRUE) {\n> +            g_printerr(\"Elements could not be linked (1).\\n\");\n\nWhat's this (1) for?\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 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> +                                    GstMessageType((uint)GST_MESSAGE_ERROR | (uint)GST_MESSAGE_EOS));\n> +\n> +        /* Parse error message */\n> +        if (GstreamerPrintError(msg) == TestFail) {\n> +            return TestFail;\n> +        }\n\nThis should be replaced with the switch-case.\n\n\nOtherwise, looks good.\n\n\nPaul\n\n> +\n> +        return TestPass;\n> +    }\n> +};\n> +\n> +TEST_REGISTER(GstreamerSingleStreamTest)\n> diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> new file mode 100644\n> index 00000000..36643d4a\n> --- /dev/null\n> +++ b/test/gstreamer/meson.build\n> @@ -0,0 +1,15 @@\n> +# SPDX-License-Identifier: CC0-1.0\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> 2.25.1\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 2CF3DBD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 10 Aug 2021 07:56:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8231068826;\n\tTue, 10 Aug 2021 09:56:22 +0200 (CEST)","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 3B39C687DE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Aug 2021 09:56:21 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9F126EE;\n\tTue, 10 Aug 2021 09:56:19 +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=\"fzMfytS1\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1628582180;\n\tbh=ir8SgdB4TvcZYPOgIYqR0uV3IufEnaTKGyIPEnAcypw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fzMfytS1neGzWnQukQCfRhLD+l2j/5B4KRsd7fhTOcPfDrYL+GoYaMWkr7yvTIScT\n\tO8xsqMeQvD825xhsfbhQLq/Te+9+QUDdewDTM8JAwGAXt/qxF+cKYt7JbgMjANq3KS\n\tKrhegziO1GxtFabJakVnpuGvaFa81+JQx4oxxF88=","Date":"Tue, 10 Aug 2021 16:56:13 +0900","From":"paul.elder@ideasonboard.com","To":"Vedant Paranjape <vedantparanjape160201@gmail.com>","Message-ID":"<20210810075613.GT2167@pyrite.rasen.tech>","References":"<20210810074004.1743947-1-vedantparanjape160201@gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20210810074004.1743947-1-vedantparanjape160201@gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v2] test: gstreamer: Add unit test to\n\ttest gstreamer single stream working","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>"}},{"id":18665,"web_url":"https://patchwork.libcamera.org/comment/18665/","msgid":"<CACGrz-OuXEXCBZWwpyK_Ljzg2rY8uMQv=oEE2UyE1k1Q+sJAwA@mail.gmail.com>","date":"2021-08-10T08:50:54","subject":"Re: [libcamera-devel] [PATCH v2] test: gstreamer: Add unit test to\n\ttest gstreamer single stream working","submitter":{"id":85,"url":"https://patchwork.libcamera.org/api/people/85/","name":"Vedant Paranjape","email":"vedantparanjape160201@gmail.com"},"content":"Hi Paul,\n\nOn Tue, Aug 10, 2021 at 1:26 PM <paul.elder@ideasonboard.com> wrote:\n\n> Hi Vedant,\n>\n> test: gstreamer: Add unit test to test gstreamer single stream working\n>\n> On Tue, Aug 10, 2021 at 01:10:04PM +0530, Vedant Paranjape wrote:\n> > This patch adds unit test to test if single stream using\n>\n> s/unit/a/\n>\n> I think here it's fine, but since the subject needs to be concice, I\n> think the second \"test\" is redundant. \"Add test for gstreamer single\n> stream\" maybe is sufficient? Not sure how the others think, maybe this\n> would be too concise :p\n>\n> > libcamera's gstreamer element works.\n> >\n> > Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> > ---\n> >  .../gstreamer_single_stream_test.cpp          | 118 ++++++++++++++++++\n> >  test/gstreamer/meson.build                    |  15 +++\n> >  test/meson.build                              |   1 +\n> >  3 files changed, 134 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..c249a048\n> > --- /dev/null\n> > +++ b/test/gstreamer/gstreamer_single_stream_test.cpp\n> > @@ -0,0 +1,118 @@\n> > +#include <iostream>\n> > +#include <gst/gst.h>\n> > +\n> > +#include \"test.h\"\n> > +\n> > +using namespace std;\n> > +\n> > +class GstreamerSingleStreamTest: public Test\n> > +{\n> > +protected:\n> > +    GstElement *pipeline, *libcamera_src, *convert0, *sink0;\n> > +    GstBus *bus;\n> > +    GstMessage *msg;\n> > +    GstStateChangeReturn ret;\n>\n>\n> I think these can go in private. Also since they're all member variables\n> they should have a _ suffix.\n>\n> (for the whole file) indentation\n>\n\nNot sure what's wrong with indentation. I have followed how it's there in\nother tests\n\n> +\n> > +    int GstreamerPrintError(GstMessage *msg_)\n> > +    {\n> > +        int TestResult = TestPass;\n> > +\n> > +        if (msg_ != NULL) {\n> > +            GError *err;\n> > +            gchar *debug_info;\n> > +\n> > +            switch (GST_MESSAGE_TYPE(msg_)) {\n> > +                case GST_MESSAGE_ERROR:\n>\n> From here,\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> > +                    TestResult = TestFail;\n>\n> to here, I meant this block should be in some print error function.\n>\n> > +                    break;\n> > +                case GST_MESSAGE_EOS:\n> > +                    g_printerr(\"End-Of-Stream reached.\\n\");\n>\n> For example, this isn't an error, so this certainly doesn't belong in a\n> \"PrintError\" function :D\n>\n> > +                    TestResult = TestFail;\n> > +                    break;\n> > +                default:\n> > +                    /* We should not reach here because we only asked\n> for ERRORs and EOS */\n> > +                    g_printerr(\"Unexpected message received.\\n\");\n> > +                    TestResult = TestFail;\n> > +                    break;\n> > +            }\n> > +        }\n> > +\n> > +        return TestResult;\n> > +    }\n> > +\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 error occurred\");\n>\n> Break up the line.\n>\n> s/occurred//\n>\n>\n> > +            if (err_init) {\n> > +                g_error_free(err_init);\n> > +            }\n>\n> Don't need the braces.\n>\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\", \"convert0\");\n> > +        sink0 = gst_element_factory_make(\"autovideosink\", \"sink0\");\n> > +\n> > +        /* Create the empty pipeline */\n> > +        pipeline = gst_pipeline_new(\"test-pipeline\");\n> > +\n> > +        if (!pipeline || !convert0 || !sink0 || !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, convert0,\n> sink0, NULL);\n> > +        if (gst_element_link_many(libcamera_src, convert0, sink0, NULL)\n> != TRUE) {\n> > +            g_printerr(\"Elements could not be linked (1).\\n\");\n>\n> What's this (1) for?\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 playing\n> 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 (GstreamerPrintError(msg) == TestFail) {\n> > +            return TestFail;\n> > +        }\n>\n> This should be replaced with the switch-case.\n>\n>\n> Otherwise, looks good.\n>\n>\n> Paul\n>\n> > +\n> > +        return TestPass;\n> > +    }\n> > +};\n> > +\n> > +TEST_REGISTER(GstreamerSingleStreamTest)\n> > diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> > new file mode 100644\n> > index 00000000..36643d4a\n> > --- /dev/null\n> > +++ b/test/gstreamer/meson.build\n> > @@ -0,0 +1,15 @@\n> > +# SPDX-License-Identifier: CC0-1.0\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> > 2.25.1\n> >\n\n\nThanks for the review, will do the requested changes.\n\nRegards,\nVedant","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 73CEABD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 10 Aug 2021 08:51:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DAC9D687FA;\n\tTue, 10 Aug 2021 10:51:09 +0200 (CEST)","from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com\n\t[IPv6:2607:f8b0:4864:20::b29])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 06B37687DE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Aug 2021 10:51:08 +0200 (CEST)","by mail-yb1-xb29.google.com with SMTP id z18so34798591ybg.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Aug 2021 01:51:07 -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=\"vL5xQB2Y\"; 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=+awFqjgte+DqX5f+HugSdN5e4H+gaf5zAju5rgdIbFo=;\n\tb=vL5xQB2Ygf2ofW1Qn5p9mOhwzPTG3DaR4JyLs+ovQC6C73313Bqj6Hrhy8ppzlf3Fr\n\tQH4rsUCwRniofdLehOhw8i356wJqdUx7z5XMGX80OW/wVDSyQNp/byBah0h3eSt+C19k\n\tPdPiDEQ2jrz7bsWVefpRN5GdOFtdTJOcE6mKEOIrbjhf0Y9hQPLYXKawYDmH/DBwuI9v\n\t8iJ8UqQedrS306CBsAsGoMcxddp03QsMLP6SAxMdLpJd+1TAr/LacPKr7MsxANb5TvyE\n\tSohWCOgm5Q6bTznwYfd9EhcTj/nxm0KLUHY5GyAB6QVfxFTZc6ovv/HI2kve/d26MlhR\n\tSzwA==","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=+awFqjgte+DqX5f+HugSdN5e4H+gaf5zAju5rgdIbFo=;\n\tb=hOtIucdPv4u8cqBrQUhO8UT7tHsD2zdzX4p3eXi3lQceJFfAiaf7fcCzjb1YLMANyz\n\tYiiiuGoOh9+Xe0M89WMpqY2XSeS9/BBr3FIrUfTKTwgHeEk7rNi0oc1fmJNTHDPp4EnF\n\ti+nPab3FxP9XobI6eQYyaTnzvZ7gxNya7mQZMRaA/j2/Hh4IfVyh9ovVATdZOfYTVlnI\n\t1qSb89Wez87r31+h5hrorz/iDUe2xYSNApgEmoUJNbhZ9RTmCCG5KqTogi8oDwBZwwp/\n\t71ePiOAFqnZoWankm5CJIgaEPyKAWcZc9jlrLmHbqcSiMJp1+nkofCcWeffIqSwQ0aII\n\ts18Q==","X-Gm-Message-State":"AOAM530C4KE2Ln5iM3XFQFSyqajQLReSIF1mlGFWmXrGm9UeATQkLRvl\n\tG2U3wnkyrKRtYRqsUIY686xQfQPhBScYZqdtfvq7hnXGjCo=","X-Google-Smtp-Source":"ABdhPJyYDag3TzrYJ84MAoliJZZ3Yc0geIqitj+TACs5rni/XaExuMbPEUQJzhMU5ADlNI9JCxR5f6Ym+7vXjxtOUNI=","X-Received":"by 2002:a25:37cf:: with SMTP id\n\te198mr15951172yba.223.1628585466516; \n\tTue, 10 Aug 2021 01:51:06 -0700 (PDT)","MIME-Version":"1.0","References":"<20210810074004.1743947-1-vedantparanjape160201@gmail.com>\n\t<20210810075613.GT2167@pyrite.rasen.tech>","In-Reply-To":"<20210810075613.GT2167@pyrite.rasen.tech>","From":"Vedant Paranjape <vedantparanjape160201@gmail.com>","Date":"Tue, 10 Aug 2021 14:20:54 +0530","Message-ID":"<CACGrz-OuXEXCBZWwpyK_Ljzg2rY8uMQv=oEE2UyE1k1Q+sJAwA@mail.gmail.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"00000000000037d78605c9309ae1\"","Subject":"Re: [libcamera-devel] [PATCH v2] test: gstreamer: Add unit test to\n\ttest gstreamer single stream working","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>"}}]