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 385F34259C for ; Wed, 5 Jan 2022 05:46:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3321C68A800; Wed, 5 Jan 2022 07:45:59 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2016.outbound.protection.outlook.com [40.92.89.16]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 58E2E68018F for ; Wed, 5 Jan 2022 07:45:52 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HxYGea6LlGTc6pPYtRkeqbuVyHkNN+m4FAAtBR6YfS6PKHdxPVVE5zTWX7y4wOFZG2VCYV3BsjQmvib9KtZTgPxUicSJ9t62vjqWF3CyW93fVPddR6t5qeh0gXmjaeeOY+q5oXU56zb0tDcVxXH6JEol6iZ4WBZ5UW/c8ZNe5tiRH+PX2ihMAyDohR7DCbgaCx72pA52FPchQs1wriM2Vk8Zfzhs/QgcKTkSGuue+OnRU7xR9Sad206NXwLSgf/bqSXQyNfmmg3dUQ2XEVkqGB14PphRB2X1SJK/t6EI2nT7JCwQ1cFKXrtsxiGbVztH50lz6l16aad9BNwLYkt58g== 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=G6KaRJJPmjFj+iag79xqMd5BNa7L/OQkPn8RqAyL3Ys=; b=Iz4yVniVRRIETj3wCohpURUewa01P1Ye5btx5x6lm5fqNy/ImOIn+bEQKcpZcXRiz5KIpFc/fbDVWgO2T04bho/61M+VS/RGIAtoIqf9Xp8433lq2Xjd8nNCOKaDg1F1IyCptQRS80gAbH0THKsuy4c3dVGFPiWetc9qtXnBhZjZwbH1WfYc/W1sMCPF27JMJ3YBtA+oQo1rU/JOMgshaTS4obniAraGe4xX8oFedV5An2hR71jH5vxu8QJgat/fr/6bQ4RBD/EExD7ze9V145KYtM4TZXF5w9rJFucYllHkup6jhq0LHZfVMGS527vZfeBLTkLOl572WPb3x6vpPA== 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=G6KaRJJPmjFj+iag79xqMd5BNa7L/OQkPn8RqAyL3Ys=; b=m5nBlCI+evrvndvNIJSSRcfivhbKZ+2tiGa1AzClQqf4X8ObMo7VFNf9agOqXS/Fn0GemlL7N9wrS+H3HYOwiRE81EXZCn4VjfLAr/wzo27gRTYfe890P2vA0yVBOt5YEjjnFfRtqzCFezNidKtpR0pv+TmGdvX1/YEXDBhdQIkC3UllCSpIUqmqNcu+3HYF8qPcFINYnIcqQWVjZWTMuSjmiPpnLiY5zLO3Nc2XftvpcKSpsiO9USzz7fmNfOIcgVZjPd2wH8GJ8t/mEXs9aKXnn9B4iAHz5Nn4zthZCa2NcPsYALH7AJUt+joGJb3Q6l21A+eZlPdvvVUlw/afDg== Received: from PR3PR03MB6665.eurprd03.prod.outlook.com (2603:10a6:102:7d::6) by PA4PR03MB7183.eurprd03.prod.outlook.com (2603:10a6:102:105::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Wed, 5 Jan 2022 05:45:50 +0000 Received: from PR3PR03MB6665.eurprd03.prod.outlook.com ([fe80::a017:d2ce:40:876d]) by PR3PR03MB6665.eurprd03.prod.outlook.com ([fe80::a017:d2ce:40:876d%5]) with mapi id 15.20.4844.016; Wed, 5 Jan 2022 05:45:50 +0000 Message-ID: Date: Wed, 5 Jan 2022 06:45:49 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220105024810.435597-1-wenbin.chen@intel.com> <20220105024810.435597-2-wenbin.chen@intel.com> From: Andreas Rheinhardt In-Reply-To: <20220105024810.435597-2-wenbin.chen@intel.com> X-TMN: [KAldy5qT7WPgRfkCa1/A38rLMEEAFz90] X-ClientProxiedBy: AM0PR02CA0139.eurprd02.prod.outlook.com (2603:10a6:20b:28d::6) To PR3PR03MB6665.eurprd03.prod.outlook.com (2603:10a6:102:7d::6) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9cb86745-aaa2-438b-da1e-08d9d00ea17d X-MS-TrafficTypeDiagnostic: PA4PR03MB7183:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HOUUQq/8LBFDMraS6Li6BQR8+GL/OmRCM8C77Qv6Xf01elGMlrgQYX9Iy1H0QPC3YoxR04PvNWWRw7iI3F94CsWWE+XBgMpxlahZcMOG7O3cdUF0EBA+PVTUPvln8wzamRZQrVPu/5/ETunmbRkBJWyOIeDfTnZXGnGxZvGfCRIrwNxtymTnb/xBPfEfMkE5JEGn7TVeJlgyYydBgZg8Yr/wctpru+hEu6Dcs8OE+s4gOFvFFh6yb6hxi86TTbZpzW0LxKZrd1HJcKvOBbBS0ckFNIX988zGbDWRkfHU5i/7EyhV49TCmgUTzwGOZ2NSy5xodJB8yt5FMPhT6FomI9KhFc88l7VrToG5wmEtt+rA5AluX72qgUOsrJ8ixcyUsI2TBmjr5pXyo0lFzQNWXaBwRKl5J//qFIx4hCbEd7OraFp4HhCKvRDFSA1/pju5Nd9X9hR0tvyjj0l8EOrbvA9jC0mvlYP8bPuuK5Gbt4kMGiQUVr1kp25rB6GfbYAK1pJO/PjhKhpgSLE/ebJB5/RIWB0hHsAMUK9iLGEywjNG3V0SsaaPFpISReUtthpGrs2G6hwCFVKlZrE7XWSO6w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZjJzT1ZZSkVpeXhOVUd2S3V1LzUzQW9MVW54Tm9JcWVXS2tyL3ZMUHFxdFg3?= =?utf-8?B?RXRqY2ZxaWFJVFMya0JnbFBJdGhoQVR2NFlNM1JvRldpU3V2UitPbERmRlBa?= =?utf-8?B?OEUrS1Jha1BrQ20rMmZMYUNRS1oxVUROZW50dTZZUHdrR2hQb0hKdlU4a0ZD?= =?utf-8?B?VmtWWmdZWUQwOEJRWENRbGQ5S1o0ZnVJSHRuUzVUc1JQUm9idzBxelBuc1hR?= =?utf-8?B?UGR3TnFSTFB3Q0ZCMDRsTDRmNXQ5bkhJMDFHQmREUjVlcE1MdUdWdVBmcGU2?= =?utf-8?B?a0VKaE9TNndORGx2UVJTc1ZsNlA5QVVaV1NDSU16U2xaemdqaEFUUjNHMkdE?= =?utf-8?B?Y0xQYS9SNkNGZityVUl0WkwydWRMWi95ZXVQdzRqeDROMFNNNzA4Z2VZdnhk?= =?utf-8?B?anV1WkdtckRMWUNWUVNGaC9HcEIzN2cyOTcwWXBYSnhlcjdLMU5wNTlJQkpM?= =?utf-8?B?Z0JXbG45ZnFIUU9zSGRzOGhuTDdaUXJoMlduTU5Id0svaHJ2M1ZjQ1Z5UWth?= =?utf-8?B?U2ZKNEJKRG5tVjFQM291bFhXTUpJcjQycC82bnd5OEU4Yzd5NmE5OVJCQmlz?= =?utf-8?B?NVBmU1ExL3NZQlJSWFNmQ2NhbndNWS9FbENNelJaMkExT3kwcXdzT25mV1Jr?= =?utf-8?B?T0FUTFo5d050dXl5Z2ovNTFUZys4SS9KNmY2TzVjbFBuekhsdWwybUZuV05L?= =?utf-8?B?bElkdkJnTUhiYm82ckxRaDRRdEg3NlNaUmhBZUMrRmUvYmI5Ymc0L25zbXU4?= =?utf-8?B?czY2ME1RUHNKdTZlTFNFZE1pc1ZlSG9rNVFWSkRaVnNNRVZ0ak4xeHkyVmRw?= =?utf-8?B?Ynl2UEdIRG1PMmNqOGt5TEFieG4wWGdVWld2NHVCWnVndHdRdW1OSlpRTEUv?= =?utf-8?B?a2h4OVdTOXNUWndScS9qSThqV2pydklkU29leUJDSFdyeGoyajJXRDg2ZHdn?= =?utf-8?B?V25LdHhIVGV5ZkI2WjlJck9UWGlwVkw3Snlnd04xWkhIay9yMlJFZC9zL1Mr?= =?utf-8?B?K2w4UUVVcmNNb0VKOUtlWng4ZFBENXB2eC9PK2Q3Z2dndDduM0l4dFJ4MVlS?= =?utf-8?B?cWxkb01uaVRtM3lPMVFjSmNvS2tWQ2xqQk5QUGsycVdYYzQ3WjUyYzVtUkpL?= =?utf-8?B?Vy9wcVlkaisxdW1VdXJyV2tQRjdzVkk4NHFQV0ZiVExQQVUzWG1senFmU3JM?= =?utf-8?B?d1ZjVW5QSnFHWFdPNzNCaTlkMEo0eTZiRHp0NVBxR3JnbEZrSEkxZ3poenBu?= =?utf-8?B?RzY4am1wUHJHV1kzelBJdG9hRnNINDVycmF3UEtvdHB5RnV5dz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9cb86745-aaa2-438b-da1e-08d9d00ea17d X-MS-Exchange-CrossTenant-AuthSource: PR3PR03MB6665.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2022 05:45:50.9010 (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: PA4PR03MB7183 Subject: Re: [FFmpeg-devel] [PATCH V2 2/3] libavcodec/vaapi_encode: Change the way to call async to increase performance 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 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: Wenbin Chen: > Fix: #7706. After commit 5fdcf85bbffe7451c2, vaapi encoder's performance > decrease. The reason is that vaRenderPicture() and vaSyncBuffer() are > called at the same time (vaRenderPicture() always followed by a > vaSyncBuffer()). When we encode stream with B frames, we need buffer to > reorder frames, so we can send serveral frames to HW at once to increase > performance. Now I changed them to be called in a asynchronous way, which > will make better use of hardware. 1080p transcoding increases about 17% > fps on my environment. > > This change fits vaSyncBuffer(), so if driver does not support > vaSyncBuffer, it will keep previous operation. > > Signed-off-by: Wenbin Chen > --- > libavcodec/vaapi_encode.c | 64 ++++++++++++++++++++++++++++++++------- > libavcodec/vaapi_encode.h | 5 +++ > 2 files changed, 58 insertions(+), 11 deletions(-) > > diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c > index b87b58a42b..9a3b3ba4ad 100644 > --- a/libavcodec/vaapi_encode.c > +++ b/libavcodec/vaapi_encode.c > @@ -984,8 +984,10 @@ static int vaapi_encode_pick_next(AVCodecContext *avctx, > if (!pic && ctx->end_of_stream) { > --b_counter; > pic = ctx->pic_end; > - if (pic->encode_issued) > + if (pic->encode_complete) > return AVERROR_EOF; > + else if (pic->encode_issued) > + return AVERROR(EAGAIN); > } > > if (!pic) { > @@ -1210,18 +1212,45 @@ int ff_vaapi_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt) > return AVERROR(EAGAIN); > } > > - pic = NULL; > - err = vaapi_encode_pick_next(avctx, &pic); > - if (err < 0) > - return err; > - av_assert0(pic); > +#if VA_CHECK_VERSION(1, 9, 0) > + if (ctx->has_sync_buffer_func) { > + while (av_fifo_size(ctx->encode_fifo) <= > + MAX_PICTURE_REFERENCES * sizeof(VAAPIEncodePicture *)) { > + pic = NULL; > + err = vaapi_encode_pick_next(avctx, &pic); > + if (err < 0) > + break; > + > + av_assert0(pic); > + pic->encode_order = ctx->encode_order + > + (av_fifo_size(ctx->encode_fifo) / sizeof(VAAPIEncodePicture *)); > + err = vaapi_encode_issue(avctx, pic); > + if (err < 0) { > + av_log(avctx, AV_LOG_ERROR, "Encode failed: %d.\n", err); > + return err; > + } > + av_fifo_generic_write(ctx->encode_fifo, &pic, sizeof(pic), NULL); > + } > + if (!av_fifo_size(ctx->encode_fifo)) > + return err; > + av_fifo_generic_read(ctx->encode_fifo, &pic, sizeof(pic), NULL); > + ctx->encode_order = pic->encode_order + 1; > + } else > +#endif > + { > + pic = NULL; > + err = vaapi_encode_pick_next(avctx, &pic); > + if (err < 0) > + return err; > + av_assert0(pic); > > - pic->encode_order = ctx->encode_order++; > + pic->encode_order = ctx->encode_order++; > > - err = vaapi_encode_issue(avctx, pic); > - if (err < 0) { > - av_log(avctx, AV_LOG_ERROR, "Encode failed: %d.\n", err); > - return err; > + err = vaapi_encode_issue(avctx, pic); > + if (err < 0) { > + av_log(avctx, AV_LOG_ERROR, "Encode failed: %d.\n", err); > + return err; > + } > } > > err = vaapi_encode_output(avctx, pic, pkt); > @@ -2555,6 +2584,18 @@ av_cold int ff_vaapi_encode_init(AVCodecContext *avctx) > } > } > > +#if VA_CHECK_VERSION(1, 9, 0) > + //check vaSyncBuffer function > + vas = vaSyncBuffer(ctx->hwctx->display, 0, 0); > + if (vas != VA_STATUS_ERROR_UNIMPLEMENTED) { > + ctx->has_sync_buffer_func = 1; > + ctx->encode_fifo = av_fifo_alloc((MAX_PICTURE_REFERENCES + 1) * > + sizeof(VAAPIEncodePicture *)); > + if (!ctx->encode_fifo) > + return AVERROR(ENOMEM); > + } > +#endif > + > return 0; > > fail: > @@ -2592,6 +2633,7 @@ av_cold int ff_vaapi_encode_close(AVCodecContext *avctx) > > av_freep(&ctx->codec_sequence_params); > av_freep(&ctx->codec_picture_params); > + av_fifo_freep(&ctx->encode_fifo); Is it guaranteed that the fifo is empty at this point? I don't think so. > > av_buffer_unref(&ctx->recon_frames_ref); > av_buffer_unref(&ctx->input_frames_ref); > diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h > index b41604a883..560a1c42a9 100644 > --- a/libavcodec/vaapi_encode.h > +++ b/libavcodec/vaapi_encode.h > @@ -29,6 +29,7 @@ > > #include "libavutil/hwcontext.h" > #include "libavutil/hwcontext_vaapi.h" > +#include "libavutil/fifo.h" > > #include "avcodec.h" > #include "hwconfig.h" > @@ -345,6 +346,10 @@ typedef struct VAAPIEncodeContext { > int roi_warned; > > AVFrame *frame; > + //Store buffered pic > + AVFifoBuffer *encode_fifo; > + //Whether the driver support vaSyncBuffer > + int has_sync_buffer_func; > } VAAPIEncodeContext; > > enum { > _______________________________________________ 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".