From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id CAC9A469EB for ; Wed, 2 Aug 2023 06:42:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9CD2968C5B3; Wed, 2 Aug 2023 09:42:44 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2024.outbound.protection.outlook.com [40.92.90.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0DBC268C5AA for ; Wed, 2 Aug 2023 09:42:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QrlQTTw8YC3x8MZqNspqOLdLeK2JmwjMnsEZmli/Xm3DboBVix7P4OvtOFLu0rQ2xL0nY/dAcKWDVtFxQfVZlqLWw0HJbWrXHuxaRCBMSLaRob9wnqiLXf3c0haNAXyVSLdlZZ2fgfeuDISzQXCaz4/Cikv2uB5DM+NHI0lS+HCOtTpRx2B6dIKfssNhAfAmtQoIUw6Xne2zL+2gQeAeT00WmNqqiTZopYScvTQiLKTAw27T6nJ1izTnbZbU3HcbXhoYwosmCfredqTPrgjkP1tgFIIqToPhwXsp9l1hkmlJZCWvpUDwFgbhANUHZLbIe+i51D7qicrIEJKThlTnMA== 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=nlHk+bkD5kxlRKnrtQjvbOFU2kMpMw4VZMM6RflFHT4=; b=MnHV0SPNw5ShHTn017pOQwav5uzCSmVXnL6B95Ub3A6m57tA9ngkapXeTeXNhtkjRkLT4VSIV1pkZfBCMeouq7+xDG5J/ZzXNXkF0eLDx7mggOtU/wrQj4EnpbOTOV9wzeTxLngwU5NV9+nO1kk4r3DA9TgWWxr3apopLNmq7cnRqzbhNMFgV31jHQPgptpEqLvOvGsZzmgIjJ9RWq2pLwMjv5c9t5MrRNkS5vQzYuIgmnODqXPP8k77Ur3Z4UDq4pSt7DO/lXj3WgQem0iNj3jyceFfAuHL3dJcUtaFxxyZgpBLgMSJyRQy5mv06zn5uAKSzbJ+pMTMMGny/dbZ5Q== 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=nlHk+bkD5kxlRKnrtQjvbOFU2kMpMw4VZMM6RflFHT4=; b=VzfnSmbf509pkuhXyXeh47AWH1TXdSk4l1AqnOAmkO994bmmsqFaANBPhgw5Dd7T4HDbSEGgyyHPePlcW3L4sB+67F2x7fyz+riBIOL+Ur66pLjRebDcPqu/DQAymqpYUTVqqp9r7J1ctQjFjzP1fav5EMqGIcRLWyxgfv1weFHokE+YaNjy8XAumPT1JubiWcq8jFe8+e1wbCuRyAIYq00tdZ3iQbClf0b66gIBR4Q/HkUQ7Dyku/nBOz7ypJQpePw0QZxJrnjJp8VYAq6OC7Wo7HjGU1tFNZmAC8860MINHE1WTas6aOOlzlHlFTZE0aFZq9Bk2PVU5ovLCAa3Lw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0215.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:326::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6631.45; Wed, 2 Aug 2023 06:42:37 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4d3a:7ca6:cf28:9e8c]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4d3a:7ca6:cf28:9e8c%7]) with mapi id 15.20.6631.045; Wed, 2 Aug 2023 06:42:36 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Aug 2023 08:43:31 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [90vUCzTNlMWfYQGn7c7DBPYrqGtm9CQOzHnqXwbJLr0=] X-ClientProxiedBy: FR0P281CA0148.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:96::9) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20230802064332.39795-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0215:EE_ X-MS-Office365-Filtering-Correlation-Id: 69e5b44c-f706-4e07-2344-08db9323a8ba X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmrpbvZQFz99JeucukBOVYaZTuPIByLwW4X9qpDNbNkdNiQW77DDS8S9WF54nJxZuPhHlDjPappl2MGhcM5lyru30hVlzYdO+704ontpElyiONj4dgJXj7rY2F9HInpuL+Unh4Vt1MME7xhek2rUadbwSN8x3jNpaDgg2kqwC5Ikwk4eg2NsvCb72wsQVfw+DqVQS1Xx6VRE5x1NFFxGarI/PdvGNa5Ey2jLsi6PJZLDmpDw4L/7j9ntcCE+ur+JM0vFlnK1IIOQP8E4kGCWBZKi7ElN13y9thLPn4Z7+DG79nZpJrWQfUMKjgjfbKhmgk9QAsTW2E1nTblZxBwk59RRxGQe3L2YqMFoT8D0pFuzfQMUkZvHIHrEoycg4nBMPj4UuY3pQVgX4Of8ParNAj+xXBYb280PT7dmwZ5rdbjSLI2+yJNCSI/0AvsOXT11k0hCNKa8AnTpxAE//RlZucNoohv9zMPPK167rBXMjHONSWeW8yY+1hvKzxrmlyPjSzswn3YibVGIO+Etqne2kyOmoyx3aSC7DQLkhk10f0low4o162DzUJLHG9HboKZPz6b3lQKOgsHnIBWO6fvueRP9yjPrVmll5eCX1Ufwh9+z+E+wHUej+i1flbS16tAQ4Dp03yBn/OOAPauyh2w1bc0cRJjAwAgAwYB8/Wqag0W0eKR6sb7HYxCYTJB0Yz03pzmf1LQ2BgoWo05nWG7SNQ+68IPdvl8KD5PLyyE24TZ7iTTdwQ5RrONt/fVMXqEs5Bo= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: y4vddgxM/snjHtlHXXeOPKvZ/VGINB2icp/Xg7xbliQeNLiWgglO19t5fmfK7i5k+6DgZok+725JjlfK02Cf9KYdQp1+EIN6PS59WVLb9tGyN01AyFW8ElPgFmzHJL7jDGTm/BShEPjnz1VE+0nAVB7nzqofvJUkRYOFwtc0BCTE85YYw3b4SMYkb5jlueIMCVj+8Qqz7IljIqNZBEWIkRzz0iQzzIEsAXhHzNRhKXGiuzumzEB0LskDIRXjthQ5uiS+TNf9TDBZ1NdFNLgkZPk2XdtMbORhQ49BfsL0jYkl77Yvk38qnCZiWiEm8r2tvjSUV0sVCQ1k3/OLfADE0C3l33Eh9/tfqrWmeQUGxII1elQtpVmSR9Y8SkExUOH37Iyjq0DoG3enn4BUUvv6h26JLhEzHR8vfEhgasJrsIenTjzFLuE7G8l6VnNurD56xFI/TJ9kXbJzCYCYCDM4ILPrwMLe4rbp7KG4c+2AIAksAPUdE9JC6WS9vaTwqf9URc4KThJA2ca1QwT2IO8NTF4hNAkDtm10t0nU8ShyXsR/mZozDoX9fB6bYm5AcP/Cqr3xwto+c0hcjLcBdROazoA6eUwU9sLxRQQbB7ro1sO/28kCWoWyEkT5liK4bWUC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uaqWIJGpQ5gXovEQ6/jQQ6vn+HrkPtBNovGlTcfw4RbZ0hnrqYsRgdwo/yV+?= =?us-ascii?Q?PyVmSv8t03coTt6lGdl014D+PJmvuHeW3KEeTjtAslklydZRS3LeWFTENEg4?= =?us-ascii?Q?fgn+HG7cb3wPTjeaX8jdJwO6JoQcSzFAslmP82LzWnDx+/3c9puTbaXuqR7K?= =?us-ascii?Q?mrUyJlJgSxhVmeOJdOun6tBBWqUq0b0zSLmmKSoGMQJ0WbImg3PONOzaOOly?= =?us-ascii?Q?TvSUTSLPtZkwzdthuSmhEAVW8Q0P0hVvEUGMeqEAqxlxjCyFwgDnBIbwsjPV?= =?us-ascii?Q?HeV8iVavWXeDK4SV6cpRry1hH8qioymW59GFGHVjBxx+64w98z6ljJA0K4PI?= =?us-ascii?Q?xxY3WCnUwDFbVvl8Wf5ZYYnIDxMbxFNIB4MkdaJGMqSWFZfCxNsjKACEeQob?= =?us-ascii?Q?g13Sfa0yyTxp5ng7Z9qdYPx2vldsRli8CT80nKvtsOIWP9ntoxtV3FqW/cVB?= =?us-ascii?Q?jM1B01498Qpun9WZnzBM004JskiTE7QmSG/8mcdKyLy7eSR8R/mOPhc+cUWV?= =?us-ascii?Q?HGh/xGgwrxUJ6Lo/zj3crQxTf23UDwksDMFDIQXOrKqaj+MirvkyoKRf8XSf?= =?us-ascii?Q?om5gU8KwMzgITYZXCS2VgE4EF3hOQldzBpOsrxpHUt0dJubkPUfjFg5BbrtZ?= =?us-ascii?Q?rHk14W6Y0kfaTn3H7B4SLh6fJDWyoXL6I4t+s56jsax8QtZLkFdoozq1UqMB?= =?us-ascii?Q?VPOk3vQIp6UtXC2+U37oAtkHO67sVhe0A6dldGhEggUemtRNPNy8dNrMM7Jz?= =?us-ascii?Q?RLIb92huuXaZzlUlNxN4RmbvJ1u4ibD70Yf5ZiMUxCWplSSAkW7rUULgfv3C?= =?us-ascii?Q?9oc88qo8VnIXJwXPZ1/ECNj7U6+IxrVTbu4M9G7P9/27fC7ANAsnAm+GUzyM?= =?us-ascii?Q?/+qFaRcmbsFhy1ZS4BOuB4Hx1aTtzXHiKHYwR09oF0rP4ru4RjsgQnYJnvR8?= =?us-ascii?Q?tTKiuRXdGXjVjbbruuKZoRtFoa03MYMpUTwbwL7e0HhLsErFtJKZR+ejyzJb?= =?us-ascii?Q?U+vdyrP6umq1LLwyZdrhijXu/Z6UvBf2AAxiraFBU1HzNsk/tvwWKpLUCfn9?= =?us-ascii?Q?oISt/lRG54lw2xJpE1Jy3AmOuIo3oJnf5/KvGhpeDoA1IhfhfK0VF9ivzwIP?= =?us-ascii?Q?zKycgGrsVowWD8A9F/75xFDtPhlzbKXgNG9mqOp+toxC/dxtyqa6GDRKxsE0?= =?us-ascii?Q?+4xyEQ33Fwqo/eZgWPF/LMQHHC6v7tlGKN22EfxSZbHk5CAKQ4RQO3eplCDF?= =?us-ascii?Q?4MK+QJPLnlqAJBsK+pmB?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69e5b44c-f706-4e07-2344-08db9323a8ba X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2023 06:42:36.9198 (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: AM8P250MB0215 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/decode: Extend ff_hwaccel_frame_priv_alloc()'s task 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: All usages of ff_hwaccel_frame_priv_alloc() have the same pattern: Check for whether a hwaccel is in use; check whether it needs private frame-specific data; allocate the AVBuffer and set it. This commit modifies ff_hwaccel_frame_priv_alloc() to perform this task on its own. (It also seems that the H.264 decoder did not perform proper cleanup in case the buffer could not be allocated. This has been changed.) Signed-off-by: Andreas Rheinhardt --- libavcodec/av1dec.c | 16 +++++----------- libavcodec/decode.c | 26 +++++++++++++++++++------- libavcodec/decode.h | 17 ++++++++++------- libavcodec/h264_slice.c | 15 +++++---------- libavcodec/hevc_refs.c | 14 ++++---------- libavcodec/mpegpicture.c | 15 ++++----------- libavcodec/vp8.c | 18 ++++++++---------- libavcodec/vp9.c | 18 +++++++----------- 8 files changed, 62 insertions(+), 77 deletions(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index cc178464b9..09339529f7 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -907,17 +907,11 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f) break; } - if (avctx->hwaccel) { - const AVHWAccel *hwaccel = avctx->hwaccel; - if (hwaccel->frame_priv_data_size) { - f->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(avctx, hwaccel); - if (!f->hwaccel_priv_buf) { - ret = AVERROR(ENOMEM); - goto fail; - } - f->hwaccel_picture_private = f->hwaccel_priv_buf->data; - } - } + ret = ff_hwaccel_frame_priv_alloc(avctx, &f->hwaccel_picture_private, + &f->hwaccel_priv_buf); + if (ret < 0) + goto fail; + return 0; fail: diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 53c90cddb7..be761873a3 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1788,24 +1788,36 @@ int ff_copy_palette(void *dst, const AVPacket *src, void *logctx) return 0; } -AVBufferRef *ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, - const AVHWAccel *hwaccel) +int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private, + AVBufferRef **hwaccel_priv_buf) { + const AVHWAccel *hwaccel = avctx->hwaccel; AVBufferRef *ref; - AVHWFramesContext *frames_ctx = (AVHWFramesContext *)avctx->hw_frames_ctx->data; - uint8_t *data = av_mallocz(hwaccel->frame_priv_data_size); + AVHWFramesContext *frames_ctx; + uint8_t *data; + + if (!hwaccel || !hwaccel->frame_priv_data_size) + return 0; + + av_assert0(!*hwaccel_picture_private); + data = av_mallocz(hwaccel->frame_priv_data_size); if (!data) - return NULL; + return AVERROR(ENOMEM); + + frames_ctx = (AVHWFramesContext *)avctx->hw_frames_ctx->data; ref = av_buffer_create(data, hwaccel->frame_priv_data_size, hwaccel->free_frame_priv, frames_ctx->device_ctx, 0); if (!ref) { av_free(data); - return NULL; + return AVERROR(ENOMEM); } - return ref; + *hwaccel_priv_buf = ref; + *hwaccel_picture_private = ref->data; + + return 0; } void ff_decode_flush_buffers(AVCodecContext *avctx) diff --git a/libavcodec/decode.h b/libavcodec/decode.h index 2b9fe59907..a52152e4a7 100644 --- a/libavcodec/decode.h +++ b/libavcodec/decode.h @@ -140,14 +140,17 @@ int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding); /** - * Allocate a hwaccel frame private data and create an AVBufferRef - * from it. + * Allocate a hwaccel frame private data if the provided avctx + * uses a hwaccel method that needs it. The private data will + * be refcounted via the AVBuffer API (if allocated). * - * @param avctx The codec context which to attach as an opaque value - * @param hwaccel The hwaccel for which to allocate - * @return The allocated buffer + * @param avctx The codec context + * @param hwaccel_picture_private Pointer to return hwaccel_picture_private + * @param hwaccel_priv_buf Pointer to return the AVBufferRef owning + * hwaccel_picture_private + * @return 0 on success, < 0 on error */ -AVBufferRef *ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, - const AVHWAccel *hwaccel); +int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private, + AVBufferRef **hwaccel_priv_buf); #endif /* AVCODEC_DECODE_H */ diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 790ba644cd..27fbd8d953 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -209,16 +209,11 @@ static int alloc_picture(H264Context *h, H264Picture *pic) goto fail; } - if (h->avctx->hwaccel) { - const AVHWAccel *hwaccel = h->avctx->hwaccel; - av_assert0(!pic->hwaccel_picture_private); - if (hwaccel->frame_priv_data_size) { - pic->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(h->avctx, hwaccel); - if (!pic->hwaccel_priv_buf) - return AVERROR(ENOMEM); - pic->hwaccel_picture_private = pic->hwaccel_priv_buf->data; - } - } + ret = ff_hwaccel_frame_priv_alloc(h->avctx, &pic->hwaccel_picture_private, + &pic->hwaccel_priv_buf); + if (ret < 0) + goto fail; + if (CONFIG_GRAY && !h->avctx->hwaccel && h->flags & AV_CODEC_FLAG_GRAY && pic->f->data[2]) { int h_chroma_shift, v_chroma_shift; av_pix_fmt_get_chroma_sub_sample(pic->f->format, diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 3aa8e19950..c5c1203ef8 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -118,16 +118,10 @@ static HEVCFrame *alloc_frame(HEVCContext *s) (s->sei.picture_timing.picture_struct == AV_PICTURE_STRUCTURE_BOTTOM_FIELD)) frame->frame->flags |= AV_FRAME_FLAG_INTERLACED; - if (s->avctx->hwaccel) { - const AVHWAccel *hwaccel = s->avctx->hwaccel; - av_assert0(!frame->hwaccel_picture_private); - if (hwaccel->frame_priv_data_size) { - frame->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(s->avctx, hwaccel); - if (!frame->hwaccel_priv_buf) - goto fail; - frame->hwaccel_picture_private = frame->hwaccel_priv_buf->data; - } - } + ret = ff_hwaccel_frame_priv_alloc(s->avctx, &frame->hwaccel_picture_private, + &frame->hwaccel_priv_buf); + if (ret < 0) + goto fail; return frame; fail: diff --git a/libavcodec/mpegpicture.c b/libavcodec/mpegpicture.c index 71c7a3fd70..b7c804c8ec 100644 --- a/libavcodec/mpegpicture.c +++ b/libavcodec/mpegpicture.c @@ -171,17 +171,10 @@ static int alloc_frame_buffer(AVCodecContext *avctx, Picture *pic, pic->f->height = avctx->height; } - if (avctx->hwaccel) { - assert(!pic->hwaccel_picture_private); - if (avctx->hwaccel->frame_priv_data_size) { - pic->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(avctx, avctx->hwaccel); - if (!pic->hwaccel_priv_buf) { - av_log(avctx, AV_LOG_ERROR, "alloc_frame_buffer() failed (hwaccel private data allocation)\n"); - return -1; - } - pic->hwaccel_picture_private = pic->hwaccel_priv_buf->data; - } - } + ret = ff_hwaccel_frame_priv_alloc(avctx, &pic->hwaccel_picture_private, + &pic->hwaccel_priv_buf); + if (ret < 0) + return ret; if ((linesize && linesize != pic->f->linesize[0]) || (uvlinesize && uvlinesize != pic->f->linesize[1])) { diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 50afe19b7a..15a2961f56 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -104,23 +104,21 @@ static int vp8_alloc_frame(VP8Context *s, VP8Frame *f, int ref) if ((ret = ff_thread_get_ext_buffer(s->avctx, &f->tf, ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) return ret; - if (!(f->seg_map = av_buffer_allocz(s->mb_width * s->mb_height))) + if (!(f->seg_map = av_buffer_allocz(s->mb_width * s->mb_height))) { + ret = AVERROR(ENOMEM); goto fail; - if (s->avctx->hwaccel) { - const AVHWAccel *hwaccel = s->avctx->hwaccel; - if (hwaccel->frame_priv_data_size) { - f->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(s->avctx, hwaccel); - if (!f->hwaccel_priv_buf) - goto fail; - f->hwaccel_picture_private = f->hwaccel_priv_buf->data; - } } + ret = ff_hwaccel_frame_priv_alloc(s->avctx, &f->hwaccel_picture_private, + &f->hwaccel_priv_buf); + if (ret < 0) + goto fail; + return 0; fail: av_buffer_unref(&f->seg_map); ff_thread_release_ext_buffer(s->avctx, &f->tf); - return AVERROR(ENOMEM); + return ret; } static void vp8_release_frame(VP8Context *s, VP8Frame *f) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 4f704ec0dd..751dc7271f 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -119,12 +119,14 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) s->frame_extradata_pool = av_buffer_pool_init(sz * (1 + sizeof(VP9mvrefPair)), NULL); if (!s->frame_extradata_pool) { s->frame_extradata_pool_size = 0; + ret = AVERROR(ENOMEM); goto fail; } s->frame_extradata_pool_size = sz; } f->extradata = av_buffer_pool_get(s->frame_extradata_pool); if (!f->extradata) { + ret = AVERROR(ENOMEM); goto fail; } memset(f->extradata->data, 0, f->extradata->size); @@ -132,22 +134,16 @@ static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) f->segmentation_map = f->extradata->data; f->mv = (VP9mvrefPair *) (f->extradata->data + sz); - if (avctx->hwaccel) { - const AVHWAccel *hwaccel = avctx->hwaccel; - av_assert0(!f->hwaccel_picture_private); - if (hwaccel->frame_priv_data_size) { - f->hwaccel_priv_buf = ff_hwaccel_frame_priv_alloc(avctx, hwaccel); - if (!f->hwaccel_priv_buf) - goto fail; - f->hwaccel_picture_private = f->hwaccel_priv_buf->data; - } - } + ret = ff_hwaccel_frame_priv_alloc(avctx, &f->hwaccel_picture_private, + &f->hwaccel_priv_buf); + if (ret < 0) + goto fail; return 0; fail: vp9_frame_unref(avctx, f); - return AVERROR(ENOMEM); + return ret; } static int vp9_frame_ref(AVCodecContext *avctx, VP9Frame *dst, VP9Frame *src) -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".