[{"id":28771,"web_url":"https://patchwork.libcamera.org/comment/28771/","msgid":"<4f1fa85fa4e63c78fab2bfd8cf1905da010329f2.camel@collabora.com>","date":"2024-02-27T17:59:21","subject":"Re: [PATCH v1 3/3] test: gstreamer: Test memory lifetime","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le mardi 27 février 2024 à 12:53 -0500, Nicolas Dufresne a écrit :\n> From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> \n> Test that everything works fine if a buffer outlives the pipeline.\n> \n> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> ---\n>  .../gstreamer_memory_lifetime_test.cpp        | 75 +++++++++++++++++++\n>  test/gstreamer/meson.build                    |  4 +-\n>  2 files changed, 78 insertions(+), 1 deletion(-)\n>  create mode 100644 test/gstreamer/gstreamer_memory_lifetime_test.cpp\n> \n> diff --git a/test/gstreamer/gstreamer_memory_lifetime_test.cpp b/test/gstreamer/gstreamer_memory_lifetime_test.cpp\n> new file mode 100644\n> index 00000000..8842a826\n> --- /dev/null\n> +++ b/test/gstreamer/gstreamer_memory_lifetime_test.cpp\n> @@ -0,0 +1,75 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2021, Vedant Paranjape\n\n* Copyright (C) 2024, Nicolas Dufresne\n\n> + *\n> + * gstreamer_single_stream_test.cpp - GStreamer single stream capture test\n\n* gstreamer_memory_lifetime_test.cpp - GStreamer memory lifetime test\n\nSorry about these.\n\nNicolas\n\n> + */\n> +\n> +#include <iostream>\n> +#include <unistd.h>\n> +\n> +#include <gst/app/app.h>\n> +#include <gst/gst.h>\n> +\n> +#include \"gstreamer_test.h\"\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +\n> +class GstreamerMemoryLifetimeTest : public GstreamerTest, public Test\n> +{\n> +public:\n> +\tGstreamerMemoryLifetimeTest()\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\tappsink_ = gst_element_factory_make(\"appsink\", nullptr);\n> +\t\tif (!appsink_) {\n> +\t\t\tg_printerr(\"Your installation is missing 'appsink'\\n\");\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\t\tg_object_ref_sink(appsink_);\n> +\n> +\t\treturn createPipeline();\n> +\t}\n> +\n> +\tint run() override\n> +\t{\n> +\t\t/* Build the pipeline */\n> +\t\tgst_bin_add_many(GST_BIN(pipeline_), libcameraSrc_, appsink_, nullptr);\n> +\t\tif (gst_element_link(libcameraSrc_, appsink_) != TRUE) {\n> +\t\t\tg_printerr(\"Elements could not be linked.\\n\");\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\tif (startPipeline() != TestPass)\n> +\t\t\treturn TestFail;\n> +\n> +\t\tsample_ = gst_app_sink_try_pull_sample(GST_APP_SINK(appsink_), GST_SECOND * 5);\n> +\t\tgst_element_set_state(pipeline_, GST_STATE_NULL);\n> +\n> +\t\tif (!sample_)\n> +\t\t\treturn TestFail;\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +\tvoid cleanup() override\n> +\t{\n> +\t\tg_clear_pointer(&sample_, gst_sample_unref);\n> +\t\tg_clear_object(&appsink_);\n> +\t}\n> +\n> +private:\n> +\tGstElement *appsink_;\n> +\tGstSample *sample_;\n> +};\n> +\n> +TEST_REGISTER(GstreamerMemoryLifetimeTest)\n> diff --git a/test/gstreamer/meson.build b/test/gstreamer/meson.build\n> index f3ba5a23..70609b88 100644\n> --- a/test/gstreamer/meson.build\n> +++ b/test/gstreamer/meson.build\n> @@ -8,12 +8,14 @@ gstreamer_tests = [\n>      {'name': 'single_stream_test', 'sources': ['gstreamer_single_stream_test.cpp']},\n>      {'name': 'multi_stream_test', 'sources': ['gstreamer_multi_stream_test.cpp']},\n>      {'name': 'device_provider_test', 'sources': ['gstreamer_device_provider_test.cpp']},\n> +    {'name': 'memory_lifetime_test', 'sources': ['gstreamer_memory_lifetime_test.cpp']},\n>  ]\n>  gstreamer_dep = dependency('gstreamer-1.0', required : true)\n> +gstapp_dep = dependency('gstreamer-app-1.0', required : true)\n>  \n>  foreach test : gstreamer_tests\n>      exe = executable(test['name'], test['sources'], 'gstreamer_test.cpp',\n> -                     dependencies : [libcamera_private, gstreamer_dep],\n> +                     dependencies : [libcamera_private, gstreamer_dep, gstapp_dep],\n>                       link_with : test_libraries,\n>                       include_directories : test_includes_internal)\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 E81EDBD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Feb 2024 17:59:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 561166285F;\n\tTue, 27 Feb 2024 18:59:27 +0100 (CET)","from madrid.collaboradmins.com (madrid.collaboradmins.com\n\t[46.235.227.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 60AD662806\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Feb 2024 18:59:25 +0100 (CET)","from nicolas-tpx395.localdomain (cola.collaboradmins.com\n\t[195.201.22.229])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256)\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby madrid.collaboradmins.com (Postfix) with ESMTPSA id A3DEA3780F7F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Feb 2024 17:59:24 +0000 (UTC)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=collabora.com header.i=@collabora.com\n\theader.b=\"OnECS6Z8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1709056765;\n\tbh=mVB4MdnI0diKoC1rvcfN3sEMpa1Aug7Jsx8aphd7Mi0=;\n\th=Subject:From:To:Date:In-Reply-To:References:From;\n\tb=OnECS6Z8I63EpnVGijC6jW89iAOwKUO6dlVQiq9E7vdaZY2aSqxLTEpbsutBdo/5f\n\tOEyd7Fzvd8MLTuVQ7Bn4HHuMC+kZXIKdbmM92egEUuhlBUEIo/rV57iKrzGB264WU6\n\teTenk3wD7mX75F0C64sWdYcW09s3GpJQTtqFiaF49VClNUD0mF5zA2PRNmEbhbj1bS\n\tvCorhDK2IlQ47kouLnAiSEnV0WRp/ryen0JyFiWxCDYPOdhfuKfIZd6pXibaOk98UJ\n\t+OH1hCtaEIUXFwOJUIMxbVicJcE4Zl6h1qFU480tozp+Um9ECCT6u3LWdZ/Pw0QKwC\n\tR738Gd8yV961A==","Message-ID":"<4f1fa85fa4e63c78fab2bfd8cf1905da010329f2.camel@collabora.com>","Subject":"Re: [PATCH v1 3/3] test: gstreamer: Test memory lifetime","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Tue, 27 Feb 2024 12:59:21 -0500","In-Reply-To":"<20240227175336.560009-4-nicolas@ndufresne.ca>","References":"<20240227175336.560009-1-nicolas@ndufresne.ca>\n\t<20240227175336.560009-4-nicolas@ndufresne.ca>","Autocrypt":"addr=nicolas.dufresne@collabora.com; prefer-encrypt=mutual;\n\tkeydata=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","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","User-Agent":"Evolution 3.50.4 (3.50.4-1.fc39) ","MIME-Version":"1.0","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>"}}]