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 1607844C4A for ; Mon, 13 Feb 2023 07:07:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 94A9F68BDCA; Mon, 13 Feb 2023 09:07:45 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2060.outbound.protection.outlook.com [40.92.90.60]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F25F168B8F9 for ; Mon, 13 Feb 2023 09:07:39 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TjemfHdp8gbO403v5qU8yeow1yI6zWncUrdx64oEEB1IvZLZVmfL+r/EuDiM7WP2/3yTpniFDEReDUvkAXlL+MOUnFSklafyLIxB6MpMeMMAFaszPETYV63lbYe2YbHkenIBYnzkmdHn77MEo7rkx8HpseMJrBLDe2q8arpej5tdq1hOXg67tg87w3qWsMKO524fOI68G8X4Q2TrjUzsW/aFWMm0Ng4KHwHCS+JihMlJ59/b7avJqo0w9xXnjFE7FNfYRAEB6rIhnUM+s23rGOajxDmgs16znyBTC+E7JEn7EITmYSWDeaLsu53xoYBtFP1vctigYNVWikGGCkP5mg== 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=w6T7wieS2tSMDunfq5DzdJG3bY0/63wVPVte11zcZPI=; b=jcSzAKcsPwg2ZgNd6RAbFyTii0O7aMHnxrt59neC1a6upST0x1HnzJ/URJmXzqrN7jCF/bkX/YFiumA/SmGyeLRKyKZs6QLKmBjPhKC721wZMmSGz503tr6iJjShZDCqEt1MN5WSEvEX1MrWu1MBpB+ZSdvxZWSZ6FMh78M19Z8UCC5ZwDjcI96go4GOpN9alOnQgf4GgDEsliicWU0k9jHvEnih8hstjuKcCKiY0RRD1fgn1a1Q9QEJabW7mxvJtMXTgAbyxPqsWnybCiWBbrwRHwapKgAyu5/tL8elvYBb2cwQidVdWObYeJF8DsLurIegrFfzSsE81qyNbiulVQ== 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=w6T7wieS2tSMDunfq5DzdJG3bY0/63wVPVte11zcZPI=; b=LgW/3mmjmeWPWMTQU0Nuwhmyke/S8auBXRZU6hfl251HYIcbgV51yIc6iT3byhKI1S5k0dMs2XVEILElmifZX/kUQ4pq8L4lEymmzi68qJB62w1BSlTgI7m6fgq8xFh/UwgJsXv5nhieOS6aXFevnYgSqj88Fgi5wsC52mRZ56uzA7BZ0MTUDsHg9lGQG1oGRfP+MIgjsHkJG+Y/S8JAZfd534R9G1nMr/fYfxY9pXulBh4MiQPKqnuYaLm3V6N6hf6c8c8OQSw0aeSa7uIiYZSzUBXXLH/LQkhtXbJaUtihcDCpudG5X3vVT9Qb8cGy7rlt10COJnqGTisOPLEC+Q== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0012.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:3db::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.24; Mon, 13 Feb 2023 07:07:38 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::ee20:26b8:7242:6ac3]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::ee20:26b8:7242:6ac3%8]) with mapi id 15.20.6043.017; Mon, 13 Feb 2023 07:07:38 +0000 Message-ID: Date: Mon, 13 Feb 2023 08:08:08 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230213053931.534552-1-wenbin.chen@intel.com> From: Andreas Rheinhardt In-Reply-To: <20230213053931.534552-1-wenbin.chen@intel.com> X-TMN: [oC9me/H8pryH4TO943nBAJx3OhTkLLea] X-ClientProxiedBy: ZR0P278CA0138.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:40::17) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <2ac59081-e860-9580-0b51-7c1cd3360d7b@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0012:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a078900-2d32-4663-b309-08db0d90fd8d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H7GhqF73TjvU8HiwmkaFrE0+Qqe5JjVbP5hZK2w4vT1o9jsf7clGXEDes5Dcr6pJfJzkAarnIbZC1Lhhk3klwp1A/g9oU5Uey+29tsKQurVg4wY+VsiGraArGYB7K9e8av7i7IoODvzDk54gJ0RNSyJtySw7JHPVm1eZOQ08QruF0vk2FKyP+pb4U0rAPh1GHuI7n2HV4JLEORS093kPQldJdR2ref7t5ip9Ccu9RBIoxR41gDbxn9RKkOrYTYfDoGHeUOvEyi6ZRuio1rvbNwK+kTPfY7Wxon4j6u/8Nj1M3rCuDYZSGQzX998SwWXGGuTcDohIvbfv4OEwkL3+7+5jmSMrEYUDtzbqxluilbi/eyC3DIeRJPC6fT47hGfX7Pp2bSQzZNgqxWcuZwkxYhTuoHNHSsrBc/iYtHET1d99HvnbJlM74buMGNkkzxqJtlnWzJxgKhtV35oUsHDqNxPyUrgHBUVmSlxnPqWdpUy+uHLb0hUCc9u4IYFwkgHcFgr5R92eQFMqWwxGLYgdSKuL0pfoCIva906rBByR8eCWGOqd39q++IV9p1x9rnAfJ7KdX9QcAzgLDcN+qmlOLN1VczRS89Y1Rhlq3NJQFhUeWSLKkjNr3yFc0Op2oTPA5E1eY+LNIIzqC9rSOq2wWw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckpRd0x4N0grcUlUSURzNGR1SERpQ3FXWVo3YzVReDlXSFlmWks0SU9SVG5B?= =?utf-8?B?NlEyRVA0dEdCYVpzZS9jMndINTA3Mms5eEJpU1A5L05TVDVUUjQ5V0hFbTYr?= =?utf-8?B?WWNUTUl3dzZIdFNWbXNWc1hZQmQ5UGl6cUZ4dEo3NmNqSnZDcitmL1BUR21O?= =?utf-8?B?MGFQTzREbjJ1NDE3U2pqSGgzOGZlSFcvVTVPdDhtQUd0N3V1MkxEcHVlNWVT?= =?utf-8?B?ZEtVSlZ0d2NLU2lSdTdPVVJOWVVOMXpjWmQ5WmxaQ3Vab01tU3BaUnFUUy9j?= =?utf-8?B?VGQ2dEVIVFM2RjY3SE1Uci9NU2VuZzA4aW5tQ2M5Tzhnc24yRmk4bVZuYzBI?= =?utf-8?B?Y3ZmWkdEQWJDY0l5bnA1U1JqZVBPZnJEbFM5dlQ1WjhMY25QVXdYc1VMSXNt?= =?utf-8?B?bmRVNFMvbDVzSGZPbHJYWTY4K2pjRHVVWXpRTG55Wno1SWVkUENuNFdPakdr?= =?utf-8?B?ZFRpbUoxbTlXaHg1V3BzVThTSGtFemZGVk5tdlVkYm16ZkFJWWh6dW44cjNS?= =?utf-8?B?bEZnWkhucThKVHE0aS9oQW5sWGxsSXY2UDc1T1haWVBRVlZCRTg3b2FFUFVl?= =?utf-8?B?VVlxNDRUWXppbFdSSms1ek9FbFROUEhwSHd0UzByTzRkS3AxU0hUVU1Yd2ow?= =?utf-8?B?YUNiRnpYMmc4REF4L21PQWNDeExERVdqLzVkNHA2V3g0WlRyNEJzb3oxT2tt?= =?utf-8?B?UlEzRE5TWVh6OHd4eVBFcnhWM2FNdmk5VUdkWHJYNkNZMzA1dnZjVVkzdGo5?= =?utf-8?B?ZmFWd1NxWEdXSGp4MXlZZnVLSWp3c043amN2TEF3YlU5SXhJWlluck1ReGpH?= =?utf-8?B?YldzbHlrUGE2ekdUdExsWEl6cFJQczMrVktER2pjWmN5TXBlLzFHb0lSd0t0?= =?utf-8?B?NUFBZUdKMnFURGVMRXBGaTZoWnI5bGlqMzJWbEJYRlUzclpJNnk5NkJack5S?= =?utf-8?B?TGxscHFkVEFhT2hxcEVyenUrRFdRcTlNRU8veDNhbjVmY2JEb1c4bnlNSlRk?= =?utf-8?B?NVd6Vm1jTk5SODRaaUhTQnVOTEFQVWtvMFMzOUFWZndGUWxiMk9mZHFkaDVL?= =?utf-8?B?cGIweVhBUkcwSkR3SFQ2b0EwUlJJV1FETFhRRjdxZXA4K1ZUelV5SkJka1Zh?= =?utf-8?B?M3ptT2o5QjZnQ1I0NVlua0d5SjBzSWt2YlA5VnRoeE0vWVRXVHRzMDFGeXFE?= =?utf-8?B?WGh0aTVUQ1JWaWlibDNtZlVFZDVKWHFMUUdWUDVkb2hmVEsxV2thZ3BHbENu?= =?utf-8?B?M3BPS2d6QnBZbmk2Q21Eazd4SW1JWTVEQXB1ajBVYy96Rlg4eHB5YzNIZEV1?= =?utf-8?B?aXVEUHM0OHVFcGs4K2dmYkIwTHlKVzJUdEJVSko1Q3dpM2pEbTRoTU5BNVlh?= =?utf-8?B?SWpKUU5uZVZ6VmF4eFAzZlpnQ2xkK2wrVTMyRnN6UXNVYmUzQlgraDRtM2hX?= =?utf-8?B?Rk0vbXpuMlRicGhueWxiN0NOZXd1a2UyaS9TMmUwZ2xrR3V2cFUvYklxWFRF?= =?utf-8?B?TnhGL0NBZTdEWnYwWnpCT1htdmM0KzZ2NUNvdlRWKzIzZHNCVTBMcU5SSEhj?= =?utf-8?B?emNXTGQ3Y3JCZG5BaUV3SXVuQ0hqZDFodUFRZFNBWS9Kam9JaCtmNko4aEtJ?= =?utf-8?B?bjJ6QlBIU2tQQ1g0ZHA3Qi9hQXEyQ2l3U2pNSGo4TGJXWXlETFovMmF3a0to?= =?utf-8?B?aUl6d2M2RDhGWk9NdmhMbFhLR1BWRjlMQlFWYi9FanVPSFVHODJxNlpRNHdy?= =?utf-8?Q?sH0ASW5f4IYWGOVeDM=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a078900-2d32-4663-b309-08db0d90fd8d X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2023 07:07:38.5306 (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: AM8P250MB0012 Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Flush cached frames before reset encoder 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-at-intel.com@ffmpeg.org: > From: Wenbin Chen > > According to https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#configuration-change. > Before calling MFXVideoENCODE_Reset, The application needs to retrieve > any cached frames in the SDK encoder. > A loop is added before MFXVideoENCODE_Reset to retrieve cached frames > and add them to async_fifo, so that dynamic configuration works when > async_depth > 1. > > Signed-off-by: Wenbin Chen > --- > libavcodec/qsvenc.c | 118 +++++++++++++++++++++++--------------------- > 1 file changed, 63 insertions(+), 55 deletions(-) > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 2f0e94a914..f3b488dec8 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -1600,7 +1600,7 @@ int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q) > > q->param.AsyncDepth = q->async_depth; > > - q->async_fifo = av_fifo_alloc2(q->async_depth, sizeof(QSVPacket), 0); > + q->async_fifo = av_fifo_alloc2(q->async_depth, sizeof(QSVPacket), AV_FIFO_FLAG_AUTO_GROW); If you use AV_FIFO_FLAG_AUTO_GROW, you need to handle av_fifo_write() errors. > if (!q->async_fifo) > return AVERROR(ENOMEM); > > @@ -2296,58 +2296,6 @@ static int update_pic_timing_sei(AVCodecContext *avctx, QSVEncContext *q) > return updated; > } > > -static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, > - const AVFrame *frame) > -{ > - int needReset = 0, ret = 0; > - > - if (!frame || avctx->codec_id == AV_CODEC_ID_MJPEG) > - return 0; > - > - needReset = update_qp(avctx, q); > - needReset |= update_max_frame_size(avctx, q); > - needReset |= update_gop_size(avctx, q); > - needReset |= update_rir(avctx, q); > - needReset |= update_low_delay_brc(avctx, q); > - needReset |= update_frame_rate(avctx, q); > - needReset |= update_bitrate(avctx, q); > - needReset |= update_pic_timing_sei(avctx, q); > - ret = update_min_max_qp(avctx, q); > - if (ret < 0) > - return ret; > - needReset |= ret; > - if (!needReset) > - return 0; > - > - if (avctx->hwaccel_context) { > - AVQSVContext *qsv = avctx->hwaccel_context; > - int i, j; > - q->param.ExtParam = q->extparam; > - for (i = 0; i < qsv->nb_ext_buffers; i++) > - q->param.ExtParam[i] = qsv->ext_buffers[i]; > - q->param.NumExtParam = qsv->nb_ext_buffers; > - > - for (i = 0; i < q->nb_extparam_internal; i++) { > - for (j = 0; j < qsv->nb_ext_buffers; j++) { > - if (qsv->ext_buffers[j]->BufferId == q->extparam_internal[i]->BufferId) > - break; > - } > - if (j < qsv->nb_ext_buffers) > - continue; > - q->param.ExtParam[q->param.NumExtParam++] = q->extparam_internal[i]; > - } > - } else { > - q->param.ExtParam = q->extparam_internal; > - q->param.NumExtParam = q->nb_extparam_internal; > - } > - av_log(avctx, AV_LOG_DEBUG, "Parameter change, call msdk reset.\n"); > - ret = MFXVideoENCODE_Reset(q->session, &q->param); > - if (ret < 0) > - return ff_qsv_print_error(avctx, ret, "Error during resetting"); > - > - return 0; > -} > - > static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, > const AVFrame *frame) > { > @@ -2438,7 +2386,7 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, > > if (ret < 0) { > ret = (ret == MFX_ERR_MORE_DATA) ? > - 0 : ff_qsv_print_error(avctx, ret, "Error during encoding"); > + AVERROR(EAGAIN) : ff_qsv_print_error(avctx, ret, "Error during encoding"); > goto free; > } > > @@ -2466,6 +2414,66 @@ nomem: > goto free; > } > > +static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, > + const AVFrame *frame) > +{ > + int needReset = 0, ret = 0; > + > + if (!frame || avctx->codec_id == AV_CODEC_ID_MJPEG) > + return 0; > + > + needReset = update_qp(avctx, q); > + needReset |= update_max_frame_size(avctx, q); > + needReset |= update_gop_size(avctx, q); > + needReset |= update_rir(avctx, q); > + needReset |= update_low_delay_brc(avctx, q); > + needReset |= update_frame_rate(avctx, q); > + needReset |= update_bitrate(avctx, q); > + needReset |= update_pic_timing_sei(avctx, q); > + ret = update_min_max_qp(avctx, q); > + if (ret < 0) > + return ret; > + needReset |= ret; > + if (!needReset) > + return 0; > + > + if (avctx->hwaccel_context) { > + AVQSVContext *qsv = avctx->hwaccel_context; > + int i, j; > + q->param.ExtParam = q->extparam; > + for (i = 0; i < qsv->nb_ext_buffers; i++) > + q->param.ExtParam[i] = qsv->ext_buffers[i]; > + q->param.NumExtParam = qsv->nb_ext_buffers; > + > + for (i = 0; i < q->nb_extparam_internal; i++) { > + for (j = 0; j < qsv->nb_ext_buffers; j++) { > + if (qsv->ext_buffers[j]->BufferId == q->extparam_internal[i]->BufferId) > + break; > + } > + if (j < qsv->nb_ext_buffers) > + continue; > + q->param.ExtParam[q->param.NumExtParam++] = q->extparam_internal[i]; > + } > + } else { > + q->param.ExtParam = q->extparam_internal; > + q->param.NumExtParam = q->nb_extparam_internal; > + } > + > + // Flush codec before reset configuration. > + while (ret != AVERROR(EAGAIN)) { > + ret = encode_frame(avctx, q, NULL); > + if (ret < 0 && ret != AVERROR(EAGAIN)) > + return ret; > + } > + > + av_log(avctx, AV_LOG_DEBUG, "Parameter change, call msdk reset.\n"); > + ret = MFXVideoENCODE_Reset(q->session, &q->param); > + if (ret < 0) > + return ff_qsv_print_error(avctx, ret, "Error during resetting"); > + > + return 0; > +} > + > int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, > AVPacket *pkt, const AVFrame *frame, int *got_packet) > { > @@ -2476,7 +2484,7 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, > return ret; > > ret = encode_frame(avctx, q, frame); > - if (ret < 0) > + if (ret < 0 && ret != AVERROR(EAGAIN)) > return ret; > > if ((av_fifo_can_read(q->async_fifo) >= q->async_depth) || _______________________________________________ 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".