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 58D3B44C3A for ; Mon, 13 Feb 2023 08:43:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D7AA768BDDF; Mon, 13 Feb 2023 10:43:33 +0200 (EET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D1D768BDC3 for ; Mon, 13 Feb 2023 10:43:25 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676277811; x=1707813811; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=LWDyN0AaCZCZDoNmFntdnWUwPCXKHbWjbYlK17vLYNo=; b=PvROAcr/4D7jShpEw2i48DqK7wkfavDlwgrdgmuBuemJj7P+HTK7DizY JapWoug64fbNyORlLI9+t7Z2NGpOZz3y8Iljh4c3ptL65pjGfgHmJaeBl caZbpTYLicNWrER2BL7IkNxx/oHzUhp92Wng9ynA2B0k61aBW1Kthcvmk MGIj2DNC9AdCRGAuPLPDalpaMWMAu3GSVy9OO509zSyc54ADThS0qYGmM 52y8AE9gGaA7iNh8GRilxLCSFRdGCTkwbEcr+sAOGn2rSlf1uw35hDNjD UPu5HkNPoc7FfSy6IauNo/6twnRMeA73m6qdkktFpHWjn3AHNL0mtXGOE g==; X-IronPort-AV: E=McAfee;i="6500,9779,10619"; a="310474408" X-IronPort-AV: E=Sophos;i="5.97,293,1669104000"; d="scan'208";a="310474408" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Feb 2023 00:43:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10619"; a="646309311" X-IronPort-AV: E=Sophos;i="5.97,293,1669104000"; d="scan'208";a="646309311" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga006.jf.intel.com with ESMTP; 13 Feb 2023 00:43:23 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Mon, 13 Feb 2023 00:43:22 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Mon, 13 Feb 2023 00:43:22 -0800 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.41) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Mon, 13 Feb 2023 00:43:22 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AhKi1SKzrKvLRtCaaZzkKiugNjnI14i+sDL2muggzQUsvNJjjKpNx7ODo1tN3MpT1HAauhb1RXp3AyEYTVarnKq/nYhbng2RRnPLaJEZRKXKdiRUASgPkmQUODpRXU4kvaDT5Nybt+QqxozgBCR6dYqJZXqUiKFG/MB9Mbjqm+gdgtEP+abcw8gKqnaxR4YpuZiCrpBGcFTh1iTCJTG5+awFnK+fktwSMKjiTVX7CSpO3dq8uKeNkS7t/32+LdUaNATF6NM1UI9a9mXcm1gfDxp/20hWPB6Hd4NuJ4houYm4gDxvOHaL50I3H3HPAqf5zwgy4WqzQFxx7baxR6Qhvg== 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=8M9NlTBXKF8kL0aJXpnHP6weqvQYMAlCfzDPapH0pH8=; b=l+E6Xe3bPkIyLBv7XSorr8cQvD2xSAFtcEL5Q9kffDUGikhbO67xWfViS6mz4okpYu+OXS550TIfn+YvfjDn5NOP53f28Qh3g0VglfNYYhvBFea7Z9DmjKxdzr28WP+t/FiNI62FXBLUslmaBNuiIC8kpe2dg5TUMw4WiuP2PQEfTuzJCu65G3hiXNm41Dok6Br/Lz1yySa8cKmsgWvM3e5c9vXXNIMrxfgrXkOiUu0UBUNT2optAf2wcM39XYilGQOuJ3J7/1aXzj3/vFgV99fdz4pWw9ljp+hEcOh5LfeYvzFhlefY1YmpSwOysDVb3QExcKGYqqtNCu7Utx0gsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from IA1PR11MB6396.namprd11.prod.outlook.com (2603:10b6:208:3ab::10) by SJ1PR11MB6227.namprd11.prod.outlook.com (2603:10b6:a03:45a::10) 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 08:43:20 +0000 Received: from IA1PR11MB6396.namprd11.prod.outlook.com ([fe80::1acf:bc94:238e:d67a]) by IA1PR11MB6396.namprd11.prod.outlook.com ([fe80::1acf:bc94:238e:d67a%8]) with mapi id 15.20.6086.023; Mon, 13 Feb 2023 08:43:20 +0000 From: "Chen, Wenbin" To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH] libavcodec/qsvenc: Flush cached frames before reset encoder Thread-Index: AQHZP22dKp/TqgaXh0i/IBMgBhxvB67MdP4AgAAaWSA= Date: Mon, 13 Feb 2023 08:43:20 +0000 Message-ID: References: <20230213053931.534552-1-wenbin.chen@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: IA1PR11MB6396:EE_|SJ1PR11MB6227:EE_ x-ms-office365-filtering-correlation-id: 11f68854-ea3e-4afd-777b-08db0d9e5c0b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LO/75YwbAtOSf9jBiTq9dlIGnBhVoCLiBZFS8/x2qiJFTkH+uahN7+0GJQHx3Ube2WbPQzwUxDdQd40ApM/ZoKKT2ym2W9arWYcJTIeA2uQrWlMlj/MZEN1iP6w2xWEXTi5kWT0gw1Xd8C/PXJmYcFmadSGacX5vjxnSM+FThUxU7H7H5uNWjw3Nkdlx5BbkPvguNXYo88COQwx4qm+XEnX9Iz9fCQlZ+0WZ1CnP27/PS6xp5gTiRFmUiZdT7720A7PZ+sZxBQVavCF1P8Vt9nr8hx6FTmtykBgRol0TJjySOgcqKuvKK3ZmY1KFRzclBRHDnQ58y0Tdw68/+t7KW35H8KJlUr/0JJOE6vx/OR+SuKQZuuxYKDeLHHXB+HJUjmVjxzvM6R3vqomw5wlBMR1Yl+WrEl/7F+v/tOTZsWEIJS2jk5nImvQZTCn6+Ql5bs5oQ7r4GCZWjF1tYloZ3fCuJJsDso04Jg0Cedg27I66ka3L4FVnYGcWwtkOw5KtZDUmY/34Tz8Lk2BCSipbb5S4hVFFxTkwZoih+fyzupX5JOFpm3QSslqLeLMYZa/H/7udfyjVgrsjDDRZopwcXiODQD8d0bQVc4FbO2rGgqsnHfW9azklOEiN+o9umAqk0zSuw+osINLt5XsjVJAARhWnRrzI5PZnKVZqnkIbOgcNBfM/EAzl5ewP5PMD5WAjZ1rCXMSD1jN4f7cAlR4mm9gIyNRM9qsvN7JIG6DLCek= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA1PR11MB6396.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(39860400002)(396003)(376002)(346002)(366004)(136003)(451199018)(316002)(66556008)(6916009)(8676002)(66446008)(66946007)(66476007)(64756008)(76116006)(41300700001)(6506007)(52536014)(8936002)(66899018)(5660300002)(2906002)(71200400001)(966005)(478600001)(122000001)(9686003)(186003)(7696005)(26005)(55016003)(33656002)(83380400001)(38100700002)(38070700005)(82960400001)(86362001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?dvmsc1KAVkHy+uwMCpyyLd2MZbywxO/lOVllBdGJvKoFtqyDQMKrFH3T2I4m?= =?us-ascii?Q?GxeO1MV2ZTiQ3exZfZ0w5J8jS+wyI9C19K0NmRQcTLbUF3ggrCLhL7qr0ibr?= =?us-ascii?Q?8Z/2NMSOSQC4Ni17vOVuF5TnQWrX0S6qpEJYbpDM3Vj+cAT34xQXzLyMoTvq?= =?us-ascii?Q?EtQQDlY6Dp4MQUADL2z78EA4sIpUtlVqUEkh2sG2mPuGGXEd04oe222ziBgA?= =?us-ascii?Q?Z0exh477QfMPOWWPLMOTXOh0HJKHdhFSCadbmpLUxq/VxaHf8u0kI1qv6fLa?= =?us-ascii?Q?AEfW+1cZPxBibBOItAmLH93rNA/mK6qs5w4Izckmv1Of/D44o984rFzXSpvj?= =?us-ascii?Q?6L++hPTXtfUMQCS0jCcmWYrpzuk5+xSgl3eN2aey+eiSvgxXKwWQbjF165B8?= =?us-ascii?Q?e0xOse8p3ZNBftw1lxqZdxdzncvVtfIsW7FyA/HhvnUDm80yZF14F6AY/XZb?= =?us-ascii?Q?MSWhsnbD7fQ6UPDW68lPu8D0ORNqt7H3FZGDVANKO6pO6sK4qNBTCQm/tZEf?= =?us-ascii?Q?DeVtI/HI3YXsOicQFn31/am//AoEW/DkwsSKCxSxIFFu5N4/KlHgsWqqtA+f?= =?us-ascii?Q?HhpuPx7opd7i3YudGwTOkpjwBO+6ui2uaXIwSv48SVxS7v8/cLictHb41PBh?= =?us-ascii?Q?TpggYwIF7c+8pXuCqzZXM0BGUMsb8wHh62AkzNiwTRHh7C7Ret8K0QUQPAL3?= =?us-ascii?Q?B6x5ydv8pBDbyXXSxTCmOqmky1DcY1/O81aBtsxqLWCCwoII/7R6feMdWRuU?= =?us-ascii?Q?ylJF1LoamRAm/vFa9YbGyfMATb/972Gc0+DbsypYa8IgqBMLz2QMTvHE40L2?= =?us-ascii?Q?q50852TLAYuSAjh0boDGOj5EdOi2tG3E/GfNDrp1IVS4K/81i1NFzoJbejKE?= =?us-ascii?Q?cNaTxKyo6F87SjJbmzGmLpoLqP/S5K/jCdnGX44NwXThGJXM+/+89Ax12Opu?= =?us-ascii?Q?gljD07y2bNyE/C37WMGrM7i355AyKiEkU0ljkDzNyRd3AjY5txUthN7/Y96V?= =?us-ascii?Q?J8+g/QANtmsS92FBMaDBBLjzUri/rHIkOZRY1hQG2st6F3zotoQR6Ew+AiVw?= =?us-ascii?Q?AqFXp6wemBh1g+JynGBJ2pip3SAbq2koRz5renKCnd3oo7DYudPuSUphESa9?= =?us-ascii?Q?kGUVpSk9QgDEMbSrpaB/IrDIC2VIy/7atbODft9xlM9HcrfnYDMm8djvNlHa?= =?us-ascii?Q?EOcZTERMQVW8fQjXb01fFFGryL2yq+N/voxfQXQw+q4HTvUxGohsk1M6aCwt?= =?us-ascii?Q?LfZRd5GFbdAxaRMWOgVQOnUUENur6b4baA0BbFyc5odVa1/qKrMB8VhqLA2g?= =?us-ascii?Q?WcXwPBIetLe0h3UEvb2/nVLJvHHn1O+lm/CbjVTd11lyQyhtoqYhQIj0Bc6P?= =?us-ascii?Q?eAs3zMJmzArWlusP53zey7C6fQ4vKL1ghxhtgXqARhPFsDeovt7tBA81Ps3w?= =?us-ascii?Q?7t0dW235Jbc80eCSyroOvu3FKZ3FFR5Z3Yt3RG7pYq2F9iE4lMlVi+b7jWfB?= =?us-ascii?Q?azN1YiASbZ3NxJhGmU97arwuMJ+bBjqJRi1FxqqNrhPutGhOLMvCxBbxfgi+?= =?us-ascii?Q?kJ0kCQgKVBmPmLQ5Wla78LMwxv9SFnRtRIYKD0Wj?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA1PR11MB6396.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11f68854-ea3e-4afd-777b-08db0d9e5c0b X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Feb 2023 08:43:20.3149 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yZEMoq100ZDKAo+ou2pgixL3iMs71OQxt96YjIdU3E8dXIivKM+b3kn8gOUtPPIkjVB7s22Gw56h2mx6/qvYWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR11MB6227 X-OriginatorOrg: intel.com 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. Thanks. I will fix it in patch v2. > > > 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". _______________________________________________ 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".