From patchwork Mon Jan 24 14:45:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33763 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386492ioh; Mon, 24 Jan 2022 06:47:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJx4HC8PTAmYGzbYJlKNl0d0+qOwHg+2GqynJ6FPdUi0iYl+Y3JqAyxtP0eMZm2NmL7FMQs7 X-Received: by 2002:a17:906:4998:: with SMTP id p24mr12256448eju.131.1643035660331; Mon, 24 Jan 2022 06:47:40 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x17si8772644ejj.886.2022.01.24.06.47.39; Mon, 24 Jan 2022 06:47:40 -0800 (PST) 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=ak2mLHpf; 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 A913E68B0A2; Mon, 24 Jan 2022 16:47:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2019.outbound.protection.outlook.com [40.92.89.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A3EC68B05B for ; Mon, 24 Jan 2022 16:46:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D8GRAnqMNU6MaHs7kpoh9LtL50Oi0UrJZywngebf7Wri+PWfoZQFWhDxLefH/+CjZ5WsU70cUER0fiTzRHdxvLeOQ0tYVuJWlWVDix0jS/nc5sUGnK+ZW65x0D98wVyqmzsiBfexgta64f2hLh4q/rnLikm8rq1yfuee3q4ANpA8mAwwbIZ71nCuZXvcAMuDl8YjLpO1Gt6pOqs+FjvmkhI20UCA7YPHW8Uwpw+3FdcBGyDetHEZQH8UNUR2cMO/CpHwEnfNYokL9kFDBvLTsttiLLPjvfvccPIJ9qBJqAn0m1Th/mZMXUdlBWZ8t12C/2IEaiizY4Xs0AUgI4LgoA== 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=v9uMRPMVMHqNtg5t5IymOqYtMihEGjmpic1O3sdmMUQ=; b=UJT1egJlaCfCXZjryuY3SwFgZJwB3vnvg9neBLGysS/wveswBHodhtvtDtPtsXGX/ekEoCFOW+GDFOOqMD8DuPaWJoPGSbjCujq5t7CFuE2+fD7ALYAE7+xPTCB0IEUeYDHfet2Qjve8Ybd8aOE9FBC4LfYBUmlngH5R1kK4d1s3ZjLqSzVWybvhLNzdlOLw4Lf6YxJDBmUswjEvvH4t37QlYOBvFHTJFCIRSFl22JVCspFk176hH8KdL5HQuzm1Iqwml8YimE7tOiFinke1PZbm4XopEZwxuCGzpSNDGd9M4QQpLuwD21CmASKRT3RTFYO8jxEgPmc9ns64Oa7/5g== 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=v9uMRPMVMHqNtg5t5IymOqYtMihEGjmpic1O3sdmMUQ=; b=ak2mLHpfoGYPGU+vuByTaQsPcGhvGRj9XYcn36b3pvLKtTQe7YPgvYy8rSQDmfgZCrESEVkY5UkBFFIbQZyvmB2/gofpXhwaFrfV56UvcMidxOg1+FNPT9vYIN9pEFLi3yB5JiflIvBHgWTYKm2s9+wXOeAWmg2pWuN65qYks+fcR2S2b90dWtw1U5Z3jdM+gKctCOMoY+eZg6f5bKPl6pV+1uDwmmwPtV56JP6YchI0PrBhNcZhS2O9AXhEc5fNDRu0AgC+NGOzHqfOdIJxpYX/zxIng0M9JPRN2+HLmto/VJ2Hy/nfZNKANv/YRDN7LkxiYBzbjd+AYnLhBJ8puw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:57 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:52 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [POMDzCg3j0vdlnz7kJIB2OK2orIH71By] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 978e075e-2c95-4f16-7b94-08d9df485ec6 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qe6meWCTIpQQgm6l/DL8esRwYRecwY9zNDVPr9amDg1A32PgNNLD7skG5h1DGuc6mnG05kpFBjlm8OQpD00ogkSpQmJq7jl0JMO5X7XtkAh97Yovz1LfFpqEgKs3dSih3raUZBbwb1IlTAeQGN/WK3rxU4bK7LbamA4u/d4W6t4qEYJmr386EXDe29t0mwqLBhDWVhEmhavSOvriQjhvYCRxCI+9paqitu8FYGsiDgXyVA93iHVKHSwCS4jHWcrqy//DYLQUkL+dtODVYGF2W88Hr6Sbzf+oZ3kH/BOzLUfFJRgUQqVEZMm09Ri8r12AGM79Z//peJ25gQrBsKlDb8i/dKQpevNs54/AzPchdP2OrDbxUtkneUtTi24Cp2NhSLVKx+cAQDA9o1JAlT8SnvR/ma+aoTGc7a5k7K/DOyuBdviSfXXIzkxcd3cJ3dtGyiQGEtkV7E647PKWZt2L0v9E46wEOFHiC0HKpyp8UHJ64JdrHklLhC7jWoGWBYoipuLaBSOpcWIkaKwPtx+bcM7S5LvHn7Ncg+z7d8RBU3NcL7VAcB2FgZfvNCXVKS8ILP71gaiV9hHB6nTuHCN4LA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YLZXubnDWiKlQJzMedbsjYz4fFnosf/pSSBnhSXRyGUz5yRFEHsuSNpdcb/HKwlnCmtLE/zUd36hsVdXUpER0ekAU8DT+tFfpeYJCy78ZIPBz8uasXOh9vcDZ/E+nrzcr7wKOlrVv1UpZnCNVntFLHUzse13eRqvoYSbVYIgA52X+jDLL8CFK5BYDM2I/u55f3lReUfFmI6ok3sKxB2elCTrtcaBotuHQQFerdWiBJ5FwRsxGmVYxJas21fXWXxJI7ogxABx31Kp4/S23W3LuDrP5CudIBn6pNlOfVCu/bLge1mIe9MijwcGhwAOjdy7TSgGG2w1iA5k1weYpo5dJ9PI85u0pNzu32Jcc3QgMjpyL8v8FqE1ClMyzq9VTCYKjAip/F8uTZUA2KK92dEYqIRL2j0qI9igI8XQYsgPLyrfgwAplaNFT3C9xrWioCdjgf57QMdAAq3bGz1vjupIckfZW4sp+pcZ4Egzt63LTEjqmSIysuTF4od2s2sCUJA9/sLbXzLHXShs1lA7wL/RBTN0pCZc64dPJDUx0AsJ1zKZJxQ0zjLLnsnqyNyCeMKT6Cm1pbf+ZuP1PfJxbzq16PTu+PHHselQg20HKltJ3NS+ZkOQ2UyMB1dHuedw3fXsgEArKapCIlMyK2TcMxjFiWwqxWCroS654yTZn6MzQUVeeDVpUG7DTAlLTq/Q2tDvEzyujTKf8iHV7FzRHH2HayxqecfutgbaLBf5k9qo7ttFo3BkilOb0oMjPN4nmSirGKcUxmSkl6M10rs4CweQIhE4ISn1SbU3XNgj201637cev0LBN18QHV10RRyFK5aNzMv7KCRAjwyTuC9xeUWmXKD66QBH59WA5MDn/RN9YfNQfMm/n1EHRLPyGsKjveLdd3V+7fSBSKJD0cVLlLwA6orHWQztj9rauEUW5PtEbSGUV1beiaH7UfGXJ451XAHWN4Srt/EObYABBwZNcqATJQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 978e075e-2c95-4f16-7b94-08d9df485ec6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:57.2215 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 07/31] lavc/amfenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: iHHAY3gUgME/ From: Anton Khirnov --- libavcodec/amfenc.c | 43 ++++++++++++++----------------------------- libavcodec/amfenc.h | 2 +- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c index fb23ed738c..0e5117c5a3 100644 --- a/libavcodec/amfenc.c +++ b/libavcodec/amfenc.c @@ -117,8 +117,9 @@ static int amf_load_library(AVCodecContext *avctx) if (!ctx->delayed_frame) { return AVERROR(ENOMEM); } - // hardcoded to current HW queue size - will realloc in timestamp_queue_enqueue() if too small - ctx->timestamp_list = av_fifo_alloc((avctx->max_b_frames + 16) * sizeof(int64_t)); + // hardcoded to current HW queue size - will auto-realloc if too small + ctx->timestamp_list = av_fifo_alloc2(avctx->max_b_frames + 16, sizeof(int64_t), + AV_FIFO_FLAG_AUTO_GROW); if (!ctx->timestamp_list) { return AVERROR(ENOMEM); } @@ -403,7 +404,7 @@ int av_cold ff_amf_encode_close(AVCodecContext *avctx) ctx->version = 0; ctx->delayed_drain = 0; av_frame_free(&ctx->delayed_frame); - av_fifo_freep(&ctx->timestamp_list); + av_fifo_freep2(&ctx->timestamp_list); return 0; } @@ -432,18 +433,6 @@ static int amf_copy_surface(AVCodecContext *avctx, const AVFrame *frame, return 0; } -static inline int timestamp_queue_enqueue(AVCodecContext *avctx, int64_t timestamp) -{ - AmfContext *ctx = avctx->priv_data; - if (av_fifo_space(ctx->timestamp_list) < sizeof(timestamp)) { - if (av_fifo_grow(ctx->timestamp_list, sizeof(timestamp)) < 0) { - return AVERROR(ENOMEM); - } - } - av_fifo_generic_write(ctx->timestamp_list, ×tamp, sizeof(timestamp), NULL); - return 0; -} - static int amf_copy_buffer(AVCodecContext *avctx, AVPacket *pkt, AMFBuffer *buffer) { AmfContext *ctx = avctx->priv_data; @@ -479,21 +468,17 @@ static int amf_copy_buffer(AVCodecContext *avctx, AVPacket *pkt, AMFBuffer *buff pkt->pts = var.int64Value; // original pts - AMF_RETURN_IF_FALSE(ctx, av_fifo_size(ctx->timestamp_list) > 0, AVERROR_UNKNOWN, "timestamp_list is empty\n"); - - av_fifo_generic_read(ctx->timestamp_list, ×tamp, sizeof(timestamp), NULL); + AMF_RETURN_IF_FALSE(ctx, av_fifo_read(ctx->timestamp_list, ×tamp, 1) >= 0, + AVERROR_UNKNOWN, "timestamp_list is empty\n"); // calc dts shift if max_b_frames > 0 if (avctx->max_b_frames > 0 && ctx->dts_delay == 0) { int64_t timestamp_last = AV_NOPTS_VALUE; - AMF_RETURN_IF_FALSE(ctx, av_fifo_size(ctx->timestamp_list) > 0, AVERROR_UNKNOWN, + size_t can_read = av_fifo_can_read(ctx->timestamp_list); + + AMF_RETURN_IF_FALSE(ctx, can_read > 0, AVERROR_UNKNOWN, "timestamp_list is empty while max_b_frames = %d\n", avctx->max_b_frames); - av_fifo_generic_peek_at( - ctx->timestamp_list, - ×tamp_last, - (av_fifo_size(ctx->timestamp_list) / sizeof(timestamp) - 1) * sizeof(timestamp_last), - sizeof(timestamp_last), - NULL); + av_fifo_peek(ctx->timestamp_list, ×tamp_last, 1, can_read - 1); if (timestamp < 0 || timestamp_last < AV_NOPTS_VALUE) { return AVERROR(ERANGE); } @@ -710,9 +695,9 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "SubmitInput() failed with error %d\n", res); av_frame_unref(frame); - if ((ret = timestamp_queue_enqueue(avctx, pts)) < 0) { + ret = av_fifo_write(ctx->timestamp_list, &pts, 1); + if (ret < 0) return ret; - } } } @@ -751,9 +736,9 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) av_frame_unref(ctx->delayed_frame); AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "Repeated SubmitInput() failed with error %d\n", res); - if ((ret = timestamp_queue_enqueue(avctx, pts)) < 0) { + ret = av_fifo_write(ctx->timestamp_list, &pts, 1); + if (ret < 0) return ret; - } } else { av_log(avctx, AV_LOG_WARNING, "Data acquired but delayed frame submission got AMF_INPUT_FULL- should not happen\n"); } diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 358b2ef778..1ab98d2f78 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -72,7 +72,7 @@ typedef struct AmfContext { AVFrame *delayed_frame; // shift dts back by max_b_frames in timing - AVFifoBuffer *timestamp_list; + AVFifo *timestamp_list; int64_t dts_delay; // common encoder option options