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 DDB674F9F2 for ; Tue, 24 Jun 2025 07:49:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 1C71868C633; Tue, 24 Jun 2025 10:49:06 +0300 (EEST) Received: from PNYPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11020080.outbound.protection.outlook.com [52.101.225.80]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 9426E687B5B for ; Tue, 24 Jun 2025 10:48:59 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jg8dV/iy5mVpIJn747/RgKqgYknmvM9tZJVT8cKUznJHxauvzADu5IsxngiHA+ufsY4g/Iw1RJz/1a6d6RV40wW2KR1v5BqYA+QLAkQBXlNPgg7YQ1EU01/8X22GrGAw5pTqWv/bmd2taDe+2Xf7IscVx1iaLvfn1hMd+8yKWndcyjCUaGjsDWK3HIL9xqlr21oBBS23eaJNMlXSe9FqSaUGsTVfTDySgZuGAa7PVgkW519MYdYjLCJ2NJm8wSAg65OXFl0qPiksDhc+0brfaMQRUuWPBD1EZHaQTTY97a2b/Tk19TmVA1cZdt55KOdkOSv48F5Yrgd95V4B1SCTRg== 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=YkP/H8Hn35q3vEHTgHtBP6Rwt17mhU6bPxlv59zt3dI=; b=B7qs0AJ8uhYzjepa+1vogADnAdXd3ySaaEbgIYrqOeESNlt8gJexx4pXKXlRocSpASaktHhkiZsS9eMStgvV8C8KOxVRvHXTxAvV1r/mIpWMerPav3jhLRRWQKcsQYkZMkK7KC6R1T4zo+b0VcLdtwFarhcKF5R33Q3/RVoZTqUnBnFv/5mFLyQveCLdlAzT6no9lp/Pp0QP9bSSeM8D7OoY34g0Yzscxg8HPX96qHSJMFhb0bGwVP5VKxtMhcPsNE2KMKSHrihWEiztRLbVjfavK2kwWcXNCHAkOc6yGXqQ+1c3zb1+7wuoMgp0t4Tzim83dPxb2YYp8/j35cPcqA== 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=YkP/H8Hn35q3vEHTgHtBP6Rwt17mhU6bPxlv59zt3dI=; b=z8Df1XHGTicSvYqVjCH+47obXvHSEDqUdyFmPQkQ4lFszriHeTf+bOLZuEQkP/PIbTVrESDcOBlm007Leq8tPs8KMfIkTIsN+5iMnsaat48acVNDbzsfT56PY5y3QF6AJNYl53nV0A9IsARNgaXFvsSscEQCKhnkJq0PDTKM7NR5ZF1MGmWj9k7pWE7J+9I1nVIeymvJ5WmZ63lnDB4bh3RDz1tB4tGz4XEolMPwV6vAW2glZmC/IUabeyKYoWYwKA871mvEzg5FtpQaGNkAfiUM5zcQanNPP08HeWD21PLLVcD0H7pVi9Qn++5bd5Xhwg87Pat5DNUaPZNStlehIw== Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:186::9) by PN3P287MB0971.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:177::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.30; Tue, 24 Jun 2025 07:48:55 +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.8857.026; Tue, 24 Jun 2025 07:48:55 +0000 From: Dash Santosh Sathyanarayanan To: FFmpeg development discussions and patches Thread-Topic: [PATCH v2 2/2] avcodec/mfenc: add support for D3D11 input surfaces Thread-Index: AQHb5NxFrL5gK23HXESrjV+Mvm76oA== Date: Tue, 24 Jun 2025 07:48:55 +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_|PN3P287MB0971:EE_ x-ms-office365-filtering-correlation-id: 3306ed5a-1ae3-4ddf-0056-08ddb2f39223 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|10070799003|4053099003|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?89wjex5yLiJGZMHmuCpdVQYkOE329F+J7MzG1HWxH/r7e6FiAkunFIfvgz?= =?iso-8859-1?Q?8K3KMFWMUjfjZM4uPpsMLI8qIXl2DBTZhSeSd8GwaMqqoB+t3zRawSidqt?= =?iso-8859-1?Q?sfMaGvEzljzEYRZkZmfhPvnAHaLRfMuKXDc9YZEmDjSyyuykDeHs36BSm9?= =?iso-8859-1?Q?HdNeOlnoYb4ALgcCfCC0RYww4rCTyNOnGRG/ogOwlQAuIdGQrqSniKP28o?= =?iso-8859-1?Q?dAaCQpY1nRoRlGJadU4++Aff535BMBT2Jqap5oKXuYEzo0mcyANat/ZuHh?= =?iso-8859-1?Q?5MyLzCIcILj7r30i6u8VvRBg3F1gdm0gW8h53QKbZXRO/xJVq/fhVpYIxx?= =?iso-8859-1?Q?phqcfuy2JN0m72DYPlJt8Wt6rh2MXtNT8fodxnfoMDgKBuPnRZ/FL9i6pi?= =?iso-8859-1?Q?0eRq8PJN4hml0IBgEfwVKjnca1BTkq4ipLc9mNEGOSxbt0FlCNI53UkpHc?= =?iso-8859-1?Q?yr3u/6bClZs22/Ldh195gZpIKnSHkegE1LdrCfVxQMtpZqwHhy2NLznPlL?= =?iso-8859-1?Q?3cEY7V05/MVUB/IGnS3+qOyMQ/qeJDuzqRbfMXKT8tNbt1S9PMlHIuYkC9?= =?iso-8859-1?Q?AP8zxDUwWd+n6O9PW9mhFbrOfhRv1ZkAEVe4i1hxxvf4lXVF7DvBRX5ogx?= =?iso-8859-1?Q?I5rxNYeC6NRXRGXKCvfz+HAeRwLPodsECc3+eQi2FsiBOYNX+bHw67m6Jm?= =?iso-8859-1?Q?sj/LGxtDgPmH8mBk7wxyKLlIEIESym+Y7B5wWTt5jtzND3gZOYpJpoSONM?= =?iso-8859-1?Q?MUhTDh3EmU7K6An64zKi2uwTTjVjbzokkYe5q+hp6pxPC5RsWr41xb4xXq?= =?iso-8859-1?Q?s8UACqitxTUV4BymRL1O8/kYv0of1MtdtZkKUzR99DjzqtJKNi4YV6/dW/?= =?iso-8859-1?Q?+Y6zhKb8mbCB3BPN4MJZrtraYdoKAhwiGebbQi8LlbxtYXU32noGDx/MFZ?= =?iso-8859-1?Q?YQCBSGOTZ1a1RLApoR7ovd90qJI3TPkZ2H6HYXrT2ltrRuV7WthV2BVXQe?= =?iso-8859-1?Q?DQZkycnoCMBRnQaW2fUtC3k8t8OCKNCXoRVvPfKIJj23SfqO45YxS/q764?= =?iso-8859-1?Q?EXNOxgA36NW1j2kbYS6YH4n87CKuKjG63iXKQgFJy5ktineXu4oobbZJmI?= =?iso-8859-1?Q?FfrdHHYJRlpRBwwtPTQ6FdLdLE2OgpF3kmfop2LUc/mO4w2NwsC54so0Ny?= =?iso-8859-1?Q?tBAtCqxeCRjrmMsRFy2xyr1W9nnDtT5puxGqHD51rximQK8OWPayF09KXP?= =?iso-8859-1?Q?oaRe+OaVbNwQLabDZietOtBN7Ll1/cZUuMDEuV7SMrK59U91ldaCktWmIY?= =?iso-8859-1?Q?VoAWMGiaFeTGVM1EIbA1azcwBzcs1FVwzBzK5Dlxwvyo6MDPNJFU5VSPZS?= =?iso-8859-1?Q?Mik3CX3PVFcf4CZM40Da/r9CF2rKhJIC6P5j9tNDJaKg79Kto1harW/YXD?= =?iso-8859-1?Q?6UcNb4vRW62+Q16gmq/JFGyCMqiEHutSo3FTeWHHo9V6V6fuJrziaKha//?= =?iso-8859-1?Q?XFQtYNMdP+CUEg1rIphyhm96d7ENiLEXqDj9h8k9mehM4RU1Y4XpUU9aY7?= =?iso-8859-1?Q?Vp9Paj8=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)(366016)(376014)(10070799003)(4053099003)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?VXvVUGktVOGkKChlsMWX8GZ9kR70q9rLE8383WQb6Ts/f9Ey4OGOJ/BcdH?= =?iso-8859-1?Q?cxOoR0StHsS8/7lqqUftnS6nEAhmvForpYs4Eo/qiPnGCfT7eZPsf/29/d?= =?iso-8859-1?Q?WPYJQsnh4DFh9OvOn6on2SNS3h5AExCppYcFh4IHRIFMeGpIGOEv5F//wI?= =?iso-8859-1?Q?wZzJLnRjMpLFOeStG4Z30Hmh52ebqP2DxuzIIQ1Gzge30rT0uLdjovLtWI?= =?iso-8859-1?Q?wltrfotHcwwNiMlzJReOiarK1gCPQyIjpKrQMtn5MYkPpZicnn/msJGtQq?= =?iso-8859-1?Q?m4w+MXThxyyE2NrNPLRGgXl7p/XLl+sA9xEYgjyciOwIxBe1v8d8fhdyG1?= =?iso-8859-1?Q?CcHqqb22Sma1Uiiyr3I7mrDsfNQD5ekJ8/HHYI24OZkzbjaA9/MynAZhOH?= =?iso-8859-1?Q?8kfTCmn31CZ6jw4L/xLy8eC77NskP7JUGXAWw7QkzGoHILv6FW6ziTuju7?= =?iso-8859-1?Q?wwxHHyuOXjGWFIU+UG/2MjhoX6E6X4a8gfYjcCKHpRW4gExYFgPDw3v8J+?= =?iso-8859-1?Q?goMzh5wxyLlo7EWKdWKQleuqBbuvrmZ/8DVkRjfQ1bnO2zIp4MkS/Kb+NV?= =?iso-8859-1?Q?qO1MljmtARdHepgtS4Ozixvgq5V6MpGdqtHlfVuvVnM0xailU7Lw8C0i2n?= =?iso-8859-1?Q?dujy8aW0slsyLOIeb0NFW/KOcOUmjIe4ftFDp7QKTLulIJ/MHNuMqPr+f3?= =?iso-8859-1?Q?y5XfDfgNSPeuszeocawOlgw4mJ5TnV13ydwsrLIdvADV/heE0sWYKurVUe?= =?iso-8859-1?Q?gnBZPdbODnRQW43e6goXiHuIQ54GqlbElCD/Ken3f3plstKB0ejBMZ2/Ua?= =?iso-8859-1?Q?4btIGBl4P9Pcx7Os4yyz+dhIj2I+VVx9b7oBl5v2z2Cp5JJNvaWyZMmtap?= =?iso-8859-1?Q?npcCKprNYWt03eNCvyLVhZmGyHx+WCyeUHX9wwFJnrv0VM/57pFzz6AZe9?= =?iso-8859-1?Q?iWMhfXgBRPSPOgxAfksHO+iEedGSvwVZGAy5Dly187Qdj3p0z1E4WfMmiR?= =?iso-8859-1?Q?oS96qxHrDlWUqUP2xjJV84BFnTjIvpVaa80vqzHHQEyBkKxnYsm4yzIsMC?= =?iso-8859-1?Q?vFCK1MRwRm+lO7kx7Bn9fznQob0TP5BLO448C1mNCq8at2x3aNvJEkQBfi?= =?iso-8859-1?Q?mwOBAS2PnbsbkgyS5yetteH7qZbA2EFGYUTf2m4L5/b4MOnjuHk3sCvZnf?= =?iso-8859-1?Q?bZsgD39HK3xAIBYFx3VamQflz6xwlHcjLWXBsZcnXT2qfWiPt+zmgTXCoi?= =?iso-8859-1?Q?pKH0dTefVZzCcSLkgB2RTizy1zg1if2V2BXK4WuYBA11iCThskuNCWHKmo?= =?iso-8859-1?Q?kZU0J5bTpYmerj5qf35TLsQbwwCyPIm6lw6SdYkk6jSZXeTRrk/L4yp6uv?= =?iso-8859-1?Q?h3M263LBf54V2faAFzq8bnK8yMaouv0Ht2XxJ3d20DiLFMhLcVA207yFiT?= =?iso-8859-1?Q?i5fKze1ttB/cvSOLMQ0+Tv1MiWBeQL4GzxConpnUlOGB6aFYxozUxeAOv2?= =?iso-8859-1?Q?ez8mFLjtlqG0u4HKGw/tkNVJ030FsJ3RvH5eAwvtr51+DHs+9yEjK6qp6q?= =?iso-8859-1?Q?UWz03FcSuKJbVUM8+KpVMfHp1z0CFDDT+SDv8IGYoWVBpnZ+SioLSDpZVy?= =?iso-8859-1?Q?7Y/llQki30VyjAvwOpgasTL/6NQEJCULx6Z4jTEnfFCDS0v5fCTUYpQdUw?= =?iso-8859-1?Q?slIHcnXN2rMxhNKomQaQZ2FQyCb7bryjgyW5clS6xzg0JO3mq99qlO99BF?= =?iso-8859-1?Q?tc8gufCD9wuxyZoIjeKQRgn34=3D?= Content-Type: multipart/mixed; boundary="_002_PN0P287MB149445C7C426F0FBDF52BDAEE178APN0P287MB1494INDP_" 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: 3306ed5a-1ae3-4ddf-0056-08ddb2f39223 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jun 2025 07:48:55.4634 (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: CqRrKwMza37iF0B2429XruKuH3SGc3vRETZ5xWkcc3lGRd4C9HQJpkzCncWPp43TJ4jz0QkB/TQ3feEnvxX3JHY7HAKO6sCDNZ2ouXHl1Y9soit/P/BKr3wuU9u6BBfUikjMsBUtJt5H08jq5iekpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN3P287MB0971 Subject: [FFmpeg-devel] [PATCH v2 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_PN0P287MB149445C7C426F0FBDF52BDAEE178APN0P287MB1494INDP_ 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_PN0P287MB149445C7C426F0FBDF52BDAEE178APN0P287MB1494INDP_ Content-Type: application/octet-stream; name="v2-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch" Content-Description: v2-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch Content-Disposition: attachment; filename="v2-0002-avcodec-mfenc-add-support-for-D3D11-input-surface.patch"; size=12813; creation-date="Tue, 24 Jun 2025 07:48:23 GMT"; modification-date="Tue, 24 Jun 2025 07:48:23 GMT" Content-Transfer-Encoding: base64 RnJvbSAwZGYzMjdiZjZhZjgyNTJhYjBjOTMxNzE1YTM2MTE0YmYyMWRhMGU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aHlhbmFyYXlhbmFuQG11 bHRpY29yZXdhcmVpbmMuY29tPgpEYXRlOiBUaHUsIDIyIE1heSAyMDI1IDA1OjM0OjM3IC0wNzAw ClN1YmplY3Q6IFtQQVRDSCB2MiAyLzJdIGF2Y29kZWMvbWZlbmM6IGFkZCBzdXBwb3J0IGZvciBE 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_PN0P287MB149445C7C426F0FBDF52BDAEE178APN0P287MB1494INDP_ 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_PN0P287MB149445C7C426F0FBDF52BDAEE178APN0P287MB1494INDP_--