[{"id":19835,"web_url":"https://patchwork.libcamera.org/comment/19835/","msgid":"<20210924085056.GX4382@pyrite.rasen.tech>","date":"2021-09-24T08:50:56","subject":"Re: [libcamera-devel] [PATCH v4] test: gstreamer: Add a test for\n\tgstreamer multi stream","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Vedant,\n\nOn Fri, Sep 24, 2021 at 02:08:21PM +0530, Vedant Paranjape wrote:\n> This patch adds a test to test if multi stream using libcamera's\n> gstreamer element works.\n> \n> Test will run only on devices that support multistream capture, eg.,\n> devices that use IPU3 and raspberrypi pipeline. This was tested on\n> a Raspberry Pi 4B+.\n> \n> Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> ---\n>  .../gstreamer/gstreamer_multi_stream_test.cpp | 124 ++++++++++++++++++\n>  test/gstreamer/meson.build                    |   1 +\n>  2 files changed, 125 insertions(+)\n>  create mode 100644 test/gstreamer/gstreamer_multi_stream_test.cpp\n> \n> diff --git a/test/gstreamer/gstreamer_multi_stream_test.cpp b/test/gstreamer/gstreamer_multi_stream_test.cpp\n> new file mode 100644\n> index 000000000000..6a9a6f2509cb\n> --- /dev/null\n> +++ b/test/gstreamer/gstreamer_multi_stream_test.cpp\n> @@ -0,0 +1,124 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2021, Vedant Paranjape\n> + *\n> + * gstreamer_multi_stream_test.cpp - GStreamer multi stream capture test\n> + */\n> +\n> +#include <iostream>\n> +#include <unistd.h>\n> +\n> +#include <libcamera/libcamera.h>\n> +\n> +#include <gst/gst.h>\n> +\n> +#include \"gstreamer_test.h\"\n> +#include \"test.h\"\n\nCould you please later send a patch to remove the unnecessary includes\nfrom the single stream test?\n\n> +\n> +using namespace std;\n> +\n> +class GstreamerMultiStreamTest : public GstreamerTest, public Test\n> +{\n> +public:\n> +\tGstreamerMultiStreamTest()\n> +\t\t: GstreamerTest()\n> +\t{\n> +\t}\n> +\n> +protected:\n> +\tint init() override\n> +\t{\n> +\t\tif (status_ != TestPass)\n> +\t\t\treturn status_;\n> +\n> +\t\t/* Check if platform support multistream output */\n\ns/support/supports/\n\ns/output/capture/\n\nI'll do these changes when applying.\n\n\nLooks good!\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> +\t\tlibcamera::CameraManager cm;\n> +\t\tcm.start();\n> +\t\tbool cameraFound = false;\n> +\t\tfor (auto &camera : cm.cameras()) {\n> +\t\t\tif (camera->streams().size() > 1) {\n> +\t\t\t\tcameraName_ = camera->id();\n> +\t\t\t\tcameraFound = true;\n> +\t\t\t\tcm.stop();\n> +\t\t\t\tbreak;\n> +\t\t\t}\n> +\t\t}\n> +\n> +\t\tif (!cameraFound) {\n> +\t\t\tcm.stop();\n> +\t\t\treturn TestSkip;\n> +\t\t}\n> +\n> +\t\tconst gchar *streamDescription = \"queue ! fakesink\";\n> +\t\tg_autoptr(GError) error = NULL;\n> +\n> +\t\tstream0_ = gst_parse_bin_from_description_full(streamDescription, TRUE,\n> +\t\t\t\t\t\t\t       NULL,\n> +\t\t\t\t\t\t\t       GST_PARSE_FLAG_FATAL_ERRORS,\n> +\t\t\t\t\t\t\t       &error);\n> +\t\tif (!stream0_) {\n> +\t\t\tg_printerr(\"Stream0 could not be created (%s)\\n\", error->message);\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\t\tg_object_ref_sink(stream0_);\n> +\n> +\t\tstream1_ = gst_parse_bin_from_description_full(streamDescription, TRUE,\n> +\t\t\t\t\t\t\t       NULL,\n> +\t\t\t\t\t\t\t       GST_PARSE_FLAG_FATAL_ERRORS,\n> +\t\t\t\t\t\t\t       &error);\n> +\t\tif (!stream1_) {\n> +\t\t\tg_printerr(\"Stream1 could not be created (%s)\\n\", error->message);\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\t\tg_object_ref_sink(stream1_);\n> +\n> +\t\tif (createPipeline() != TestPass)\n> +\t\t\treturn TestFail;\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +\tint run() override\n> +\t{\n> +\t\tg_object_set(libcameraSrc_, \"camera-name\", cameraName_.c_str(), NULL);\n> +\n> +\t\t/* Build the pipeline */\n> +\t\tgst_bin_add_many(GST_BIN(pipeline_), libcameraSrc_,\n> +\t\t\t\t stream0_, stream1_, NULL);\n> +\n> +\t\tg_autoptr(GstPad) src_pad = gst_element_get_static_pad(libcameraSrc_, \"src\");\n> +\t\tg_autoptr(GstPad) request_pad = gst_element_get_request_pad(libcameraSrc_, \"src_%u\");\n> +\n> +\t\t{\n> +\t\t\tg_autoptr(GstPad) queue0_sink_pad = gst_element_get_static_pad(stream0_, \"sink\");\n> +\t\t\tg_autoptr(GstPad) queue1_sink_pad = gst_element_get_static_pad(stream1_, \"sink\");\n> +\n> +\t\t\tif (gst_pad_link(src_pad, queue0_sink_pad) != GST_PAD_LINK_OK ||\n> +\t\t\t    gst_pad_link(request_pad, queue1_sink_pad) != GST_PAD_LINK_OK) {\n> +\t\t\t\tg_printerr(\"Pads could not be linked.\\n\");\n> +\t\t\t\treturn TestFail;\n> +\t\t\t}\n> +\t\t}\n> +\n> +\t\tif (startPipeline() != TestPass)\n> +\t\t\treturn TestFail;\n> +\n> +\t\tif (processEvent() != TestPass)\n> +\t\t\treturn TestFail;\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +\tvoid cleanup() override\n> +\t{\n> +\t\tg_clear_object(&stream0_);\n> +\t\tg_clear_object(&stream1_);\n> +\t}\n> +\n> +private:\n> +\tstd::string cameraName_;\n> +\tGstElement *stream0_;\n> +\tGstElement *stream1_;\n> +};\n> +\n> +TEST_REGISTER(GstreamerMultiStreamTest)\n> diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> index aca53b920365..10058fc5206f 100644\n> --- a/test/gstreamer/meson.build\n> +++ b/test/gstreamer/meson.build\n> @@ -6,6 +6,7 @@ endif\n>  \n>  gstreamer_tests = [\n>      ['single_stream_test',   'gstreamer_single_stream_test.cpp'],\n> +    ['multi_stream_test',    'gstreamer_multi_stream_test.cpp'],\n>  ]\n>  gstreamer_dep = dependency('gstreamer-1.0', required: true)\n>  \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 8EB32BF01C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Sep 2021 08:51:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D35686918C;\n\tFri, 24 Sep 2021 10:51:05 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3BFE069186\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 10:51:04 +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 5ABFF45E;\n\tFri, 24 Sep 2021 10:51:02 +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=\"I8mwOv/s\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632473463;\n\tbh=uduWm0vXWSnmSMyN/zwcn7ogkZyic++gVRS6HYP1a6A=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=I8mwOv/sOT8uwGM5QD71HN/75c1a0GD4DfFsnRVri6nUmuGdL0OTYgHZvhMHrzX1G\n\tKc4wuOfTCCFbi+mbZULBhgJU6IJ1EbhJp/LdVRWZGuN7tIKVyWDivg64DcIm9V0RF3\n\tmtD3ycD5ct4WRtoNMeu5oho9pIMG4QzdiWaOxCOU=","Date":"Fri, 24 Sep 2021 17:50:56 +0900","From":"paul.elder@ideasonboard.com","To":"Vedant Paranjape <vedantparanjape160201@gmail.com>","Message-ID":"<20210924085056.GX4382@pyrite.rasen.tech>","References":"<20210924083821.1877829-1-vedantparanjape160201@gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20210924083821.1877829-1-vedantparanjape160201@gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v4] test: gstreamer: Add a test for\n\tgstreamer multi 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,\n\tNicolas Dufresne <nicolas.dufresne@collabora.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19836,"web_url":"https://patchwork.libcamera.org/comment/19836/","msgid":"<CACGrz-N0XQQxdS=3FFH1PhMtAQczktmrgEBL3BhzQFmap63p7g@mail.gmail.com>","date":"2021-09-24T08:54:49","subject":"Re: [libcamera-devel] [PATCH v4] test: gstreamer: Add a test for\n\tgstreamer multi stream","submitter":{"id":85,"url":"https://patchwork.libcamera.org/api/people/85/","name":"Vedant Paranjape","email":"vedantparanjape160201@gmail.com"},"content":"On Fri, Sep 24, 2021 at 2:21 PM <paul.elder@ideasonboard.com> wrote:\n>\n> Hi Vedant,\n>\n> On Fri, Sep 24, 2021 at 02:08:21PM +0530, Vedant Paranjape wrote:\n> > This patch adds a test to test if multi stream using libcamera's\n> > gstreamer element works.\n> >\n> > Test will run only on devices that support multistream capture, eg.,\n> > devices that use IPU3 and raspberrypi pipeline. This was tested on\n> > a Raspberry Pi 4B+.\n> >\n> > Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>\n> > Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > ---\n> >  .../gstreamer/gstreamer_multi_stream_test.cpp | 124 ++++++++++++++++++\n> >  test/gstreamer/meson.build                    |   1 +\n> >  2 files changed, 125 insertions(+)\n> >  create mode 100644 test/gstreamer/gstreamer_multi_stream_test.cpp\n> >\n> > diff --git a/test/gstreamer/gstreamer_multi_stream_test.cpp b/test/gstreamer/gstreamer_multi_stream_test.cpp\n> > new file mode 100644\n> > index 000000000000..6a9a6f2509cb\n> > --- /dev/null\n> > +++ b/test/gstreamer/gstreamer_multi_stream_test.cpp\n> > @@ -0,0 +1,124 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2021, Vedant Paranjape\n> > + *\n> > + * gstreamer_multi_stream_test.cpp - GStreamer multi stream capture test\n> > + */\n> > +\n> > +#include <iostream>\n> > +#include <unistd.h>\n> > +\n> > +#include <libcamera/libcamera.h>\n> > +\n> > +#include <gst/gst.h>\n> > +\n> > +#include \"gstreamer_test.h\"\n> > +#include \"test.h\"\n>\n> Could you please later send a patch to remove the unnecessary includes\n> from the single stream test?\n>\nYes, I will send a patch.\n> > +\n> > +using namespace std;\n> > +\n> > +class GstreamerMultiStreamTest : public GstreamerTest, public Test\n> > +{\n> > +public:\n> > +     GstreamerMultiStreamTest()\n> > +             : GstreamerTest()\n> > +     {\n> > +     }\n> > +\n> > +protected:\n> > +     int init() override\n> > +     {\n> > +             if (status_ != TestPass)\n> > +                     return status_;\n> > +\n> > +             /* Check if platform support multistream output */\n>\n> s/support/supports/\n>\n> s/output/capture/\n>\n> I'll do these changes when applying.\n>\n>\n> Looks good!\n>\n> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n>\n> > +             libcamera::CameraManager cm;\n> > +             cm.start();\n> > +             bool cameraFound = false;\n> > +             for (auto &camera : cm.cameras()) {\n> > +                     if (camera->streams().size() > 1) {\n> > +                             cameraName_ = camera->id();\n> > +                             cameraFound = true;\n> > +                             cm.stop();\n> > +                             break;\n> > +                     }\n> > +             }\n> > +\n> > +             if (!cameraFound) {\n> > +                     cm.stop();\n> > +                     return TestSkip;\n> > +             }\n> > +\n> > +             const gchar *streamDescription = \"queue ! fakesink\";\n> > +             g_autoptr(GError) error = NULL;\n> > +\n> > +             stream0_ = gst_parse_bin_from_description_full(streamDescription, TRUE,\n> > +                                                            NULL,\n> > +                                                            GST_PARSE_FLAG_FATAL_ERRORS,\n> > +                                                            &error);\n> > +             if (!stream0_) {\n> > +                     g_printerr(\"Stream0 could not be created (%s)\\n\", error->message);\n> > +                     return TestFail;\n> > +             }\n> > +             g_object_ref_sink(stream0_);\n> > +\n> > +             stream1_ = gst_parse_bin_from_description_full(streamDescription, TRUE,\n> > +                                                            NULL,\n> > +                                                            GST_PARSE_FLAG_FATAL_ERRORS,\n> > +                                                            &error);\n> > +             if (!stream1_) {\n> > +                     g_printerr(\"Stream1 could not be created (%s)\\n\", error->message);\n> > +                     return TestFail;\n> > +             }\n> > +             g_object_ref_sink(stream1_);\n> > +\n> > +             if (createPipeline() != TestPass)\n> > +                     return TestFail;\n> > +\n> > +             return TestPass;\n> > +     }\n> > +\n> > +     int run() override\n> > +     {\n> > +             g_object_set(libcameraSrc_, \"camera-name\", cameraName_.c_str(), NULL);\n> > +\n> > +             /* Build the pipeline */\n> > +             gst_bin_add_many(GST_BIN(pipeline_), libcameraSrc_,\n> > +                              stream0_, stream1_, NULL);\n> > +\n> > +             g_autoptr(GstPad) src_pad = gst_element_get_static_pad(libcameraSrc_, \"src\");\n> > +             g_autoptr(GstPad) request_pad = gst_element_get_request_pad(libcameraSrc_, \"src_%u\");\n> > +\n> > +             {\n> > +                     g_autoptr(GstPad) queue0_sink_pad = gst_element_get_static_pad(stream0_, \"sink\");\n> > +                     g_autoptr(GstPad) queue1_sink_pad = gst_element_get_static_pad(stream1_, \"sink\");\n> > +\n> > +                     if (gst_pad_link(src_pad, queue0_sink_pad) != GST_PAD_LINK_OK ||\n> > +                         gst_pad_link(request_pad, queue1_sink_pad) != GST_PAD_LINK_OK) {\n> > +                             g_printerr(\"Pads could not be linked.\\n\");\n> > +                             return TestFail;\n> > +                     }\n> > +             }\n> > +\n> > +             if (startPipeline() != TestPass)\n> > +                     return TestFail;\n> > +\n> > +             if (processEvent() != TestPass)\n> > +                     return TestFail;\n> > +\n> > +             return TestPass;\n> > +     }\n> > +\n> > +     void cleanup() override\n> > +     {\n> > +             g_clear_object(&stream0_);\n> > +             g_clear_object(&stream1_);\n> > +     }\n> > +\n> > +private:\n> > +     std::string cameraName_;\n> > +     GstElement *stream0_;\n> > +     GstElement *stream1_;\n> > +};\n> > +\n> > +TEST_REGISTER(GstreamerMultiStreamTest)\n> > diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> > index aca53b920365..10058fc5206f 100644\n> > --- a/test/gstreamer/meson.build\n> > +++ b/test/gstreamer/meson.build\n> > @@ -6,6 +6,7 @@ endif\n> >\n> >  gstreamer_tests = [\n> >      ['single_stream_test',   'gstreamer_single_stream_test.cpp'],\n> > +    ['multi_stream_test',    'gstreamer_multi_stream_test.cpp'],\n> >  ]\n> >  gstreamer_dep = dependency('gstreamer-1.0', required: true)\n> >\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 77BE1BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Sep 2021 08:55:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CDD236918C;\n\tFri, 24 Sep 2021 10:55:03 +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 3DDA769186\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 10:55:02 +0200 (CEST)","by mail-yb1-xb35.google.com with SMTP id r1so4241291ybo.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Sep 2021 01:55:02 -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=\"liXKzEjG\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=5duMVlH+ccNb6tkPRsXRXbPj2OWfUM5Zingd/PUOkDc=;\n\tb=liXKzEjGtPZV3v9P9zC0X2PYgvEWo8G21kZH8M0gFsOQBu6yNlbLk+XznF2Csz2shX\n\tER0ROukDuH2OahwgUoXZSYeNcWvMd0b1eF1roWLoBB8rCJU1D5VgjuGIMUwvI/bdArFe\n\t8ayKSUH6AUsEiwtzBYZ3zbW+06z0X19mVMBBwJpNmSryweBje0w6D5Vlp3UUHlagujYT\n\tHbxtKHWHV3lghu2NsmyPpu1Dmc5jX2ToJijSNsBd+ZxJ+ceXKWh99UB5EW8vapLC5DFF\n\tZZadLrmj8Q1TZGqBAPyejkUOQPAPcbmWs62yff6k2MQQ8KNW3LPZcLayY2DwZY7NKcpY\n\tzZnQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=5duMVlH+ccNb6tkPRsXRXbPj2OWfUM5Zingd/PUOkDc=;\n\tb=RGDG9VjaiDqrwVz7iLW+rtAXB/ed5oza17Rh6RcMuh4PIqlDp/NfsK5hEOL5I6PSF/\n\tS2HiClayYj6TvruHKSx+xmvYCGrGm60Xcfv5KpGD+4I1r0xSQKcPUEMFHlSjZKBLH0i9\n\tgBqNiWiSl3I6kMc2eofCJeLw22An9Dl1ftmj7mXnFOCg5IONS3FY9Y6ktfCXj6eObgEc\n\t4bF1u677yn6PrVVQuQiiySLp7jHdnyA72gQBC0G0dfk6FkT07gH6Csv5UOpXgL66nwj4\n\tVmHnGx6JQIvg+G5NmZ6/OAj2068oZ8olRvQxSgEgHMzJNUAmUV4S9ruGPcNnexvQGhp2\n\t8yBg==","X-Gm-Message-State":"AOAM530398hyNMqPnCmZerHkl+eYd1YAF9Uor/adG7us/kwJACr5OJn6\n\t63x3+sNpJpK+CYL6rc5DfWqeyAuBrhBDTX/wyh65D+P8WcmyCw==","X-Google-Smtp-Source":"ABdhPJw+TSihsLH5PS8P3LFpCndqQh+wIjvcwG8a/cWdcHUsP8gZ29lHWtXnFzpfOpXsXehEa3sch3M60Kxlubsw+so=","X-Received":"by 2002:a25:5885:: with SMTP id\n\tm127mr10827247ybb.415.1632473701071; \n\tFri, 24 Sep 2021 01:55:01 -0700 (PDT)","MIME-Version":"1.0","References":"<20210924083821.1877829-1-vedantparanjape160201@gmail.com>\n\t<20210924085056.GX4382@pyrite.rasen.tech>","In-Reply-To":"<20210924085056.GX4382@pyrite.rasen.tech>","From":"Vedant Paranjape <vedantparanjape160201@gmail.com>","Date":"Fri, 24 Sep 2021 14:24:49 +0530","Message-ID":"<CACGrz-N0XQQxdS=3FFH1PhMtAQczktmrgEBL3BhzQFmap63p7g@mail.gmail.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v4] test: gstreamer: Add a test for\n\tgstreamer multi 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 <libcamera-devel@lists.libcamera.org>,\n\tNicolas Dufresne <nicolas.dufresne@collabora.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]