From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id B0C9D4ADB4 for ; Sun, 20 Jul 2025 09:16:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 002E168D187; Sun, 20 Jul 2025 12:16:33 +0300 (EEST) Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020085.outbound.protection.outlook.com [52.101.225.85]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id CF80768C87C for ; Sun, 20 Jul 2025 12:16:31 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NcBWH99j5VvnKjMqwFDmcmTg1H1GhsyzhYX0QEjjnM9cCyTN74426WMgNQyxuUh4gDX+GNNm7gcKOyfqPKnTRnX1PG9CMOAgoYTHIjgP5g1eJ3ukgVmTHENFG11eLtVpRONnFrTkWOfdr4P41wON0VodLk+DrYSD/Ei1m+QcmATVbNb6fUNlKTbiRyCR9etAmvY36Qw2VBi2BQc6XWQ875iCFMRJZaDjTHWXldnnzJeQqvUbsKytXplaUIyBozLxKCy1xTzie+kbIFSMt+rGnzz8vzfmaHORaQb+tb0/MgPRwk6G6zRQYZxZf3wkHrFQlyjbLyFcwlMKNQPcq8DNLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=0vc5oLsC5WwNbJtv7st0bn/zTE1IyNzbqRuQevoleV8=; b=dZaTfroazE0eZ4enmiQ2z5VoysYEOK10QieaQa7g+2EryTcj09pGlglTdVVaf5k1OBC1HDTS34geG3ZOq+4/TfjRYFpKHg15//06wPZQFcnVcrMFLRoLcLPP6iUpyGLIhCjwcZqG64qfLvrJS8NS2nIaU8snedxtNDeiyIYBK6Fw+kmgwZZyVFm/L+VaaietBi6prNVMKzxDmt7DT/N/KvXfa7+Dm+1u++4MLgU8bbZwu3KkACV4nF3hR/NLeNR5AhHijAJVsxmaTYMp6IpboC5V97R8h9rk1cSoi0oinBRmdHRC0NLbMBjoqSj9cz7D+ov6c9qJiikyzLK3ld9yLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=multicorewareinc.com; dmarc=pass action=none header.from=multicorewareinc.com; dkim=pass header.d=multicorewareinc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=multicorewareinc.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0vc5oLsC5WwNbJtv7st0bn/zTE1IyNzbqRuQevoleV8=; b=CPpO9oi/mEKimTt0Wcull9HJ5lAe2wle4k0/mpcYuPXCydF4+fWtS+4pyNZiqJ1ZthWeoZPLP85JY2M3LMX3z0OlmG/UXfo/M50egqS6S/N6TSlLC8mUQVrK3xaGgz2VNfzMSbaQUee1UWhgEeeWecR4ms2Dq9dEiAVb+bqpFpO2qbAIeRI1lXeZs+lm7rr5uQiE73LjBuDMrwxF05OICL+elrVlCkP2HptuRj01N+Wxu7ahBFBkKeFAIeO582G2HjA+rI8DN6X5KE1z5EnGPFp3s3AR2oGq5uTYnqlnbE0909ix6pTuFHOnXCmE9dFCIKEnA9y1wWNSSywN9+c5Jg== Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:186::9) by PN2P287MB0495.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:df::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8943.29; Sun, 20 Jul 2025 09:16:28 +0000 Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM ([fe80::1a78:65d:b254:359]) by PN0P287MB1494.INDP287.PROD.OUTLOOK.COM ([fe80::1a78:65d:b254:359%5]) with mapi id 15.20.8943.029; Sun, 20 Jul 2025 09:16:28 +0000 From: Dash Santosh Sathyanarayanan To: FFmpeg development discussions and patches Thread-Topic: [PATCH v5 2/2] avcodec/mfenc: add support for D3D11 input surfaces Thread-Index: AQHb+VbTvYdh4JmQ7E+A4elrRoy3pg== Date: Sun, 20 Jul 2025 09:16:27 +0000 Message-ID: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=multicorewareinc.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PN0P287MB1494:EE_|PN2P287MB0495:EE_ x-ms-office365-filtering-correlation-id: 2cc7faa2-de46-4c96-bfee-08ddc76e1b9c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|10070799003|4053099003|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?ho18gs5DUOYqdTeNQ207MChMEEqYaz8WjNWQ2L8Z3R9pDHfSgStDqB4D+A?= =?iso-8859-1?Q?dKbzmK+Rk95Z+k7TF8h2RtJeYk5pi9GrJ9cksQcz+ywvS1NsjNK6QTfDI2?= =?iso-8859-1?Q?NWCeIs37N3HPNa0PA3Nibrz78N+XPmQrv2Rpw/fkbHbnDy58x1FQU6tM0c?= =?iso-8859-1?Q?yN9YeByTB5XTlXg2cPc1Xelaa0baiWa8H5HghKBwWsHD5IDacFA3Th5gpZ?= =?iso-8859-1?Q?tqgQRM+eVt3Xf7qZcHDPIMnWfWyf4wj0y2aJ7RYgfIaL1TGtmvJiaPjOqb?= =?iso-8859-1?Q?YHq/ULVfP7Mk7EFVA5WkYyK3QrYll1qn1gPy69UXqGZHnmA6ntuv4uFLFU?= =?iso-8859-1?Q?mLMQC5HtK9GMl9JjtF46wrBE5CBl1Nf87mufTDqSG+cw1nCLqi9ik+0ziL?= =?iso-8859-1?Q?FEHsAkQC0xArOWn51XqZLDAkK1ICvGaUH46s3TDliGWR8GHaNUi5Ev4eS6?= =?iso-8859-1?Q?/yOe5UpHL+EhuFvC2O+sRliudZvFVmk6wPAS6GJPWbQ9wPo62rBb9WW8MV?= =?iso-8859-1?Q?2voI0CFKKC+tOBJd+3f8iPKFOSoLb8RQJa/PzlyMIevH2agxh04YNa3Xcy?= =?iso-8859-1?Q?v+w5oXcYac/wmwtURTlzVvYh8iQDeOaApH20M+YSKaeuCIndrJ2mTBJ+ab?= =?iso-8859-1?Q?jiGMl1p7iCc1npGpA1lKX7U0CiNScloiVs/6FSpoxCmK7MQ2Ye4C/SB0zx?= =?iso-8859-1?Q?R8FblQKSRouC9oRuzY/fpnUKwOuKmiFY8W4P7wWrpIRvsqKe/5MFRDQYMh?= =?iso-8859-1?Q?SnwnR9DdJAdiba634zSjv5WWUejekbxzxVfUUdRkRMFYH2+xQr3YNclS7c?= =?iso-8859-1?Q?mPOc780/l3RD4YlvKwVTFaS+R/3u7Mp+2pqqLFwZdsvWpEpMz4014iwMM/?= =?iso-8859-1?Q?6jUjSvCSVTP53Mr6ogyRmZjV9c2cKlaKtuxVBUTaTDXifqgW/GtqowtBQs?= =?iso-8859-1?Q?+d8JBdAUaZ5VENTa/Y84Bubodyr3nkf3RycnjNpLSP7JEavPaJwU+NCRMg?= =?iso-8859-1?Q?fnMESwhCQ96MxDWI2fzVXLqqoRAEZmKFmvj8H/OW5FWne9FX3Q8xxlZtJq?= =?iso-8859-1?Q?jY4ekVyvh2SK6MOTDQh1CcJgikSLM0MKMj/b54TwFYzUw2NXYg7PhosiiN?= =?iso-8859-1?Q?cev3wFng+l5QJQmYCI/FsX/O33s4skW/dSxRP2nKbbzs+F1wI00Rss/XVd?= =?iso-8859-1?Q?z/WJ706jTSRb6t6x2/0TpfbVukItMuDwMK2UOgjphXgkaDXMAECQ+Uwrio?= =?iso-8859-1?Q?4hZ9LFWuAuKN8QIHueFfXKVQ5TRa5l3jPpFB0EYrpJJ9B2OvkWj06kq2f6?= =?iso-8859-1?Q?mm2A0KBXg63v0jxe7wnHkqt7k/2VTT4wWmRDIRhbNtdmM7ELlFHO6Q9Mc6?= =?iso-8859-1?Q?afWuZ4+VhBuo98vW6JIQ+pVyCvWUTVAYpTktHwSKG0IWZIuUZ4CJawR5kt?= =?iso-8859-1?Q?Ev5cxlQ0qnqO3F2qxkj+4q6abWCMwgOIli8G465no7gpYoA9yKvfaQahzx?= =?iso-8859-1?Q?cG2Z3C1B9iq+NnPyG+0j4vGL2kdgOmdvYgFnYlqHqYInz9FdyRDCdoV8ax?= =?iso-8859-1?Q?0gIDCvI=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PN0P287MB1494.INDP287.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(10070799003)(4053099003)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?9tTpt64HqFgijTi8tqyQCN0Zmgi9zwYLLQ7G+G/WetNJqTcGprROHbp6Ka?= =?iso-8859-1?Q?aavFs6tCF8mKWgBBHTAYk8CoZw8sX5FS+UnZDxyDbpw8zM8hQKqbAVGeiI?= =?iso-8859-1?Q?fNXjSBwGasA1XzSjv3KWRoJjFodmUYETDbPgQzl86jNX68pODO4rQNewua?= =?iso-8859-1?Q?XafYXwkTA2SPB+K5zMySaeuroiEHsq+EUL+Xkb88fhsuocR4Ng9gsDfytu?= =?iso-8859-1?Q?C3U13qvcjuVFe5QbomuEifn4P39H3QztOKolFAUnoyHi9Ai3rd3syaf9pL?= =?iso-8859-1?Q?TIhRQwMA2LJS6OLnGQLJN0MOev90+pcJuWc39dBdqTviH4exab6e8BAmp5?= =?iso-8859-1?Q?N8ad56mDWI6aCqr9SoSLRJQfZRRhTg3J8v8iCehh9WzWzGAK/d9klnJheN?= =?iso-8859-1?Q?9QLf7m0zta9YakJODlaZrg+HEj5WZ+AMRAIboKQ+TEOC6QrZNOLCdfYqYP?= =?iso-8859-1?Q?O956XCT6foAH2R8RGdhFU2lwAB5TKbYKS0arluvWL1GJUAFbbq6rhmI8Yv?= =?iso-8859-1?Q?iXVwDc4Bft0D9gyCVgwLBkcHFbU7w29e5/wC1fvrWPpjipRSgugwlkw/3m?= =?iso-8859-1?Q?F6qXj9hn8czp/evU4+/WvP7ibbgP76diSWx6hXKC2UkxTO9zP8P9GLKd14?= =?iso-8859-1?Q?drNob/aajE5GuWT4GjpEvpEt6M0SaN8Egz2IPI7RhRvKbop0V98KkvHB5/?= =?iso-8859-1?Q?dSeYPB0FfdnvOI2yWJi8BKZjL/hQmpfAUnhHd1vtRKkcyfMZ07VvQR3NXI?= =?iso-8859-1?Q?SGCNtvbMgib2YQ1OKY+6Vc3pUbb5OXHDfHJNOAAqcDh848SlqiY7JNJgSH?= =?iso-8859-1?Q?4hobaIn+i7gj73HYUMSzyOiPGFuLCdKOobiv2G7SuK8/Vkh0OemkPoEZ3S?= =?iso-8859-1?Q?ebht1OSjwRCao2Kci0aMmee+FQGt8jZgWHZnOLOewmLptDmTXBOE+gn7s3?= =?iso-8859-1?Q?1syn6pNWTKJtId7KQoG0dSP1iEvagL41Wd0elTdyn9XFSzivjGciZRxI6h?= =?iso-8859-1?Q?o7JZ45dGwPa14LjLLdtiiCeqdY/mwAjswW3eZ9meqNEGdjTC9LzSEKCuAo?= =?iso-8859-1?Q?agWJDXg9fKSBlln9FoOKQBFDKxDEj3561mVj1DUsOkbuk9IzPP5z6RJ1Op?= =?iso-8859-1?Q?yb82GdRNWlrET5MS0fvdty8MyGup51ljWtAb8nOpvts473AzR5af6vl4Jq?= =?iso-8859-1?Q?yLPDcDQw4WQTLTzCsC4db1LGU/f5KyflW1eIlxWUaHv+gYJpxrN7E21dz5?= =?iso-8859-1?Q?aAc95JMhNgyPaZPx3FOBesaVA6bp7sjyMAKWz8f46yN+5o8zESdtjQpYIn?= =?iso-8859-1?Q?R8oLSfvXB1wwYPA2QrkU0TSGZYkJDREC/42+UHRnqk83dxO4Tskyi4Vdvq?= =?iso-8859-1?Q?7Le/TbmINJBBuuLR1tM6EMl3jMJUsYJeL0dMxWXA1WGEx1vqcGdYkQVEk8?= =?iso-8859-1?Q?A4S2r1qBAlMTDtcTxr/lzygSscSjN4BcHo6w4PxvBKag3Z6sLjmRoAjLXe?= =?iso-8859-1?Q?rpglkfe35Mpbvur0DVKNkct+zkhDXjawGeawysFCpSso/GfXzkK0FFToqI?= =?iso-8859-1?Q?LYVjNUYFtuAsNo0Vb9vMuOBWfXcCLbjdsPSXX93Ltcr/AXeg1LdZklgFXP?= =?iso-8859-1?Q?z5FSNMfa1yZaa/Y4Z714aSSfvq2nAiNRKOdpSHUjqW1H7R1WjNm8E4tynb?= =?iso-8859-1?Q?ZDHNv7HpjhR6rZXrecSLkhcgREbmeTxJB+33LKDAo6uSG/615/pZHuxuuT?= =?iso-8859-1?Q?0m5Nul9joEz7hGMHbN1s3Sdlc=3D?= Content-Type: multipart/mixed; boundary="_002_PN0P287MB149407D6C41F582FE0D0210DE152APN0P287MB1494INDP_" MIME-Version: 1.0 X-OriginatorOrg: multicorewareinc.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PN0P287MB1494.INDP287.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 2cc7faa2-de46-4c96-bfee-08ddc76e1b9c X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jul 2025 09:16:27.9505 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ffc5e88b-3fa2-4d69-a468-344b6b766e7d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wvEu19q1XXsfp9NCnASDK+H5B4gWdOzFf/oLA+FuAg45OfsiJkcWcFeW0Oo1ohTKKs3ADN5KFgBwfA+PTqnKaMOgM9JpkGZ/85sESM9gk5TZlDuGgjrcmTtgww43VwomK4W7YqqFGE9+Tl5ohzIWEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2P287MB0495 Subject: [FFmpeg-devel] [PATCH v5 2/2] avcodec/mfenc: add support for D3D11 input surfaces 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --_002_PN0P287MB149407D6C41F582FE0D0210DE152APN0P287MB1494INDP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Adds D3D11 input surface support to the MediaFoundation encoder (mfenc),=0A= allowing direct encoding of GPU frames without readback to system memory.= =0A= This improves performance and compatibility when used alongside scale_d3d11= .=0A= =0A= Signed-off-by: Dash Santosh =0A= ---=0A= libavcodec/mf_utils.h | 7 ++=0A= libavcodec/mfenc.c | 207 ++++++++++++++++++++++++++++++++++++------=0A= 2 files changed, 185 insertions(+), 29 deletions(-)=0A= =0A= diff --git a/libavcodec/mf_utils.h b/libavcodec/mf_utils.h=0A= index a59b36d015..ecebb6fcdf 100644=0A= --- a/libavcodec/mf_utils.h=0A= +++ b/libavcodec/mf_utils.h=0A= @@ -53,6 +53,13 @@ typedef struct MFFunctions {=0A= IMFMediaBuffer **ppBuff= er);=0A= HRESULT (WINAPI *MFCreateSample) (IMFSample **ppIMFSample);=0A= HRESULT (WINAPI *MFCreateMediaType) (IMFMediaType **ppMFType);=0A= + HRESULT (WINAPI *MFCreateDXGISurfaceBuffer) (REFIID riid,=0A= + IUnknown* punkSurface,=0A= + UINT uSubresourceIndex,=0A= + BOOL fBottomUpWhenLinear,=0A= + IMFMediaBuffer** ppBuffer);=0A= + HRESULT (WINAPI *MFCreateDXGIDeviceManager) (UINT* resetToken,=0A= + IMFDXGIDeviceManager** ppD= eviceManager);=0A= // MFTEnumEx is missing in Windows Vista's mfplat.dll.=0A= HRESULT (WINAPI *MFTEnumEx)(GUID guidCategory, UINT32 Flags,=0A= const MFT_REGISTER_TYPE_INFO *pInputType,= =0A= diff --git a/libavcodec/mfenc.c b/libavcodec/mfenc.c=0A= index c9e2191fde..912984c306 100644=0A= --- a/libavcodec/mfenc.c=0A= +++ b/libavcodec/mfenc.c=0A= @@ -31,10 +31,18 @@=0A= #include "codec_internal.h"=0A= #include "internal.h"=0A= #include "compat/w32dlfcn.h"=0A= +#if CONFIG_D3D11VA=0A= +#include "libavutil/hwcontext_d3d11va.h"=0A= +#endif=0A= =0A= typedef struct MFContext {=0A= AVClass *av_class;=0A= HMODULE library;=0A= + HMODULE d3d_dll;=0A= + ID3D11DeviceContext* d3d_context;=0A= + IMFDXGIDeviceManager *dxgiManager;=0A= + int resetToken;=0A= +=0A= MFFunctions functions;=0A= AVFrame *frame;=0A= int is_video, is_audio;=0A= @@ -47,6 +55,7 @@ typedef struct MFContext {=0A= int out_stream_provides_samples;=0A= int draining, draining_done;=0A= int sample_sent;=0A= + int stream_started;=0A= int async_need_input, async_have_output, async_marker;=0A= int64_t reorder_delay;=0A= ICodecAPI *codec_api;=0A= @@ -55,6 +64,7 @@ typedef struct MFContext {=0A= int opt_enc_quality;=0A= int opt_enc_scenario;=0A= int opt_enc_hw;=0A= + AVD3D11VADeviceContext* device_hwctx;=0A= } MFContext;=0A= =0A= static int mf_choose_output_type(AVCodecContext *avctx);=0A= @@ -303,36 +313,118 @@ static IMFSample *mf_a_avframe_to_sample(AVCodecCont= ext *avctx, const AVFrame *f=0A= return sample;=0A= }=0A= =0A= -static IMFSample *mf_v_avframe_to_sample(AVCodecContext *avctx, const AVFr= ame *frame)=0A= +static int initialize_dxgi_manager(AVCodecContext *avctx)=0A= {=0A= MFContext *c =3D avctx->priv_data;=0A= - IMFSample *sample;=0A= - IMFMediaBuffer *buffer;=0A= - BYTE *data;=0A= + MFFunctions *func =3D &c->functions;=0A= HRESULT hr;=0A= - int ret;=0A= - int size;=0A= +=0A= + hr =3D func->MFCreateDXGIDeviceManager(&c->resetToken, &c->dxgiManager= );=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to create DXGI device manager:= %s\n", ff_hr_str(hr));=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + hr =3D IMFDXGIDeviceManager_ResetDevice(c->dxgiManager, c->device_hwct= x->device, c->resetToken);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to reset device: %s\n", ff_hr_= str(hr));=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + hr =3D IMFTransform_ProcessMessage(c->mft, MFT_MESSAGE_SET_D3D_MANAGER= , (ULONG_PTR)c->dxgiManager);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to set D3D manager: %s\n", ff_= hr_str(hr));=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + return 0;=0A= +}=0A= +=0A= +static int process_d3d11_frame(AVCodecContext *avctx, const AVFrame *frame= , IMFSample **out_sample)=0A= +{=0A= + MFContext *c =3D avctx->priv_data;=0A= + MFFunctions *func =3D &c->functions;=0A= + AVHWFramesContext *frames_ctx =3D NULL;=0A= + ID3D11Texture2D *d3d11_texture =3D NULL;=0A= + IMFSample *sample =3D NULL;=0A= + IMFMediaBuffer *buffer =3D NULL;=0A= + int subIdx =3D 0;=0A= + HRESULT hr;=0A= +=0A= + frames_ctx =3D (AVHWFramesContext*)frame->hw_frames_ctx->data;=0A= + c->device_hwctx =3D (AVD3D11VADeviceContext*)frames_ctx->device_ctx->h= wctx;=0A= +=0A= + if (!c->dxgiManager) {=0A= + hr =3D initialize_dxgi_manager(avctx);=0A= + if (FAILED(hr)) {=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= + }=0A= +=0A= + d3d11_texture =3D (ID3D11Texture2D*)frame->data[0];=0A= + subIdx =3D (int)(intptr_t)frame->data[1];=0A= +=0A= + if (!d3d11_texture) {=0A= + av_log(avctx, AV_LOG_ERROR, "D3D11 texture not found\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + hr =3D func->MFCreateSample(&sample);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to create MF sample: %s\n", ff= _hr_str(hr));=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + hr =3D func->MFCreateDXGISurfaceBuffer(&IID_ID3D11Texture2D, d3d11_tex= ture, subIdx, 0, &buffer);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to create DXGI surface buffer:= %s\n", ff_hr_str(hr));=0A= + IMFSample_Release(sample);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + hr =3D IMFSample_AddBuffer(sample, buffer);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "Failed to add buffer to sample: %s\n"= , ff_hr_str(hr));=0A= + IMFMediaBuffer_Release(buffer);=0A= + IMFSample_Release(sample);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + IMFMediaBuffer_Release(buffer);=0A= +=0A= + *out_sample =3D sample;=0A= + return 0;=0A= +}=0A= +=0A= +static int process_software_frame(AVCodecContext *avctx, const AVFrame *fr= ame, IMFSample **out_sample)=0A= +{=0A= + MFContext *c =3D avctx->priv_data;=0A= + IMFSample *sample =3D NULL;=0A= + IMFMediaBuffer *buffer =3D NULL;=0A= + BYTE *data =3D NULL;=0A= + HRESULT hr;=0A= + int size, ret;=0A= =0A= size =3D av_image_get_buffer_size(avctx->pix_fmt, avctx->width, avctx-= >height, 1);=0A= if (size < 0)=0A= - return NULL;=0A= + return AVERROR_EXTERNAL;=0A= =0A= sample =3D ff_create_memory_sample(&c->functions, NULL, size,=0A= c->in_info.cbAlignment);=0A= if (!sample)=0A= - return NULL;=0A= + return AVERROR_EXTERNAL;=0A= =0A= hr =3D IMFSample_GetBufferByIndex(sample, 0, &buffer);=0A= if (FAILED(hr)) {=0A= IMFSample_Release(sample);=0A= - return NULL;=0A= + return AVERROR_EXTERNAL;=0A= }=0A= =0A= hr =3D IMFMediaBuffer_Lock(buffer, &data, NULL, NULL);=0A= if (FAILED(hr)) {=0A= IMFMediaBuffer_Release(buffer);=0A= IMFSample_Release(sample);=0A= - return NULL;=0A= + return AVERROR_EXTERNAL;=0A= }=0A= =0A= ret =3D av_image_copy_to_buffer((uint8_t *)data, size, (void *)frame->= data, frame->linesize,=0A= @@ -342,10 +434,43 @@ static IMFSample *mf_v_avframe_to_sample(AVCodecConte= xt *avctx, const AVFrame *f=0A= IMFMediaBuffer_Release(buffer);=0A= if (ret < 0) {=0A= IMFSample_Release(sample);=0A= - return NULL;=0A= + return AVERROR_EXTERNAL;=0A= }=0A= =0A= IMFSample_SetSampleDuration(sample, mf_to_mf_time(avctx, frame->durati= on));=0A= + *out_sample =3D sample;=0A= +=0A= + return 0;=0A= +}=0A= +=0A= +static IMFSample *mf_v_avframe_to_sample(AVCodecContext *avctx, const AVFr= ame *frame)=0A= +{=0A= + MFContext *c =3D avctx->priv_data;=0A= + MFFunctions *func =3D &c->functions;=0A= + IMFSample *sample =3D NULL;=0A= + IMFMediaBuffer *buffer =3D NULL;=0A= + HRESULT hr;=0A= + int ret;=0A= +=0A= + if (frame->format =3D=3D AV_PIX_FMT_D3D11) {=0A= + // Handle D3D11 hardware frames=0A= + ret =3D process_d3d11_frame(avctx, frame, &sample);=0A= + if (ret < 0) {=0A= + return NULL;=0A= + }=0A= + } else {=0A= + // Handle software frames=0A= + ret =3D process_software_frame(avctx, frame, &sample);=0A= + if (ret < 0) {=0A= + return NULL;=0A= + }=0A= + }=0A= +=0A= + // Set sample duration=0A= + hr =3D IMFSample_SetSampleDuration(sample, mf_to_mf_time(avctx, frame-= >duration));=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_WARNING, "Failed to set sample duration: %s\n= ", ff_hr_str(hr));=0A= + }=0A= =0A= return sample;=0A= }=0A= @@ -511,6 +636,23 @@ static int mf_receive_packet(AVCodecContext *avctx, AV= Packet *avpkt)=0A= }=0A= }=0A= =0A= + if(!c->stream_started)=0A= + {=0A= + HRESULT hr =3D IMFTransform_ProcessMessage(c->mft, MFT_MESSAGE_NOT= IFY_BEGIN_STREAMING, 0);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "could not start streaming (%s)\n"= , ff_hr_str(hr));=0A= + return AVERROR(EBADMSG);=0A= + }=0A= +=0A= + hr =3D IMFTransform_ProcessMessage(c->mft, MFT_MESSAGE_NOTIFY_STAR= T_OF_STREAM, 0);=0A= + if (FAILED(hr)) {=0A= + av_log(avctx, AV_LOG_ERROR, "could not start stream (%s)\n", f= f_hr_str(hr));=0A= + return AVERROR(EBADMSG);=0A= + }=0A= +=0A= + c->stream_started =3D 1;=0A= + }=0A= +=0A= ret =3D mf_send_sample(avctx, sample);=0A= if (sample)=0A= IMFSample_Release(sample);=0A= @@ -727,8 +869,16 @@ static int mf_encv_output_adjust(AVCodecContext *avctx= , IMFMediaType *type)=0A= static int64_t mf_encv_input_score(AVCodecContext *avctx, IMFMediaType *ty= pe)=0A= {=0A= enum AVPixelFormat pix_fmt =3D ff_media_type_to_pix_fmt((IMFAttributes= *)type);=0A= - if (pix_fmt !=3D avctx->pix_fmt)=0A= - return -1; // can not use=0A= +=0A= + if (avctx->pix_fmt =3D=3D AV_PIX_FMT_D3D11) {=0A= + if (pix_fmt !=3D AV_PIX_FMT_NV12) {=0A= + return -1; // can not use=0A= + }=0A= + }=0A= + else {=0A= + if (pix_fmt !=3D avctx->pix_fmt)=0A= + return -1; // can not use=0A= + }=0A= =0A= return 0;=0A= }=0A= @@ -736,9 +886,16 @@ static int64_t mf_encv_input_score(AVCodecContext *avc= tx, IMFMediaType *type)=0A= static int mf_encv_input_adjust(AVCodecContext *avctx, IMFMediaType *type)= =0A= {=0A= enum AVPixelFormat pix_fmt =3D ff_media_type_to_pix_fmt((IMFAttributes= *)type);=0A= - if (pix_fmt !=3D avctx->pix_fmt) {=0A= - av_log(avctx, AV_LOG_ERROR, "unsupported input pixel format set\n"= );=0A= - return AVERROR(EINVAL);=0A= + if (avctx->pix_fmt =3D=3D AV_PIX_FMT_D3D11) {=0A= + if (pix_fmt !=3D AV_PIX_FMT_NV12 && pix_fmt !=3D AV_PIX_FMT_D3D11)= {=0A= + av_log(avctx, AV_LOG_ERROR, "unsupported input pixel format se= t\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= + } else {=0A= + if (pix_fmt !=3D avctx->pix_fmt) {=0A= + av_log(avctx, AV_LOG_ERROR, "unsupported input pixel format se= t\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= }=0A= =0A= //ff_MFSetAttributeSize((IMFAttributes *)type, &MF_MT_FRAME_SIZE, avct= x->width, avctx->height);=0A= @@ -1106,18 +1263,6 @@ static int mf_init_encoder(AVCodecContext *avctx)=0A= if ((ret =3D mf_setup_context(avctx)) < 0)=0A= return ret;=0A= =0A= - hr =3D IMFTransform_ProcessMessage(c->mft, MFT_MESSAGE_NOTIFY_BEGIN_ST= REAMING, 0);=0A= - if (FAILED(hr)) {=0A= - av_log(avctx, AV_LOG_ERROR, "could not start streaming (%s)\n", ff= _hr_str(hr));=0A= - return AVERROR_EXTERNAL;=0A= - }=0A= -=0A= - hr =3D IMFTransform_ProcessMessage(c->mft, MFT_MESSAGE_NOTIFY_START_OF= _STREAM, 0);=0A= - if (FAILED(hr)) {=0A= - av_log(avctx, AV_LOG_ERROR, "could not start stream (%s)\n", ff_hr= _str(hr));=0A= - return AVERROR_EXTERNAL;=0A= - }=0A= -=0A= if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER && c->async_events &&= =0A= c->is_video && !avctx->extradata) {=0A= int sleep =3D 10000, total =3D 0;=0A= @@ -1175,6 +1320,7 @@ static int mf_load_library(AVCodecContext *avctx)=0A= =0A= #if !HAVE_UWP=0A= c->library =3D dlopen("mfplat.dll", 0);=0A= + c->d3d_dll =3D dlopen("D3D11.dll", 0);=0A= =0A= if (!c->library) {=0A= av_log(c, AV_LOG_ERROR, "DLL mfplat.dll failed to open\n");=0A= @@ -1187,6 +1333,8 @@ static int mf_load_library(AVCodecContext *avctx)=0A= LOAD_MF_FUNCTION(c, MFCreateAlignedMemoryBuffer);=0A= LOAD_MF_FUNCTION(c, MFCreateSample);=0A= LOAD_MF_FUNCTION(c, MFCreateMediaType);=0A= + LOAD_MF_FUNCTION(c, MFCreateDXGISurfaceBuffer);=0A= + LOAD_MF_FUNCTION(c, MFCreateDXGIDeviceManager);=0A= // MFTEnumEx is missing in Windows Vista's mfplat.dll.=0A= LOAD_MF_FUNCTION(c, MFTEnumEx);=0A= =0A= @@ -1208,6 +1356,7 @@ static int mf_close(AVCodecContext *avctx)=0A= ff_free_mf(&c->functions, &c->mft);=0A= =0A= dlclose(c->library);=0A= + dlclose(c->d3d_dll);=0A= c->library =3D NULL;=0A= #else=0A= ff_free_mf(&c->functions, &c->mft);=0A= @@ -1300,7 +1449,7 @@ static const FFCodecDefault defaults[] =3D {=0A= };=0A= =0A= #define VFMTS \=0A= - CODEC_PIXFMTS(AV_PIX_FMT_NV12, AV_PIX_FMT_YUV420P),=0A= + CODEC_PIXFMTS(AV_PIX_FMT_NV12, AV_PIX_FMT_YUV420P, AV_PIX_FMT_D3D1= 1),=0A= #define VCAPS \=0A= .p.capabilities =3D AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID | = \=0A= AV_CODEC_CAP_DR1,=0A= -- =0A= 2.34.1=0A= =0A= --_002_PN0P287MB149407D6C41F582FE0D0210DE152APN0P287MB1494INDP_ Content-Type: application/octet-stream; name="v5-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch" Content-Description: v5-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch Content-Disposition: attachment; filename="v5-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch"; size=12813; creation-date="Sun, 20 Jul 2025 09:15:31 GMT"; modification-date="Sun, 20 Jul 2025 09:15:40 GMT" Content-Transfer-Encoding: base64 RnJvbSA2N2NhNjE5YzkwOGQ4YjU1Y2MxNDkyZWZjN2UyN2U4ZmM5NTI5ZjkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aHlhbmFyYXlhbmFuQG11 bHRpY29yZXdhcmVpbmMuY29tPgpEYXRlOiBUaHUsIDIyIE1heSAyMDI1IDA1OjM0OjM3IC0wNzAw ClN1YmplY3Q6IFtQQVRDSCB2NSAyLzJdIGF2Y29kZWMvbWZlbmM6IGFkZCBzdXBwb3J0IGZvciBE M0QxMSBpbnB1dCBzdXJmYWNlcwoKQWRkcyBEM0QxMSBpbnB1dCBzdXJmYWNlIHN1cHBvcnQgdG8g dGhlIE1lZGlhRm91bmRhdGlvbiBlbmNvZGVyIChtZmVuYyksCmFsbG93aW5nIGRpcmVjdCBlbmNv ZGluZyBvZiBHUFUgZnJhbWVzIHdpdGhvdXQgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KVGhp cyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSB3aGVuIHVzZWQgYWxvbmdz aWRlIHNjYWxlX2QzZDExLgoKU2lnbmVkLW9mZi1ieTogRGFzaCBTYW50b3NoIDxkYXNoLnNhdGh5 YW5hcmF5YW5hbkBtdWx0aWNvcmV3YXJlaW5jLmNvbT4KLS0tCiBsaWJhdmNvZGVjL21mX3V0aWxz LmggfCAgIDcgKysKIGxpYmF2Y29kZWMvbWZlbmMuYyAgICB8IDIwNyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTg1IGluc2VydGlv bnMoKyksIDI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbWZfdXRpbHMu aCBiL2xpYmF2Y29kZWMvbWZfdXRpbHMuaAppbmRleCBhNTliMzZkMDE1Li5lY2ViYjZmY2RmIDEw MDY0NAotLS0gYS9saWJhdmNvZGVjL21mX3V0aWxzLmgKKysrIGIvbGliYXZjb2RlYy9tZl91dGls cy5oCkBAIC01Myw2ICs1MywxMyBAQCB0eXBlZGVmIHN0cnVjdCBNRkZ1bmN0aW9ucyB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUZNZWRpYUJ1 ZmZlciAqKnBwQnVmZmVyKTsKICAgICBIUkVTVUxUIChXSU5BUEkgKk1GQ3JlYXRlU2FtcGxlKSAo SU1GU2FtcGxlICoqcHBJTUZTYW1wbGUpOwogICAgIEhSRVNVTFQgKFdJTkFQSSAqTUZDcmVhdGVN ZWRpYVR5cGUpIChJTUZNZWRpYVR5cGUgKipwcE1GVHlwZSk7CisgICAgSFJFU1VMVCAoV0lOQVBJ ICpNRkNyZWF0ZURYR0lTdXJmYWNlQnVmZmVyKSAoUkVGSUlEIHJpaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElVbmtub3duKiBwdW5rU3VyZmFjZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVUlOVCB1U3VicmVzb3VyY2VJbmRleCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQk9PTCBmQm90dG9tVXBXaGVuTGluZWFyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJTUZNZWRpYUJ1ZmZlcioqIHBwQnVmZmVyKTsKKyAgICBIUkVT VUxUIChXSU5BUEkgKk1GQ3JlYXRlRFhHSURldmljZU1hbmFnZXIpIChVSU5UKiByZXNldFRva2Vu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1GRFhH SURldmljZU1hbmFnZXIqKiBwcERldmljZU1hbmFnZXIpOwogICAgIC8vIE1GVEVudW1FeCBpcyBt aXNzaW5nIGluIFdpbmRvd3MgVmlzdGEncyBtZnBsYXQuZGxsLgogICAgIEhSRVNVTFQgKFdJTkFQ SSAqTUZURW51bUV4KShHVUlEIGd1aWRDYXRlZ29yeSwgVUlOVDMyIEZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNRlRfUkVHSVNURVJfVFlQRV9JTkZPICpwSW5w dXRUeXBlLApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9tZmVuYy5jIGIvbGliYXZjb2RlYy9tZmVu Yy5jCmluZGV4IGM5ZTIxOTFmZGUuLjkxMjk4NGMzMDYgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMv bWZlbmMuYworKysgYi9saWJhdmNvZGVjL21mZW5jLmMKQEAgLTMxLDEwICszMSwxOCBAQAogI2lu Y2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRl ICJjb21wYXQvdzMyZGxmY24uaCIKKyNpZiBDT05GSUdfRDNEMTFWQQorI2luY2x1ZGUgImxpYmF2 dXRpbC9od2NvbnRleHRfZDNkMTF2YS5oIgorI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IE1GQ29u dGV4dCB7CiAgICAgQVZDbGFzcyAqYXZfY2xhc3M7CiAgICAgSE1PRFVMRSBsaWJyYXJ5OworICAg IEhNT0RVTEUgZDNkX2RsbDsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBkM2RfY29udGV4dDsK KyAgICBJTUZEWEdJRGV2aWNlTWFuYWdlciAqZHhnaU1hbmFnZXI7CisgICAgaW50IHJlc2V0VG9r ZW47CisKICAgICBNRkZ1bmN0aW9ucyBmdW5jdGlvbnM7CiAgICAgQVZGcmFtZSAqZnJhbWU7CiAg ICAgaW50IGlzX3ZpZGVvLCBpc19hdWRpbzsKQEAgLTQ3LDYgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgTUZDb250ZXh0IHsKICAgICBpbnQgb3V0X3N0cmVhbV9wcm92aWRlc19zYW1wbGVzOwogICAg IGludCBkcmFpbmluZywgZHJhaW5pbmdfZG9uZTsKICAgICBpbnQgc2FtcGxlX3NlbnQ7CisgICAg aW50IHN0cmVhbV9zdGFydGVkOwogICAgIGludCBhc3luY19uZWVkX2lucHV0LCBhc3luY19oYXZl X291dHB1dCwgYXN5bmNfbWFya2VyOwogICAgIGludDY0X3QgcmVvcmRlcl9kZWxheTsKICAgICBJ Q29kZWNBUEkgKmNvZGVjX2FwaTsKQEAgLTU1LDYgKzY0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTUZD b250ZXh0IHsKICAgICBpbnQgb3B0X2VuY19xdWFsaXR5OwogICAgIGludCBvcHRfZW5jX3NjZW5h cmlvOwogICAgIGludCBvcHRfZW5jX2h3OworICAgIEFWRDNEMTFWQURldmljZUNvbnRleHQqIGRl dmljZV9od2N0eDsKIH0gTUZDb250ZXh0OwogCiBzdGF0aWMgaW50IG1mX2Nob29zZV9vdXRwdXRf dHlwZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpOwpAQCAtMzAzLDM2ICszMTMsMTE4IEBAIHN0YXRp YyBJTUZTYW1wbGUgKm1mX2FfYXZmcmFtZV90b19zYW1wbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCBjb25zdCBBVkZyYW1lICpmCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAotc3RhdGljIElNRlNh bXBsZSAqbWZfdl9hdmZyYW1lX3RvX3NhbXBsZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0 IEFWRnJhbWUgKmZyYW1lKQorc3RhdGljIGludCBpbml0aWFsaXplX2R4Z2lfbWFuYWdlcihBVkNv ZGVjQ29udGV4dCAqYXZjdHgpCiB7CiAgICAgTUZDb250ZXh0ICpjID0gYXZjdHgtPnByaXZfZGF0 YTsKLSAgICBJTUZTYW1wbGUgKnNhbXBsZTsKLSAgICBJTUZNZWRpYUJ1ZmZlciAqYnVmZmVyOwot ICAgIEJZVEUgKmRhdGE7CisgICAgTUZGdW5jdGlvbnMgKmZ1bmMgPSAmYy0+ZnVuY3Rpb25zOwog ICAgIEhSRVNVTFQgaHI7Ci0gICAgaW50IHJldDsKLSAgICBpbnQgc2l6ZTsKKworICAgIGhyID0g ZnVuYy0+TUZDcmVhdGVEWEdJRGV2aWNlTWFuYWdlcigmYy0+cmVzZXRUb2tlbiwgJmMtPmR4Z2lN YW5hZ2VyKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgRFhHSSBkZXZpY2UgbWFuYWdlcjogJXNcbiIs IGZmX2hyX3N0cihocikpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9 CisKKyAgICBociA9IElNRkRYR0lEZXZpY2VNYW5hZ2VyX1Jlc2V0RGV2aWNlKGMtPmR4Z2lNYW5h Z2VyLCBjLT5kZXZpY2VfaHdjdHgtPmRldmljZSwgYy0+cmVzZXRUb2tlbik7CisgICAgaWYgKEZB SUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gcmVzZXQgZGV2aWNlOiAlc1xuIiwgZmZfaHJfc3RyKGhyKSk7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGhyID0gSU1GVHJhbnNmb3JtX1Byb2Nlc3NN ZXNzYWdlKGMtPm1mdCwgTUZUX01FU1NBR0VfU0VUX0QzRF9NQU5BR0VSLCAoVUxPTkdfUFRSKWMt PmR4Z2lNYW5hZ2VyKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgRDNEIG1hbmFnZXI6ICVzXG4iLCBmZl9o cl9zdHIoaHIpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19kM2QxMV9mcmFtZShBVkNvZGVj Q29udGV4dCAqYXZjdHgsIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBJTUZTYW1wbGUgKipvdXRfc2Ft cGxlKQoreworICAgIE1GQ29udGV4dCAqYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgTUZGdW5j dGlvbnMgKmZ1bmMgPSAmYy0+ZnVuY3Rpb25zOworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFt ZXNfY3R4ID0gTlVMTDsKKyAgICBJRDNEMTFUZXh0dXJlMkQgKmQzZDExX3RleHR1cmUgPSBOVUxM OworICAgIElNRlNhbXBsZSAqc2FtcGxlID0gTlVMTDsKKyAgICBJTUZNZWRpYUJ1ZmZlciAqYnVm ZmVyID0gTlVMTDsKKyAgICBpbnQgc3ViSWR4ID0gMDsKKyAgICBIUkVTVUxUIGhyOworCisgICAg ZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVzQ29udGV4dCopZnJhbWUtPmh3X2ZyYW1lc19jdHgtPmRh dGE7CisgICAgYy0+ZGV2aWNlX2h3Y3R4ID0gKEFWRDNEMTFWQURldmljZUNvbnRleHQqKWZyYW1l c19jdHgtPmRldmljZV9jdHgtPmh3Y3R4OworCisgICAgaWYgKCFjLT5keGdpTWFuYWdlcikgewor ICAgICAgICBociA9IGluaXRpYWxpemVfZHhnaV9tYW5hZ2VyKGF2Y3R4KTsKKyAgICAgICAgaWYg KEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICB9CisgICAgfQorCisgICAgZDNkMTFfdGV4dHVyZSA9IChJRDNEMTFUZXh0dXJlMkQqKWZy YW1lLT5kYXRhWzBdOworICAgIHN1YklkeCA9IChpbnQpKGludHB0cl90KWZyYW1lLT5kYXRhWzFd OworCisgICAgaWYgKCFkM2QxMV90ZXh0dXJlKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiRDNEMTEgdGV4dHVyZSBub3QgZm91bmRcbiIpOworICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGhyID0gZnVuYy0+TUZDcmVhdGVTYW1wbGUo JnNhbXBsZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIE1GIHNhbXBsZTogJXNcbiIsIGZmX2hyX3N0 cihocikpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBo ciA9IGZ1bmMtPk1GQ3JlYXRlRFhHSVN1cmZhY2VCdWZmZXIoJklJRF9JRDNEMTFUZXh0dXJlMkQs IGQzZDExX3RleHR1cmUsIHN1YklkeCwgMCwgJmJ1ZmZlcik7CisgICAgaWYgKEZBSUxFRChocikp IHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRl IERYR0kgc3VyZmFjZSBidWZmZXI6ICVzXG4iLCBmZl9ocl9zdHIoaHIpKTsKKyAgICAgICAgSU1G U2FtcGxlX1JlbGVhc2Uoc2FtcGxlKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgaHIgPSBJTUZTYW1wbGVfQWRkQnVmZmVyKHNhbXBsZSwgYnVmZmVyKTsK KyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBhZGQgYnVmZmVyIHRvIHNhbXBsZTogJXNcbiIsIGZmX2hyX3N0cihocikp OworICAgICAgICBJTUZNZWRpYUJ1ZmZlcl9SZWxlYXNlKGJ1ZmZlcik7CisgICAgICAgIElNRlNh bXBsZV9SZWxlYXNlKHNhbXBsZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwor ICAgIH0KKworICAgIElNRk1lZGlhQnVmZmVyX1JlbGVhc2UoYnVmZmVyKTsKKworICAgICpvdXRf c2FtcGxlID0gc2FtcGxlOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nf c29mdHdhcmVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBBVkZyYW1lICpmcmFt ZSwgSU1GU2FtcGxlICoqb3V0X3NhbXBsZSkKK3sKKyAgICBNRkNvbnRleHQgKmMgPSBhdmN0eC0+ cHJpdl9kYXRhOworICAgIElNRlNhbXBsZSAqc2FtcGxlID0gTlVMTDsKKyAgICBJTUZNZWRpYUJ1 ZmZlciAqYnVmZmVyID0gTlVMTDsKKyAgICBCWVRFICpkYXRhID0gTlVMTDsKKyAgICBIUkVTVUxU IGhyOworICAgIGludCBzaXplLCByZXQ7CiAKICAgICBzaXplID0gYXZfaW1hZ2VfZ2V0X2J1ZmZl cl9zaXplKGF2Y3R4LT5waXhfZm10LCBhdmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQsIDEpOwog ICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOwogCiAgICAgc2FtcGxlID0gZmZfY3JlYXRlX21lbW9yeV9zYW1wbGUo JmMtPmZ1bmN0aW9ucywgTlVMTCwgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjLT5pbl9pbmZvLmNiQWxpZ25tZW50KTsKICAgICBpZiAoIXNhbXBsZSkKLSAgICAg ICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwogCiAgICAg aHIgPSBJTUZTYW1wbGVfR2V0QnVmZmVyQnlJbmRleChzYW1wbGUsIDAsICZidWZmZXIpOwogICAg IGlmIChGQUlMRUQoaHIpKSB7CiAgICAgICAgIElNRlNhbXBsZV9SZWxlYXNlKHNhbXBsZSk7Ci0g ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKICAg ICB9CiAKICAgICBociA9IElNRk1lZGlhQnVmZmVyX0xvY2soYnVmZmVyLCAmZGF0YSwgTlVMTCwg TlVMTCk7CiAgICAgaWYgKEZBSUxFRChocikpIHsKICAgICAgICAgSU1GTWVkaWFCdWZmZXJfUmVs ZWFzZShidWZmZXIpOwogICAgICAgICBJTUZTYW1wbGVfUmVsZWFzZShzYW1wbGUpOwotICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CiAgICAgfQog CiAgICAgcmV0ID0gYXZfaW1hZ2VfY29weV90b19idWZmZXIoKHVpbnQ4X3QgKilkYXRhLCBzaXpl LCAodm9pZCAqKWZyYW1lLT5kYXRhLCBmcmFtZS0+bGluZXNpemUsCkBAIC0zNDIsMTAgKzQzNCw0 MyBAQCBzdGF0aWMgSU1GU2FtcGxlICptZl92X2F2ZnJhbWVfdG9fc2FtcGxlKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgY29uc3QgQVZGcmFtZSAqZgogICAgIElNRk1lZGlhQnVmZmVyX1JlbGVhc2Uo YnVmZmVyKTsKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBJTUZTYW1wbGVfUmVsZWFzZShz YW1wbGUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7CiAgICAgfQogCiAgICAgSU1GU2FtcGxlX1NldFNhbXBsZUR1cmF0aW9uKHNhbXBsZSwg bWZfdG9fbWZfdGltZShhdmN0eCwgZnJhbWUtPmR1cmF0aW9uKSk7CisgICAgKm91dF9zYW1wbGUg PSBzYW1wbGU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIElNRlNhbXBsZSAqbWZfdl9h dmZyYW1lX3RvX3NhbXBsZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0IEFWRnJhbWUgKmZy YW1lKQoreworICAgIE1GQ29udGV4dCAqYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgTUZGdW5j dGlvbnMgKmZ1bmMgPSAmYy0+ZnVuY3Rpb25zOworICAgIElNRlNhbXBsZSAqc2FtcGxlID0gTlVM TDsKKyAgICBJTUZNZWRpYUJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKyAgICBIUkVTVUxUIGhyOwor ICAgIGludCByZXQ7CisKKyAgICBpZiAoZnJhbWUtPmZvcm1hdCA9PSBBVl9QSVhfRk1UX0QzRDEx KSB7CisgICAgICAgIC8vIEhhbmRsZSBEM0QxMSBoYXJkd2FyZSBmcmFtZXMKKyAgICAgICAgcmV0 ID0gcHJvY2Vzc19kM2QxMV9mcmFtZShhdmN0eCwgZnJhbWUsICZzYW1wbGUpOworICAgICAgICBp ZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgeworICAgICAgICAvLyBIYW5kbGUgc29mdHdhcmUgZnJhbWVzCisgICAgICAgIHJldCA9 IHByb2Nlc3Nfc29mdHdhcmVfZnJhbWUoYXZjdHgsIGZyYW1lLCAmc2FtcGxlKTsKKyAgICAgICAg aWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAg fQorCisgICAgLy8gU2V0IHNhbXBsZSBkdXJhdGlvbgorICAgIGhyID0gSU1GU2FtcGxlX1NldFNh bXBsZUR1cmF0aW9uKHNhbXBsZSwgbWZfdG9fbWZfdGltZShhdmN0eCwgZnJhbWUtPmR1cmF0aW9u KSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df V0FSTklORywgIkZhaWxlZCB0byBzZXQgc2FtcGxlIGR1cmF0aW9uOiAlc1xuIiwgZmZfaHJfc3Ry KGhyKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KQEAgLTUxMSw2ICs2MzYsMjMg QEAgc3RhdGljIGludCBtZl9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFW UGFja2V0ICphdnBrdCkKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmKCFjLT5zdHJlYW1fc3Rh cnRlZCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBJTUZUcmFuc2Zvcm1fUHJvY2Vzc01l c3NhZ2UoYy0+bWZ0LCBNRlRfTUVTU0FHRV9OT1RJRllfQkVHSU5fU1RSRUFNSU5HLCAwKTsKKyAg ICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiY291bGQgbm90IHN0YXJ0IHN0cmVhbWluZyAoJXMpXG4iLCBmZl9ocl9zdHIoaHIp KTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVCQURNU0cpOworICAgICAgICB9CisKKyAg ICAgICAgaHIgPSBJTUZUcmFuc2Zvcm1fUHJvY2Vzc01lc3NhZ2UoYy0+bWZ0LCBNRlRfTUVTU0FH RV9OT1RJRllfU1RBUlRfT0ZfU1RSRUFNLCAwKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsK KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY291bGQgbm90IHN0YXJ0 IHN0cmVhbSAoJXMpXG4iLCBmZl9ocl9zdHIoaHIpKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVCQURNU0cpOworICAgICAgICB9CisKKyAgICAgICAgYy0+c3RyZWFtX3N0YXJ0ZWQgPSAx OworICAgIH0KKwogICAgIHJldCA9IG1mX3NlbmRfc2FtcGxlKGF2Y3R4LCBzYW1wbGUpOwogICAg IGlmIChzYW1wbGUpCiAgICAgICAgIElNRlNhbXBsZV9SZWxlYXNlKHNhbXBsZSk7CkBAIC03Mjcs OCArODY5LDE2IEBAIHN0YXRpYyBpbnQgbWZfZW5jdl9vdXRwdXRfYWRqdXN0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgSU1GTWVkaWFUeXBlICp0eXBlKQogc3RhdGljIGludDY0X3QgbWZfZW5jdl9p bnB1dF9zY29yZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIElNRk1lZGlhVHlwZSAqdHlwZSkKIHsK ICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCA9IGZmX21lZGlhX3R5cGVfdG9fcGl4X2Zt dCgoSU1GQXR0cmlidXRlcyAqKXR5cGUpOwotICAgIGlmIChwaXhfZm10ICE9IGF2Y3R4LT5waXhf Zm10KQotICAgICAgICByZXR1cm4gLTE7IC8vIGNhbiBub3QgdXNlCisKKyAgICBpZiAoYXZjdHgt PnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9EM0QxMSkgeworICAgICAgICBpZiAocGl4X2ZtdCAhPSBB Vl9QSVhfRk1UX05WMTIpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsgLy8gY2FuIG5vdCB1c2UK KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHBpeF9mbXQgIT0gYXZj dHgtPnBpeF9mbXQpCisgICAgICAgICAgICByZXR1cm4gLTE7IC8vIGNhbiBub3QgdXNlCisgICAg fQogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC03MzYsOSArODg2LDE2IEBAIHN0YXRpYyBpbnQ2NF90 IG1mX2VuY3ZfaW5wdXRfc2NvcmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBJTUZNZWRpYVR5cGUg KnR5cGUpCiBzdGF0aWMgaW50IG1mX2VuY3ZfaW5wdXRfYWRqdXN0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwgSU1GTWVkaWFUeXBlICp0eXBlKQogewogICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhf Zm10ID0gZmZfbWVkaWFfdHlwZV90b19waXhfZm10KChJTUZBdHRyaWJ1dGVzICopdHlwZSk7Ci0g ICAgaWYgKHBpeF9mbXQgIT0gYXZjdHgtPnBpeF9mbXQpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJ1bnN1cHBvcnRlZCBpbnB1dCBwaXhlbCBmb3JtYXQgc2V0XG4iKTsK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICBpZiAoYXZjdHgtPnBpeF9mbXQg PT0gQVZfUElYX0ZNVF9EM0QxMSkgeworICAgICAgICBpZiAocGl4X2ZtdCAhPSBBVl9QSVhfRk1U X05WMTIgJiYgcGl4X2ZtdCAhPSBBVl9QSVhfRk1UX0QzRDExKSB7CisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgInVuc3VwcG9ydGVkIGlucHV0IHBpeGVsIGZvcm1hdCBz ZXRcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwaXhfZm10ICE9IGF2Y3R4LT5waXhfZm10KSB7Cisg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgInVuc3VwcG9ydGVkIGlucHV0 IHBpeGVsIGZvcm1hdCBzZXRcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vZmZfTUZTZXRBdHRyaWJ1dGVTaXplKChJTUZB dHRyaWJ1dGVzICopdHlwZSwgJk1GX01UX0ZSQU1FX1NJWkUsIGF2Y3R4LT53aWR0aCwgYXZjdHgt PmhlaWdodCk7CkBAIC0xMTA2LDE4ICsxMjYzLDYgQEAgc3RhdGljIGludCBtZl9pbml0X2VuY29k ZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQogICAgIGlmICgocmV0ID0gbWZfc2V0dXBfY29udGV4 dChhdmN0eCkpIDwgMCkKICAgICAgICAgcmV0dXJuIHJldDsKIAotICAgIGhyID0gSU1GVHJhbnNm b3JtX1Byb2Nlc3NNZXNzYWdlKGMtPm1mdCwgTUZUX01FU1NBR0VfTk9USUZZX0JFR0lOX1NUUkVB TUlORywgMCk7Ci0gICAgaWYgKEZBSUxFRChocikpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJjb3VsZCBub3Qgc3RhcnQgc3RyZWFtaW5nICglcylcbiIsIGZmX2hyX3N0 cihocikpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBo ciA9IElNRlRyYW5zZm9ybV9Qcm9jZXNzTWVzc2FnZShjLT5tZnQsIE1GVF9NRVNTQUdFX05PVElG WV9TVEFSVF9PRl9TVFJFQU0sIDApOwotICAgIGlmIChGQUlMRUQoaHIpKSB7Ci0gICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY291bGQgbm90IHN0YXJ0IHN0cmVhbSAoJXMpXG4i LCBmZl9ocl9zdHIoaHIpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAg fQotCiAgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiAm JiBjLT5hc3luY19ldmVudHMgJiYKICAgICAgICAgYy0+aXNfdmlkZW8gJiYgIWF2Y3R4LT5leHRy YWRhdGEpIHsKICAgICAgICAgaW50IHNsZWVwID0gMTAwMDAsIHRvdGFsID0gMDsKQEAgLTExNzUs NiArMTMyMCw3IEBAIHN0YXRpYyBpbnQgbWZfbG9hZF9saWJyYXJ5KEFWQ29kZWNDb250ZXh0ICph dmN0eCkKIAogI2lmICFIQVZFX1VXUAogICAgIGMtPmxpYnJhcnkgPSBkbG9wZW4oIm1mcGxhdC5k bGwiLCAwKTsKKyAgICBjLT5kM2RfZGxsID0gZGxvcGVuKCJEM0QxMS5kbGwiLCAwKTsKIAogICAg IGlmICghYy0+bGlicmFyeSkgewogICAgICAgICBhdl9sb2coYywgQVZfTE9HX0VSUk9SLCAiRExM IG1mcGxhdC5kbGwgZmFpbGVkIHRvIG9wZW5cbiIpOwpAQCAtMTE4Nyw2ICsxMzMzLDggQEAgc3Rh dGljIGludCBtZl9sb2FkX2xpYnJhcnkoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQogICAgIExPQURf TUZfRlVOQ1RJT04oYywgTUZDcmVhdGVBbGlnbmVkTWVtb3J5QnVmZmVyKTsKICAgICBMT0FEX01G X0ZVTkNUSU9OKGMsIE1GQ3JlYXRlU2FtcGxlKTsKICAgICBMT0FEX01GX0ZVTkNUSU9OKGMsIE1G Q3JlYXRlTWVkaWFUeXBlKTsKKyAgICBMT0FEX01GX0ZVTkNUSU9OKGMsIE1GQ3JlYXRlRFhHSVN1 cmZhY2VCdWZmZXIpOworICAgIExPQURfTUZfRlVOQ1RJT04oYywgTUZDcmVhdGVEWEdJRGV2aWNl TWFuYWdlcik7CiAgICAgLy8gTUZURW51bUV4IGlzIG1pc3NpbmcgaW4gV2luZG93cyBWaXN0YSdz IG1mcGxhdC5kbGwuCiAgICAgTE9BRF9NRl9GVU5DVElPTihjLCBNRlRFbnVtRXgpOwogCkBAIC0x MjA4LDYgKzEzNTYsNyBAQCBzdGF0aWMgaW50IG1mX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKICAgICAgICAgZmZfZnJlZV9tZigmYy0+ZnVuY3Rpb25zLCAmYy0+bWZ0KTsKIAogICAgIGRs Y2xvc2UoYy0+bGlicmFyeSk7CisgICAgZGxjbG9zZShjLT5kM2RfZGxsKTsKICAgICBjLT5saWJy YXJ5ID0gTlVMTDsKICNlbHNlCiAgICAgZmZfZnJlZV9tZigmYy0+ZnVuY3Rpb25zLCAmYy0+bWZ0 KTsKQEAgLTEzMDAsNyArMTQ0OSw3IEBAIHN0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCBkZWZh dWx0c1tdID0gewogfTsKIAogI2RlZmluZSBWRk1UUyBcCi0gICAgICAgIENPREVDX1BJWEZNVFMo QVZfUElYX0ZNVF9OVjEyLCBBVl9QSVhfRk1UX1lVVjQyMFApLAorICAgICAgICBDT0RFQ19QSVhG TVRTKEFWX1BJWF9GTVRfTlYxMiwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBBVl9QSVhfRk1UX0QzRDEx KSwKICNkZWZpbmUgVkNBUFMgXAogICAgICAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19D QVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfSFlCUklEIHwgICAgICAgICAgIFwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0RSMSwKLS0gCjIuMzQuMQoK --_002_PN0P287MB149407D6C41F582FE0D0210DE152APN0P287MB1494INDP_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --_002_PN0P287MB149407D6C41F582FE0D0210DE152APN0P287MB1494INDP_--