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 EE2F6426B9 for ; Thu, 6 Jan 2022 08:42:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A2ACA68AA6A; Thu, 6 Jan 2022 10:42:08 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2100.outbound.protection.outlook.com [40.92.89.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AE75D6881C2 for ; Thu, 6 Jan 2022 10:42:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PKXUN5FYzG6KzsqtECJ1w8WdsxYdPYAjAEXk+o1Re3PYiKMuxDgl9oyVwhfCpvyh/QWJZqBjE72WqtIQUTpv3YDQesK3gGzNYR/jkiVFgiQzoVt8VTm3Yd7WN5Ryo54AwYMvhCbMrS786FX/1imkcYy5yWjBGormUPF5z29UFPVNCbgnhtanAqAAjZbfSU913BAo51q/2Tn7u76td7jeOqPm7kXlpWzqzSVvkwLXFegNJyb8buWxPKG5LsOQWZIp83awhtfoyK1KII9f8+N3jOcaIyJAkGNc9Tb6rL5UwgWEV+XOBrACa6WE4gsbuosYJ0i4bpzGOPYm33KCg/0DMw== 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=I1j8fmoVh/FOSBldzi9e8Bn+nFfrvpjnrLyJAZaac88=; b=Q6uhfgBJqmgmjiubFLxuVw11Ow8YUiK093lw+CRXDiZRhCtdnDK7pzQinGLWFqEhTvztDpufraBJtXLwWnOvPNCXTr6CEzXCS9jJE2LnEh+xMhwI4SzZFMsVCOFQk/R9VOBWXkkpHlS4bTkVrDO/RGFlH8KPlG7VLv66jbo7scWQ7VxCGc/ipvCYRtgjeY8MhsyVuYrsiLY32IQ022xKy27opQwNJIW6vRDvgkqTH2krFZC8KcBESPF+WJX7EslryaOY1/WYxblBy65aoj9ipwM0LaWABr7f6JcTaRMg+2WslYHGVuKHd/XUedyKAu2YO4eXriY08YEQuIQwArkFQA== 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=I1j8fmoVh/FOSBldzi9e8Bn+nFfrvpjnrLyJAZaac88=; b=M0poy7NsOuCGvNRO2RaPDiRRTH6niELZ/f9uMZ5yVk9881CVTgS2gmioN6xWLAsZmnEDOCTEuaD1JWecBuYUfK6chAGTgUl5Ea6oSgY09mT+i15sDkKOvnKYyuo3d/5OqDT8eI6jOOmd1ol2O9Z/9nqSfSkn8r5LcAF0Gzz79jDKeBhRa5mPaFENgzKIvxtetYGwpAcMIiw5nlF3W9P++tr7oTH0Q4YxxqBZzdt2ZZSScSByQ79uSOfgTEbQU2DBPmgyPi0OcElkVMEaQv8u5WvLiQrhR8p1o+yiv9Dsdx16HSPQ1RhdyPjAVL3IFH0Id8lc0kOc491SUs7ZEZhVaA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM5PR03MB3010.eurprd03.prod.outlook.com (2603:10a6:206:1b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Thu, 6 Jan 2022 08:42:01 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%9]) with mapi id 15.20.4867.009; Thu, 6 Jan 2022 08:42:01 +0000 Message-ID: Date: Thu, 6 Jan 2022 09:41:59 +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: X-TMN: [XXBkbV/YqRM6YfvauTOnWxOjEjIGUWVg] X-ClientProxiedBy: AS9PR05CA0014.eurprd05.prod.outlook.com (2603:10a6:20b:488::33) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <5ae1e3d7-98d3-68e0-22cd-b9270d21b3d8@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bc9a308d-a568-4a47-e540-08d9d0f06837 X-MS-TrafficTypeDiagnostic: AM5PR03MB3010:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9KuOr2tL3lLih4aXU4XRBesKjRnGXwGy8iJ45F/cQj+8jL9qJ2we3lUIE+L3yYj9ijmvJvsoSpRHu/AbcRSjjZSDLuxB8LI6oZopp2c1GiokBjKfszcM1o1skO47Tp9OI2YJfm0BxMF6XcR87Bdj393gDvwq+NiSAHnV/W0+I815gtyVVeYKSWeqfZMK+OnEeBzbdYMtcI/7aFKi8qWOAn/TU6AJq42+OCpiSTHmIWcLzXddVrXpoPjmeOeDDi1rEXboCH5Es/7BMV21zLDrNXtRxgdLSSb/2wu+k/igGmH2pZvhX7zPpej/ZJD0OZJy4l4PwLvSwT8e0NgC7wGopfHQ0UizqD0QYoxEmail4NQVqi4pXMAx3PBpPgqX5hzssWE+RuWIDgrWJbuHBHkcXmsoIxKxmYYaEHqB5xs3Ndy5v+mU0NRDb7/3feNQchH7pdv/Acmcr5d++5aYHu/BEDvVV4haGfyU7CD+sHq1we1+3/QMk5M+Z7GEOP691affwPTluWPrWYziqv5qLiaPrLoI05PT/Au6XBA/mET+M/u9EtIw66CAlDtl9EPQmK4X+nf2mbmyusoEjnXO6e714w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K1loZTh6VkdIbFlKbWFSbTUzVzZReVFvNnE5T1hIb0ZYZi9ISnU5dnN6emtV?= =?utf-8?B?QXFnSlFzNGJ5NTZJOHhKQnNyZkQ4dUxQdVZyZTNHWTg5Um8rWHVoNmo0ODNr?= =?utf-8?B?WUVlSHZZU2dLV28zajVYMUZiMnVxc1E5T1NteEkyZW1haG1PdE03d2R6dzhl?= =?utf-8?B?d083eWlPU0s5NXFMd2lqQkJrdDRhbzFrNXA3V2lCOTBiUFdpaGhDZHdyNW0z?= =?utf-8?B?UkZKZ2Nncld0eWJDRUxpRU5FdUUxSlBONEhKdzZDa2ZuNmFKYVZhUysyVXZn?= =?utf-8?B?MU8rNnFEWm8rakNnQU1PeXUwRjRZazE1Q1g2dGJIOXM0MGNOangzVW5MMUxD?= =?utf-8?B?L0kvWm9JSWc5WTAvNGpFS2Z4WDY1ZHozWm5la1dqOGtEYmNzRmhNL2ZlRkhB?= =?utf-8?B?UFg5QnE3TUZIeXJYT1pzc1hSZ1ZOVE5IcjZnU0NmSmdiZU1kQ2hFUjMrNDBQ?= =?utf-8?B?NlBCSXRya2Jjd1d1c2o3ejZjSy9CNm8xSHpadDZwV0lWWDlTODFhMXBlR3dh?= =?utf-8?B?Mm5WRlZTbEk3R2loaVR5RTZ4b1NvQWUydVgyN1A1bTBsV1AyUFBWZ25tNEtz?= =?utf-8?B?ejQ5REN2LzBRc0VxaE5Bc3l2TnRBa1k4N1lEMUFpVFFzSlhGdzdScmpWOUY4?= =?utf-8?B?UUtUY1cwNUtSdDVZeVBqTm5uSnozeFBKTUxhSTdFOGFvN2xWWkVPK1VMTGhx?= =?utf-8?B?V082RmtJdFltejBOTG9iYWZ0cHpsOU5BRXlidzdKa0NjZVNkUHhqZkNJaGVU?= =?utf-8?B?VThzc3kwdjhJbXIwWHl6Y01PM3U0REx6eUhVUk8wYnBwN2tUMUk5L0ZySkxo?= =?utf-8?B?TEN5UmxUbExQYk5MZTN6d2tJNWlUN2xGSExOTlhYdlUwVkF3cXZEeUwvUXBr?= =?utf-8?B?d3MvdkVWbndGU2QvUCt0Ykt0ZTRQd3FBN0t6TTY5OGJRR3Bxaldnc0RpZThp?= =?utf-8?B?N3h6aTNpTjhtckxHV3RmVTNXcnIxRFhHR1lHeXJlWExsL09jZWRSZnNRRTUz?= =?utf-8?B?bFlXaDA4SHVTcmp6NjA1UGlYNUErNGFFUXBxRkl5OG5ULzVUYi9iUTFsazlu?= =?utf-8?B?Y3dMQ3Z2S0VUTXh1UUxtQjF0MXVDZWZsazErS3FMREdrNlRMc2dpRUttZ3FO?= =?utf-8?B?dWtpRU1VeFBDRVkyZkhrWUFoM2NoWE50TFpRenZBSThxZEtFeGZTOGgyM2lv?= =?utf-8?B?LzYvd28yOEIvYUNkNTVMS3dyRHlmTFE0b2o0MEhIYlpiOHRzZEpnemF5Tzgr?= =?utf-8?B?MldKVHlhM0tPZ01iemtTYXBac0pCZ0pkRTV3V2xlam54RU9UZz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc9a308d-a568-4a47-e540-08d9d0f06837 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2022 08:42:01.1514 (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: AM5PR03MB3010 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: Chen, Wenbin: >> 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. > > I don't check the fifo size, because in ff_vaapi_encode_close() all pics > are already freed and encode_fifo only buffer pic. > ``` > for (pic = ctx->pic_start; pic; pic = next) { > next = pic->next; > vaapi_encode_free(avctx, pic); > } > ``` > Ok, seems like the FIFO does not have ownership of the pics. Alright then. >> >>> >>> 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".