From patchwork Thu Sep 14 23:45:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43740 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4b2f:b0:149:dfde:5c0a with SMTP id fp47csp757629pzb; Thu, 14 Sep 2023 16:45:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHhrUWY9AYhew8/rXLewwxDuhfFfvLtK+i0kPr+5LWrtOVSwqbPhshLZYwlEWyTCbm+ZVMz X-Received: by 2002:a17:906:20ce:b0:99d:dd43:d427 with SMTP id c14-20020a17090620ce00b0099ddd43d427mr26724ejc.10.1694735109475; Thu, 14 Sep 2023 16:45:09 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y6-20020a170906558600b009930371a03csi2566136ejp.1001.2023.09.14.16.45.09; Thu, 14 Sep 2023 16:45:09 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=ealT5ARY; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5908B68C870; Fri, 15 Sep 2023 02:44:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2014.outbound.protection.outlook.com [40.92.73.14]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E45A868C856 for ; Fri, 15 Sep 2023 02:44:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NI7rf+M9H03ryRSD8yWWWlXioqiYno2JKTZG7Sq9xIutX46qYpraKe2+KIhRpMfyOrFPrRdKbT537/D/lHcD2S7vfekzO9ZKKlhyJUrzgGM8lcB6cexkA0t0hg+IwdCG7dbG0XH23jRUs+niSdsFTZTq7xMfTjwjnbVs5HQ1yEyIdjwl+762v9yx/YUmu+DqCzYyv00c1Kwrijjm61PgijJwRpShE0S37DEzMuvngScyp+1wz5uA/APXbKSuikPZgYWitJ4awVV6u8yvzgJxGGeM5jjdlqWcsIkOtWiZREHdt7g4MTVS0sOy6xn0pKD1wZ3fiksKHUrn4SavDbo2rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1QcHIbmyKnKzc831nNYj2D8F5pxkzu+/FaThN1X1M2M=; b=PgnOED/4WcolByWtzsZ7HpJv0gYVzMi0ug3s/Ab/zpDlrYq0PnsE/kRdX9HiIk1IZcSp4jlGaYrJSsWuFx5fCQ3X12MRvbRkJiIFmpcz1s/94nFYT6Xfyio/FG7tbt3XC25Lhmh/qzTLWgd8BB93yRg1eaHLij2E5YfQitdDPGSntSx9/STgBpBn3VWShAhxKNRdTRgmsMKSo0q4P7o/xo9nA7LyGbihu9OsHmDZPsAI+f5nbXyhvC8HYgkBo7mdrJCjhwIficzcVd3FTVWXzcdpb4SjnvwB9Ig0LKb/M+a7GnT7qKu7H3I9ahCwt1L49pro0ryOxCjq/mOd+wiQWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1QcHIbmyKnKzc831nNYj2D8F5pxkzu+/FaThN1X1M2M=; b=ealT5ARYmEsty7Qr4ktlCq4I9wldJGacTqKZioFeh0YwKgBvO52IBAUubroAtuk7cLO8ss0ZF6Nq0Pq9P5i0rdIum1m0eDwfPY4Y2d6ZnuBKbwGHHux1Wz1QyH6eVuURjuUnzDxBjgjTNeLZXERTY6q/p8r6uafKP5MXE8LbXuRZF5D+whOCbzKhJTSbyTLTtB+0JK4Qi6tA2G7Q/O6swzRaV6zJ2Ctux8NFGNDDZbY29hkj1qERgDmlmnvkJRkC62Be7ytWTZ+M+U6oJ8iAYR32TMI9xV5ZVzYdvFiBMUAMELLucW/QDoTkk3hhcOtNEgDzoMUCze7ngbcO91lFpg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PR3P250MB0022.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:14d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.20; Thu, 14 Sep 2023 23:44:40 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::3fff:eb7b:b8e2:4dba]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::3fff:eb7b:b8e2:4dba%4]) with mapi id 15.20.6768.036; Thu, 14 Sep 2023 23:44:40 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Sep 2023 01:45:44 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [NiqO5fcN+f2161p2Al/wetQXeNPj4oNv] X-ClientProxiedBy: FR3P281CA0085.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::22) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20230914234544.156991-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0022:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a78f159-32a8-4f2a-7202-08dbb57c8fdb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dPy5xdj52VQTA1Aml8srgokBpP3kDghafGkqnE96lgDJ6ep2EaHkuebZ4Ioa3PIwCI4Q82fGPKn/CswtPFAHDUhxwrgvcr0Waia/2cXkOuj3XW6SATtZQ1vMANW/5BofuvTjEQjR6nx1rcxxeyaFtoyO2gvlALB1bvcD7OPoJyDAjebuNAC9yfmZ152XXbUeWLFCuEqol8TExlNcuBx59dg7BXh6iPNKKudnHwx1tHADxZWDXSV2YpyDp4j0rEnDP9xkOnzYWeN8bbm84pYBLdT+bj3rI7GEYNMHYofmcSU5Irt0BkYh/7yCdrVr8g/HvC9M995PpW8YlATLLTBajZW3HyF9Tt+ofpiG82E3oyrWKclPQYIkTCZTre8Mx9ge2dBMCCKOlB44brPtWIDCfR8/OKhN76sSnCQPznLry0OZW8VI2N2NyqDnu37S2KjdXU0miAoKw6d0zXcES+l6eogZVWTKNLUId6WFh+5gWpvoszY+MEAFpUNQQfsUTnnn1mml4s/EmDl68M7o9NdjDAOq7uSU/QZkK1eC2vhdIUNai713SaDLLFEo70mqn2+j424mTCTO926pFTFtRM1HS8H2q1dr+hH1OC9sIX9hEAnEO1g2aiqjt28sFGMUuck2 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +dzRhui3S0COdCtElDB/ywN92YlmFQtE6pHYhqP5t7Sd4qwayuc6s5rGZ+c2fhrTzGOG+iQP995NJqJej3LvUpRyuOjUfWLlKeXtB3kYrEcbXokW3Dv0sT5dASXspJOJaI6LQhvVm+b8nWLc2zrfWaXkpEqzZAR1EjuRK/BhdOaqde5G3sMyUYfEEDfN3NmL4wr5YLKSWICe/P+0gn7wZO7BVMpCTi6Z77VHn74Ml6ZNId7uQP9j8QEEJla7dGJF7aC8lhZMIRCwGVzXbIV73rv5WA9w5jflX5a9wZ0OapwLVZvXx0vdUTc8udSbYTmgyBJQ5DI/YOVPe7rdc1zdBADMD5DSnHWMeTQEGGHcmv55DCPa3vM3rtjEeds+n/ChNdYG3/vrvDJQjgadOxy1wCMMNQ2BL9fpWWu/WVcZt9lJQGwHDMD82j4oC7DFN9wp5CIXKKbj6szgYjzxzMh2cnFlby9bAmbvj6cGul3SC/0cyTlVzIqW2DiaJYkqU2S4cVQLyI4Bv/gZegphj1nAEpi7BOvcqnVesWBCUnQo/qlTKZWQ3h8pqYtp7a45BBeFuMapQ4aLurLMJannSKDFU9fQ9194ITRkHmkS4XSAuEPg0lT4Ye3B9eGS0ofNbePcZ5hhBBCBNyZ8rv2+O/FxhIUVOpA4zMumrpp0dRQD5OoFe4QWLxGKEswQlpVYemSKRQYdVtX4kVT+2DXimgHOO0pJkWWbsSshsG2APbxSbtl7jn1C09biQZakb6rtWpfmHwHj2HtMVIPelUM47jLQ01u63C1vOMVlqckKoJn1wT7w28tDqBGN75H6J3iKo6hLSSOlGquG4/Eswo9gPj/RpogwCV/gJ4HaGWRfqudyO3dP8DYE9f3DBaUK0F/fR2KbEj96P/mPBqAqgqBaEkhpwmJjPspk9JzHaZztIqNR8KPWnLm+moHXk6ISJyNMJi45TMhbdzmylZ5WMXvEs3cJUVDUUY8ZVJCm8pWMDI2OSdLWwR1YQTdJ1ocBh2AORAV6N3w7SmZ5L2EBh/HVzNuDDulMB2heLNACcTeANc3VvlmViD+eKCUrOzLBIfIxHnUbegFiQsZrtaqR7NtO3zuxDhTsWtwAVfCT3yXRlAyk8PMNoJhDA2JIb/886+GfOPlHSP7LYplwMCbsiSOX+S6ikAKN3vUy0X98Hyhh0kpwhlyJD+L1SfyJOUaLdUJmATlcL+lMfSwcwwDjPaQypFTuLHf54sD4NS4QcTCjgH56iVsbUAvlTbm5BFVqwvRYGjbn X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a78f159-32a8-4f2a-7202-08dbb57c8fdb X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2023 23:44:39.9742 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0022 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/vulkan_decode: Factor creating session params out, fix leak X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wQ1s7M1NyN2T All Vulkan HWAccels share the same boilerplate code for creating session params and this includes a common bug: In case actually creating the video session parameters fails, the buffer destined to hold them leaks; in case of HEVC this is also true if get_data_set_buf() fails. This commit factors this code out and fixes the leak. Signed-off-by: Andreas Rheinhardt --- libavcodec/vulkan_av1.c | 28 ++++------------------------ libavcodec/vulkan_decode.c | 31 ++++++++++++++++++++++++++++++- libavcodec/vulkan_decode.h | 5 +++-- libavcodec/vulkan_h264.c | 28 ++++------------------------ libavcodec/vulkan_hevc.c | 27 +++------------------------ 5 files changed, 44 insertions(+), 75 deletions(-) diff --git a/libavcodec/vulkan_av1.c b/libavcodec/vulkan_av1.c index adaebb2818..b1373722ef 100644 --- a/libavcodec/vulkan_av1.c +++ b/libavcodec/vulkan_av1.c @@ -104,12 +104,9 @@ static int vk_av1_fill_pict(AVCodecContext *avctx, const AV1Frame **ref_src, static int vk_av1_create_params(AVCodecContext *avctx, AVBufferRef **buf) { - VkResult ret; - const AV1DecContext *s = avctx->priv_data; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; - FFVulkanFunctions *vk = &ctx->s.vkfn; const AV1RawSequenceHeader *seq = s->raw_seq; @@ -118,10 +115,7 @@ static int vk_av1_create_params(AVCodecContext *avctx, AVBufferRef **buf) VkVideoDecodeAV1SessionParametersCreateInfoMESA av1_params; VkVideoSessionParametersCreateInfoKHR session_params_create; - AVBufferRef *tmp; - VkVideoSessionParametersKHR *par = av_malloc(sizeof(*par)); - if (!par) - return AVERROR(ENOMEM); + int err; av1_sequence_header = (StdVideoAV1MESASequenceHeader) { .flags = (StdVideoAV1MESASequenceHeaderFlags) { @@ -189,26 +183,12 @@ static int vk_av1_create_params(AVCodecContext *avctx, AVBufferRef **buf) .videoSessionParametersTemplate = NULL, }; - /* Create session parameters */ - ret = vk->CreateVideoSessionParametersKHR(ctx->s.hwctx->act_dev, &session_params_create, - ctx->s.hwctx->alloc, par); - if (ret != VK_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Unable to create Vulkan video session parameters: %s!\n", - ff_vk_ret2str(ret)); - return AVERROR_EXTERNAL; - } - - tmp = av_buffer_create((uint8_t *)par, sizeof(*par), ff_vk_decode_free_params, - ctx, 0); - if (!tmp) { - ff_vk_decode_free_params(ctx, (uint8_t *)par); - return AVERROR(ENOMEM); - } + err = ff_vk_decode_create_params(buf, avctx, ctx, &session_params_create); + if (err < 0) + return err; av_log(avctx, AV_LOG_DEBUG, "Created frame parameters\n"); - *buf = tmp; - return 0; } diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index 3986330c81..534a76edda 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1057,7 +1057,7 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) return err; } -void ff_vk_decode_free_params(void *opaque, uint8_t *data) +static void vk_decode_free_params(void *opaque, uint8_t *data) { FFVulkanDecodeShared *ctx = opaque; FFVulkanFunctions *vk = &ctx->s.vkfn; @@ -1067,6 +1067,35 @@ void ff_vk_decode_free_params(void *opaque, uint8_t *data) av_free(par); } +int ff_vk_decode_create_params(AVBufferRef **par_ref, void *logctx, FFVulkanDecodeShared *ctx, + const VkVideoSessionParametersCreateInfoKHR *session_params_create) +{ + VkVideoSessionParametersKHR *par = av_malloc(sizeof(*par)); + const FFVulkanFunctions *vk = &ctx->s.vkfn; + VkResult ret; + + if (!par) + return AVERROR(ENOMEM); + + /* Create session parameters */ + ret = vk->CreateVideoSessionParametersKHR(ctx->s.hwctx->act_dev, session_params_create, + ctx->s.hwctx->alloc, par); + if (ret != VK_SUCCESS) { + av_log(logctx, AV_LOG_ERROR, "Unable to create Vulkan video session parameters: %s!\n", + ff_vk_ret2str(ret)); + av_free(par); + return AVERROR_EXTERNAL; + } + *par_ref = av_buffer_create((uint8_t *)par, sizeof(*par), + vk_decode_free_params, ctx, 0); + if (!*par_ref) { + vk_decode_free_params(ctx, (uint8_t *)par); + return AVERROR(ENOMEM); + } + + return 0; +} + int ff_vk_decode_uninit(AVCodecContext *avctx) { FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; diff --git a/libavcodec/vulkan_decode.h b/libavcodec/vulkan_decode.h index c50527e5f8..abf08a98bf 100644 --- a/libavcodec/vulkan_decode.h +++ b/libavcodec/vulkan_decode.h @@ -156,9 +156,10 @@ int ff_vk_get_decode_buffer(FFVulkanDecodeContext *ctx, AVBufferRef **buf, void *create_pNext, size_t size); /** - * Free VkVideoSessionParametersKHR. + * Create VkVideoSessionParametersKHR wrapped in an AVBufferRef. */ -void ff_vk_decode_free_params(void *opaque, uint8_t *data); +int ff_vk_decode_create_params(AVBufferRef **par_ref, void *logctx, FFVulkanDecodeShared *ctx, + const VkVideoSessionParametersCreateInfoKHR *session_params_create); /** * Flush decoder. diff --git a/libavcodec/vulkan_h264.c b/libavcodec/vulkan_h264.c index 9fe0d194f5..32ef32d640 100644 --- a/libavcodec/vulkan_h264.c +++ b/libavcodec/vulkan_h264.c @@ -285,10 +285,9 @@ static void set_pps(const PPS *pps, const SPS *sps, static int vk_h264_create_params(AVCodecContext *avctx, AVBufferRef **buf) { - VkResult ret; + int err; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; - FFVulkanFunctions *vk = &ctx->s.vkfn; const H264Context *h = avctx->priv_data; /* SPS */ @@ -319,11 +318,6 @@ static int vk_h264_create_params(AVCodecContext *avctx, AVBufferRef **buf) .videoSessionParametersTemplate = NULL, }; - AVBufferRef *tmp; - VkVideoSessionParametersKHR *par = av_malloc(sizeof(*par)); - if (!par) - return AVERROR(ENOMEM); - /* SPS list */ for (int i = 0; i < FF_ARRAY_ELEMS(h->ps.sps_list); i++) { if (h->ps.sps_list[i]) { @@ -347,27 +341,13 @@ static int vk_h264_create_params(AVCodecContext *avctx, AVBufferRef **buf) h264_params.maxStdSPSCount = h264_params_info.stdSPSCount; h264_params.maxStdPPSCount = h264_params_info.stdPPSCount; - /* Create session parameters */ - ret = vk->CreateVideoSessionParametersKHR(ctx->s.hwctx->act_dev, &session_params_create, - ctx->s.hwctx->alloc, par); - if (ret != VK_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Unable to create Vulkan video session parameters: %s!\n", - ff_vk_ret2str(ret)); - return AVERROR_EXTERNAL; - } - - tmp = av_buffer_create((uint8_t *)par, sizeof(*par), ff_vk_decode_free_params, - ctx, 0); - if (!tmp) { - ff_vk_decode_free_params(ctx, (uint8_t *)par); - return AVERROR(ENOMEM); - } + err = ff_vk_decode_create_params(buf, avctx, ctx, &session_params_create); + if (err < 0) + return err; av_log(avctx, AV_LOG_DEBUG, "Created frame parameters: %i SPS %i PPS\n", h264_params_info.stdSPSCount, h264_params_info.stdPPSCount); - *buf = tmp; - return 0; } diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c index 672694a19d..ef371bda67 100644 --- a/libavcodec/vulkan_hevc.c +++ b/libavcodec/vulkan_hevc.c @@ -650,11 +650,9 @@ static void set_vps(const HEVCVPS *vps, static int vk_hevc_create_params(AVCodecContext *avctx, AVBufferRef **buf) { int err; - VkResult ret; const HEVCContext *h = avctx->priv_data; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; - FFVulkanFunctions *vk = &ctx->s.vkfn; VkVideoDecodeH265SessionParametersAddInfoKHR h265_params_info = { .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR, @@ -677,11 +675,6 @@ static int vk_hevc_create_params(AVCodecContext *avctx, AVBufferRef **buf) AVBufferRef *data_set; HEVCHeaderSet *hdr; - AVBufferRef *tmp; - VkVideoSessionParametersKHR *par = av_malloc(sizeof(*par)); - if (!par) - return AVERROR(ENOMEM); - for (int i = 0; h->ps.vps_list[i]; i++) nb_vps++; @@ -725,29 +718,15 @@ static int vk_hevc_create_params(AVCodecContext *avctx, AVBufferRef **buf) h265_params.maxStdPPSCount = h265_params_info.stdPPSCount; h265_params.maxStdVPSCount = h265_params_info.stdVPSCount; - /* Create session parameters */ - ret = vk->CreateVideoSessionParametersKHR(ctx->s.hwctx->act_dev, &session_params_create, - ctx->s.hwctx->alloc, par); + err = ff_vk_decode_create_params(buf, avctx, ctx, &session_params_create); av_buffer_unref(&data_set); - if (ret != VK_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Unable to create Vulkan video session parameters: %s!\n", - ff_vk_ret2str(ret)); - return AVERROR_EXTERNAL; - } - - tmp = av_buffer_create((uint8_t *)par, sizeof(*par), ff_vk_decode_free_params, - ctx, 0); - if (!tmp) { - ff_vk_decode_free_params(ctx, (uint8_t *)par); - return AVERROR(ENOMEM); - } + if (err < 0) + return err; av_log(avctx, AV_LOG_DEBUG, "Created frame parameters: %i SPS %i PPS %i VPS\n", h265_params_info.stdSPSCount, h265_params_info.stdPPSCount, h265_params_info.stdVPSCount); - *buf = tmp; - return 0; }