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 4AB984BD3E for ; Thu, 22 May 2025 13:22:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id BA12368C109; Thu, 22 May 2025 16:21:58 +0300 (EEST) Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021100.outbound.protection.outlook.com [40.107.57.100]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 1829A687DC0 for ; Thu, 22 May 2025 16:21:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fPt0Grsxl5mPw662Loc4Df5mHiUh9Bj/yEB3UXNpjoKZk4tgzOJRmSfUGPKd9/KTTEOPJ/KNzxYppmq++WKKsK4YeJ/wtmWTSqk39QT3h6n4+yfx0raGZkbd6x4gxdePdeIpHqN4DpqK9MU5Gf/HAgc8es7t4NBAskFCBhDo8WI4LTDf1EdYBJFgNZQKzD9wEdtswOEtlBNsemoxKRfmJdpGhrz2owv2XdQhdw8aFnZfQwwgCjfbP64OdGxtjGSKqfnZrkjfOPyUAv/aee2LRKKf+1SXuom5/1WBZN7a8+SRZZPn1PWvHIU13kBxHNef8g0Qmv9eqnZ/eV68NF6Wgg== 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=nBK+eRzNLsIYZD4J2jsDus/nG6CFioFMyN3Npfk1Ahk=; b=JGQgeq8sszs+TFEMUc4nvvYYzCqQBcRZ+xSuQXkZzesHll3vyExcW4Kgj/FvM+Ns158Slo061YWQH28ThSG2O3rwjuLk/GW6mZJah+I2HCUZKCvffgidb8BRcK4LtoincQEe0ACyE46iEpNBujdrm/FcqxA84KzBPrI+tOIiEdBnlagPZJeW7zUFW1n70ddlyqCffjImVI325O39FAEKh4ww3wco1zm7tkRiez5hKyxvt34zEoyZViDdonVlqBJa4uIYMZL5/pY2DQVCz+0smTl20fS3LJ2y29NnVLrGVnniyplHC94p2jv9jauAKDLAenfZ/Uh36+LMBCxbG0nQ0w== 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=nBK+eRzNLsIYZD4J2jsDus/nG6CFioFMyN3Npfk1Ahk=; b=Uq53Te6TNqWGxCD3pOCjbWnvZkVlMXYGIBIUfRCfzJB+uawtYmPTmqnzlPTZmrpPYAGUAPLN32q4IOQSE0a036vAfYRCc3QtwOhN7XAQoTIyowCMbmW7NU26OWXUi7Ze15PhM76i4obmMUZBx5dKJ5aBvKPSRZb2MK0dtjA8MsmJxMJFahNiVwzyd7upgFWhI+qUnHdYa/bJwOaWi9JVU246kuY9Xk5OWO1LtXawrWiQWZAToGo2tFIphQTzAW/m9Ch/r3HP/z37p5OaAl4V8nQ1sZ18cndTAarm9N5BDY6FRo88aT4cs7UrKrcCkNv6PR35Kq4NU3wnZ/DZ9YYw0A== Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:186::9) by PN2P287MB0190.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:ed::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Thu, 22 May 2025 13:21:35 +0000 Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM ([fe80::1a78:65d:b254:359]) by PN0P287MB1494.INDP287.PROD.OUTLOOK.COM ([fe80::1a78:65d:b254:359%3]) with mapi id 15.20.8769.019; Thu, 22 May 2025 13:21:34 +0000 From: Dash Santosh Sathyanarayanan To: FFmpeg development discussions and patches Thread-Topic: [PATCH 2/2] avcodec/mfenc: add support for D3D11 input surfaces Thread-Index: AQHbyxw+QTkG14jx5USr62tP9BYQTw== Date: Thu, 22 May 2025 13:21:34 +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_|PN2P287MB0190:EE_ x-ms-office365-filtering-correlation-id: 9e7613ee-9c09-4646-6e20-08dd993392e7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|10070799003|366016|1800799024|376014|38070700018|4053099003; x-microsoft-antispam-message-info: =?iso-8859-1?Q?apJr7WGedp/twU5WC5UJ4nbE1PCXroKAQmFZqr9n/Pa4nAwZGrIso/H9U5?= =?iso-8859-1?Q?+7/ZzGrB3WXXXQDLyatf/pgyWC7xuxm4lrhhWXeGSEaSgeplOIemhH5Dw5?= =?iso-8859-1?Q?wEhaxgkUP8Od6HUevYF0q4q3VNpaT5ItuudfC4gT+dUVRXMAhC/SBcZgPH?= =?iso-8859-1?Q?fBIHJrBi27Ka2BbNtst8q38rvDmGDiiTw9mJZWaUUzE7moH5rZYNp/fwB9?= =?iso-8859-1?Q?cbFgv2Xb2378KstgwZjW5H9IeyhkMolOnWOExoHAhFa4ny4ROjWdkaaOQV?= =?iso-8859-1?Q?8dEiY+MZOpLjmW9NdjhKcerAs6432+1OKkT+u1TcOOr/Z14D/fXjVk5fH4?= =?iso-8859-1?Q?D5SoIaAVBFnRAqMMACK/4buzo9xbf6WpwHeBe1C/PxEaTg6IskYbdxkJ19?= =?iso-8859-1?Q?3GwcoAUqFKBvoootNoNOT/1Me+fIWiMUyjnvPHGMx8wS5e+DOmcg/dVg7d?= =?iso-8859-1?Q?7zJKqZYa4vq2J6ahxV6/uFsnwYyRTbGcb93S7n0p71m7YM7ErnNi1XmmKP?= =?iso-8859-1?Q?PIm9eIc8I1vUIpXP8usxo2tV7LTU4lfeCQmF1HU8llTIla2pmkye93h14Q?= =?iso-8859-1?Q?lS2i8ySiOG40get9sk0Ho6/JKRWm05dRVoH9K1noR5ChLd0XS3u8gV2Qcn?= =?iso-8859-1?Q?ktUxC7+lJolBrmVjZ3f7TEDUTnu0ruQ1ct6Bw4pmWOmseXd/dIdvVvTcTS?= =?iso-8859-1?Q?9ECi/6MVX+UGYV4PRCsBKrsve6N+3xYaPi8tqoh/fKYVkXP9+ITbUero6g?= =?iso-8859-1?Q?xmzRAges5yUjIgvheJqicNaJ2kJmQYvdaaFrKrw6IqH8qj6eINIFLxszMI?= =?iso-8859-1?Q?Zbb+ibi96g/6Anv4anOVEz6QpjIhAGRqlrF/70g+IFnm1BUt/N5Cumgrna?= =?iso-8859-1?Q?WxxCDyJQnRKcNPxK9Oc7su4/ujjiXxv9e0YdNA925Ecc1gYoUkxVxlaiHv?= =?iso-8859-1?Q?3UqaAgYJTas4ubjmKTAMQsXodP7GXPv1XJsPUfP9AohxyHQVQ4e3/lLDcU?= =?iso-8859-1?Q?StSsFWhEIRVOkgtxgXGvmQ7CaQMXYT4BsK3GQpS9DnkphGXfxtPG56cStC?= =?iso-8859-1?Q?rD14wYf9X8FFG03fm2TTyvQetkubZcDZ4eSHjyyTY27R0jfSexEpyWS0/t?= =?iso-8859-1?Q?XTjhW1PGc8lIs3vXuHxazvHUByV9d/PM/RpKUrz6a5cW/9HdiQKYFLtDpt?= =?iso-8859-1?Q?YSBnCwxVoc7yUY5KdiZX0eJRYqvqbVXHe5VsZk/+NzgKVzpIf9Vkz+KCi3?= =?iso-8859-1?Q?GHceVneVAcS3nfOFcSRq0Wo3foiNNWThotX8rJmZlellMr7nvJjTIK1B6u?= =?iso-8859-1?Q?QMEVRnd9biSAFFTeASOzeozg53qGwvvaCsNrGJV2yTEXDcpea/QRnAgyX8?= =?iso-8859-1?Q?MjN1GkU8l7DM9vsT11+TZiENOudn8pdJjvsNBwyVWnwTLwBek6XTEvrfuc?= =?iso-8859-1?Q?GXYEKKiZq/6ZMDAWN4lyuYsb46vaUE2q6DuKpuHM7rmhx7ZlanPkeC/cnw?= =?iso-8859-1?Q?r7lVdIgl5j+uhTRjOc48Mw/XkC6eN73K3O+DMz+8F0HEYBX6Z35/5oOxa4?= =?iso-8859-1?Q?K0fehqM=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)(10070799003)(366016)(1800799024)(376014)(38070700018)(4053099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?LWnXGFq5dQHhHzjsuk2cB7bJZB2CJ9C+xkXJWsPa/L9VN4QuGfL9uK7p+X?= =?iso-8859-1?Q?XilsY3s5h/d0BTpEWnhRGysDJgRZERQZ8lDXArFUNpvmdNdgxf1TDZ57La?= =?iso-8859-1?Q?1POwT4yD4LsesWDRM8BxGU6bul1TDxEeKrfDcIIdDBg/roF8JZmbX0qZ3h?= =?iso-8859-1?Q?Hz6NFqe/F7b7LhxoPHoryrQ0HoyGk+pMG6j929vGuM2cggtwHMy3XqdHOa?= =?iso-8859-1?Q?nIKUTzr9BdTwJNdiD8X8Ns3XlTGcEFqFElpzYYvT1UBVULjjYtCtFe+31c?= =?iso-8859-1?Q?11f1tfW7udqTRye288/jzc081/zEQ9VBa1yS3lvkdlBvRu18QmwiDEeCt1?= =?iso-8859-1?Q?DEQeZ8PDo7ERGku829EkHDcTkyt0bdiaBeX9EmgaJprCXa9KWPuR/xawvH?= =?iso-8859-1?Q?W5zEHlU4YEUQ63ka2Mctfq+xIAPIakYVUUTXuJMhSXNuo03USIVz198Adg?= =?iso-8859-1?Q?n1qVhZnTNoqKPcPjfX68PKKgOA1UQCC7cdx7TStjLEVsOUsdApQB8Dyrzq?= =?iso-8859-1?Q?wqDy+EQDsdf1yHskLl+8Zg6Qig9pyRR112PEcGvWJbdA+sMD6zITeA+ZQp?= =?iso-8859-1?Q?c+/nLyvjt2jNZW9rkD8btRdnIcUHt+s5U5K9I3c0pKN9alJEu+9/y4cXsE?= =?iso-8859-1?Q?JfOKeyBFX3dZNsnSoYeV3USRBjsqTmKDHEkox8vpOU/OxQAgnPhua36y8e?= =?iso-8859-1?Q?wNHbnFdf1cTER5L6iG6SDCXEdqrPKbCk07WFpLng/JWRGwXbXp958i26jV?= =?iso-8859-1?Q?nAIYSU2GZpo5P3ZqNd4Ny+RaeIymxXhFrtQamcEhfEjdnvko7KTDQyNgty?= =?iso-8859-1?Q?6mAUzZ2IP3wZTBNb74uQdKk4vo6WXfdvN37nPtkdOCfwaS7tz/EppcFqxB?= =?iso-8859-1?Q?R6QzFonv1C512AUHvyYbw+1fuAqV/fFf1QLv8CTJwGwfdCr8NhxNOl/ATn?= =?iso-8859-1?Q?GAEZENKa9db5zJKTi4QJVNJO/WYFy0Muu4H3iq7HrwZH6ODGHNXz2XWuxQ?= =?iso-8859-1?Q?4JrPc9ZrO378HqOOhTMMhyfu8pFpywljxQmCF9C/EWT3bAwHBDG+1HOHg0?= =?iso-8859-1?Q?XPnHvL+4oIo/jm0PE0eoND5DMi5Ads31BcJ7/Frb3mG2iA3+PyckXbdb05?= =?iso-8859-1?Q?g632zDIPWk6m9QMt24mRBL7ABvJBEMddJUQUqcOs0cZuIj+oX/gIZVSF24?= =?iso-8859-1?Q?yPSjYX3bhHiZj8f0ZKP/qOG/1eTR/CCndRR3YyAkXeqz1fm5j092Fgt2tW?= =?iso-8859-1?Q?5ITHQPV9vPswkrTzjomyHGtGGc1CuU7sOzAO+cM6yh3GRYzkSOEXgqzFDi?= =?iso-8859-1?Q?Jqf+F94kN9d+3uw7NNSBaazKBZk8x1DJQbJ2xnK+jaO3XC5xmh6KnC4XLS?= =?iso-8859-1?Q?hvC+MmoOevqXxhWD061s05ZunxxNz8M0lhX72HRdbKb37oTyVKzwAqyQkg?= =?iso-8859-1?Q?mL6cIXi6CNRz5hdMwDNBwRGWu1/T8h26hhz21xmFf4pvdiXk7T+84nI3DT?= =?iso-8859-1?Q?6YVDO9rk4l57cwLpJqyIbuhOnZ7J3vtXh6wavcHeiFGjfyIKKSnwbE5W7T?= =?iso-8859-1?Q?9sMGqxSNQURSX3+0G0wKGrOVejSAS/5cWmRJgjUn8mr34G3NW44F6BrL+e?= =?iso-8859-1?Q?dmXtmqMQVc1G+ShcEiuPYUBM/tKyKY085DtDSaiJaI+srtYOp04t1PccU2?= =?iso-8859-1?Q?Uzs3EQ3DudY8ctaj+WgVJM46F/Qv6dDFOPfFhSgrYntfdslbaY6MinGax+?= =?iso-8859-1?Q?DAXq1D/Trf/5lwpzVoEWCXm9Y=3D?= Content-Type: multipart/mixed; boundary="_002_PN0P287MB1494D3E65FC190ED16BEA69FE199APN0P287MB1494INDP_" 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: 9e7613ee-9c09-4646-6e20-08dd993392e7 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 May 2025 13:21:34.3088 (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: jgBZgbhknLHRwcFrzEFTltPrer/TlkxnNUNo3jfoEFs+CbYGWf5Zo5OdYY6WnW33syNZ/mvsAviKVooOlGoO8oiZWxCf7vs3BrWbutL/q6nZ0NvNulTW32ZDquyeCGlih75eoa1l0W8yDftWuh0PUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2P287MB0190 Subject: [FFmpeg-devel] [PATCH 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_PN0P287MB1494D3E65FC190ED16BEA69FE199APN0P287MB1494INDP_ 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= Changelog | 1 +=0A= libavcodec/mf_utils.h | 7 ++=0A= libavcodec/mfenc.c | 204 ++++++++++++++++++++++++++++++++++++------=0A= 3 files changed, 183 insertions(+), 29 deletions(-)=0A= =0A= diff --git a/Changelog b/Changelog=0A= index 68610a63d0..194f09121f 100644=0A= --- a/Changelog=0A= +++ b/Changelog=0A= @@ -19,6 +19,7 @@ version :=0A= - VVC decoder supports all content of SCC (Screen Content Coding):=0A= IBC (Inter Block Copy), Palette Mode and ACT (Adaptive Color Transform= =0A= - vf_scale_d3d11 filter=0A= +- mfenc supports d3d11 input surfaces=0A= =0A= =0A= version 7.1:=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..7ddf918c9a 100644=0A= --- a/libavcodec/mfenc.c=0A= +++ b/libavcodec/mfenc.c=0A= @@ -31,10 +31,17 @@=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= + IMFDXGIDeviceManager *dxgiManager;=0A= + int resetToken;=0A= +=0A= MFFunctions functions;=0A= AVFrame *frame;=0A= int is_video, is_audio;=0A= @@ -47,6 +54,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 +63,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 +312,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 +433,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 +635,22 @@ static int mf_receive_packet(AVCodecContext *avctx, AV= Packet *avpkt)=0A= }=0A= }=0A= =0A= + if (!c->stream_started) {=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 +867,15 @@ 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= + } else {=0A= + if (pix_fmt !=3D avctx->pix_fmt)=0A= + return -1; // can not use=0A= + }=0A= =0A= return 0;=0A= }=0A= @@ -736,9 +883,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 +1260,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 +1317,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 +1330,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 +1353,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 +1446,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_PN0P287MB1494D3E65FC190ED16BEA69FE199APN0P287MB1494INDP_ Content-Type: application/octet-stream; name="0002-avcodec-mfenc-add-support-for-D3D11-input-surfaces.patch" Content-Description: 0002-avcodec-mfenc-add-support-for-D3D11-input-surfaces.patch Content-Disposition: attachment; filename="0002-avcodec-mfenc-add-support-for-D3D11-input-surfaces.patch"; size=13081; creation-date="Thu, 22 May 2025 13:21:02 GMT"; modification-date="Thu, 22 May 2025 13:21:02 GMT" Content-Transfer-Encoding: base64 RnJvbSBhYTY1YzM3ZTFmMjg3YjY5ZjU2NTJmYTk5YWU2ZmE4MWZlOTQxYTE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aHlhbmFyYXlhbmFuQG11 bHRpY29yZXdhcmVpbmMuY29tPgpEYXRlOiBUaHUsIDIyIE1heSAyMDI1IDA1OjM0OjM3IC0wNzAw ClN1YmplY3Q6IFtQQVRDSCAyLzJdIGF2Y29kZWMvbWZlbmM6IGFkZCBzdXBwb3J0IGZvciBEM0Qx MSBpbnB1dCBzdXJmYWNlcwoKQWRkcyBEM0QxMSBpbnB1dCBzdXJmYWNlIHN1cHBvcnQgdG8gdGhl IE1lZGlhRm91bmRhdGlvbiBlbmNvZGVyIChtZmVuYyksCmFsbG93aW5nIGRpcmVjdCBlbmNvZGlu ZyBvZiBHUFUgZnJhbWVzIHdpdGhvdXQgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KVGhpcyBp bXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSB3aGVuIHVzZWQgYWxvbmdzaWRl IHNjYWxlX2QzZDExLgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICB8ICAgMSArCiBsaWJhdmNv ZGVjL21mX3V0aWxzLmggfCAgIDcgKysKIGxpYmF2Y29kZWMvbWZlbmMuYyAgICB8IDIwNCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwg MTgzIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0NoYW5nZWxv ZyBiL0NoYW5nZWxvZwppbmRleCA2ODYxMGE2M2QwLi4xOTRmMDkxMjFmIDEwMDY0NAotLS0gYS9D aGFuZ2Vsb2cKKysrIGIvQ2hhbmdlbG9nCkBAIC0xOSw2ICsxOSw3IEBAIHZlcnNpb24gPG5leHQ+ OgogLSBWVkMgZGVjb2RlciBzdXBwb3J0cyBhbGwgY29udGVudCBvZiBTQ0MgKFNjcmVlbiBDb250 ZW50IENvZGluZyk6CiAgIElCQyAoSW50ZXIgQmxvY2sgQ29weSksIFBhbGV0dGUgTW9kZSBhbmQg QUNUIChBZGFwdGl2ZSBDb2xvciBUcmFuc2Zvcm0KIC0gdmZfc2NhbGVfZDNkMTEgZmlsdGVyCist IG1mZW5jIHN1cHBvcnRzIGQzZDExIGlucHV0IHN1cmZhY2VzCiAKIAogdmVyc2lvbiA3LjE6CmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL21mX3V0aWxzLmggYi9saWJhdmNvZGVjL21mX3V0aWxzLmgK aW5kZXggYTU5YjM2ZDAxNS4uZWNlYmI2ZmNkZiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9tZl91 dGlscy5oCisrKyBiL2xpYmF2Y29kZWMvbWZfdXRpbHMuaApAQCAtNTMsNiArNTMsMTMgQEAgdHlw ZWRlZiBzdHJ1Y3QgTUZGdW5jdGlvbnMgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSU1GTWVkaWFCdWZmZXIgKipwcEJ1ZmZlcik7CiAgICAgSFJF U1VMVCAoV0lOQVBJICpNRkNyZWF0ZVNhbXBsZSkgKElNRlNhbXBsZSAqKnBwSU1GU2FtcGxlKTsK ICAgICBIUkVTVUxUIChXSU5BUEkgKk1GQ3JlYXRlTWVkaWFUeXBlKSAoSU1GTWVkaWFUeXBlICoq cHBNRlR5cGUpOworICAgIEhSRVNVTFQgKFdJTkFQSSAqTUZDcmVhdGVEWEdJU3VyZmFjZUJ1ZmZl cikgKFJFRklJRCByaWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93 biogcHVua1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgdVN1 YnJlc291cmNlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZkJv dHRvbVVwV2hlbkxpbmVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1GTWVk aWFCdWZmZXIqKiBwcEJ1ZmZlcik7CisgICAgSFJFU1VMVCAoV0lOQVBJICpNRkNyZWF0ZURYR0lE ZXZpY2VNYW5hZ2VyKSAoVUlOVCogcmVzZXRUb2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElNRkRYR0lEZXZpY2VNYW5hZ2VyKiogcHBEZXZpY2VN YW5hZ2VyKTsKICAgICAvLyBNRlRFbnVtRXggaXMgbWlzc2luZyBpbiBXaW5kb3dzIFZpc3RhJ3Mg bWZwbGF0LmRsbC4KICAgICBIUkVTVUxUIChXSU5BUEkgKk1GVEVudW1FeCkoR1VJRCBndWlkQ2F0 ZWdvcnksIFVJTlQzMiBGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgTUZUX1JFR0lTVEVSX1RZUEVfSU5GTyAqcElucHV0VHlwZSwKZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvbWZlbmMuYyBiL2xpYmF2Y29kZWMvbWZlbmMuYwppbmRleCBjOWUyMTkxZmRlLi43ZGRm OTE4YzlhIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL21mZW5jLmMKKysrIGIvbGliYXZjb2RlYy9t ZmVuYy5jCkBAIC0zMSwxMCArMzEsMTcgQEAKICNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgog I2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiY29tcGF0L3czMmRsZmNuLmgiCisjaWYg Q09ORklHX0QzRDExVkEKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDExdmEuaCIK KyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBNRkNvbnRleHQgewogICAgIEFWQ2xhc3MgKmF2X2Ns YXNzOwogICAgIEhNT0RVTEUgbGlicmFyeTsKKyAgICBITU9EVUxFIGQzZF9kbGw7CisgICAgSU1G RFhHSURldmljZU1hbmFnZXIgKmR4Z2lNYW5hZ2VyOworICAgIGludCByZXNldFRva2VuOworCiAg ICAgTUZGdW5jdGlvbnMgZnVuY3Rpb25zOwogICAgIEFWRnJhbWUgKmZyYW1lOwogICAgIGludCBp c192aWRlbywgaXNfYXVkaW87CkBAIC00Nyw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IE1GQ29u dGV4dCB7CiAgICAgaW50IG91dF9zdHJlYW1fcHJvdmlkZXNfc2FtcGxlczsKICAgICBpbnQgZHJh aW5pbmcsIGRyYWluaW5nX2RvbmU7CiAgICAgaW50IHNhbXBsZV9zZW50OworICAgIGludCBzdHJl YW1fc3RhcnRlZDsKICAgICBpbnQgYXN5bmNfbmVlZF9pbnB1dCwgYXN5bmNfaGF2ZV9vdXRwdXQs IGFzeW5jX21hcmtlcjsKICAgICBpbnQ2NF90IHJlb3JkZXJfZGVsYXk7CiAgICAgSUNvZGVjQVBJ ICpjb2RlY19hcGk7CkBAIC01NSw2ICs2Myw3IEBAIHR5cGVkZWYgc3RydWN0IE1GQ29udGV4dCB7 CiAgICAgaW50IG9wdF9lbmNfcXVhbGl0eTsKICAgICBpbnQgb3B0X2VuY19zY2VuYXJpbzsKICAg ICBpbnQgb3B0X2VuY19odzsKKyAgICBBVkQzRDExVkFEZXZpY2VDb250ZXh0KiBkZXZpY2VfaHdj dHg7CiB9IE1GQ29udGV4dDsKIAogc3RhdGljIGludCBtZl9jaG9vc2Vfb3V0cHV0X3R5cGUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4KTsKQEAgLTMwMywzNiArMzEyLDExOCBAQCBzdGF0aWMgSU1GU2Ft cGxlICptZl9hX2F2ZnJhbWVfdG9fc2FtcGxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3Qg QVZGcmFtZSAqZgogICAgIHJldHVybiBzYW1wbGU7CiB9CiAKLXN0YXRpYyBJTUZTYW1wbGUgKm1m X3ZfYXZmcmFtZV90b19zYW1wbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBBVkZyYW1l ICpmcmFtZSkKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV9keGdpX21hbmFnZXIoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KQogewogICAgIE1GQ29udGV4dCAqYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAg SU1GU2FtcGxlICpzYW1wbGU7Ci0gICAgSU1GTWVkaWFCdWZmZXIgKmJ1ZmZlcjsKLSAgICBCWVRF ICpkYXRhOworICAgIE1GRnVuY3Rpb25zICpmdW5jID0gJmMtPmZ1bmN0aW9uczsKICAgICBIUkVT VUxUIGhyOwotICAgIGludCByZXQ7Ci0gICAgaW50IHNpemU7CisKKyAgICBociA9IGZ1bmMtPk1G Q3JlYXRlRFhHSURldmljZU1hbmFnZXIoJmMtPnJlc2V0VG9rZW4sICZjLT5keGdpTWFuYWdlcik7 CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gY3JlYXRlIERYR0kgZGV2aWNlIG1hbmFnZXI6ICVzXG4iLCBmZl9ocl9z dHIoaHIpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAg aHIgPSBJTUZEWEdJRGV2aWNlTWFuYWdlcl9SZXNldERldmljZShjLT5keGdpTWFuYWdlciwgYy0+ ZGV2aWNlX2h3Y3R4LT5kZXZpY2UsIGMtPnJlc2V0VG9rZW4pOworICAgIGlmIChGQUlMRUQoaHIp KSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHJlc2V0 IGRldmljZTogJXNcbiIsIGZmX2hyX3N0cihocikpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICB9CisKKyAgICBociA9IElNRlRyYW5zZm9ybV9Qcm9jZXNzTWVzc2FnZShj LT5tZnQsIE1GVF9NRVNTQUdFX1NFVF9EM0RfTUFOQUdFUiwgKFVMT05HX1BUUiljLT5keGdpTWFu YWdlcik7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IEQzRCBtYW5hZ2VyOiAlc1xuIiwgZmZfaHJfc3RyKGhy KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZDNkMTFfZnJhbWUoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBjb25zdCBBVkZyYW1lICpmcmFtZSwgSU1GU2FtcGxlICoqb3V0X3NhbXBsZSkKK3sK KyAgICBNRkNvbnRleHQgKmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIE1GRnVuY3Rpb25zICpm dW5jID0gJmMtPmZ1bmN0aW9uczsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzX2N0eCA9 IE5VTEw7CisgICAgSUQzRDExVGV4dHVyZTJEICpkM2QxMV90ZXh0dXJlID0gTlVMTDsKKyAgICBJ TUZTYW1wbGUgKnNhbXBsZSA9IE5VTEw7CisgICAgSU1GTWVkaWFCdWZmZXIgKmJ1ZmZlciA9IE5V TEw7CisgICAgaW50IHN1YklkeCA9IDA7CisgICAgSFJFU1VMVCBocjsKKworICAgIGZyYW1lc19j dHggPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWZyYW1lLT5od19mcmFtZXNfY3R4LT5kYXRhOworICAg IGMtPmRldmljZV9od2N0eCA9IChBVkQzRDExVkFEZXZpY2VDb250ZXh0KilmcmFtZXNfY3R4LT5k ZXZpY2VfY3R4LT5od2N0eDsKKworICAgIGlmICghYy0+ZHhnaU1hbmFnZXIpIHsKKyAgICAgICAg aHIgPSBpbml0aWFsaXplX2R4Z2lfbWFuYWdlcihhdmN0eCk7CisgICAgICAgIGlmIChGQUlMRUQo aHIpKSB7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgfQor ICAgIH0KKworICAgIGQzZDExX3RleHR1cmUgPSAoSUQzRDExVGV4dHVyZTJEKilmcmFtZS0+ZGF0 YVswXTsKKyAgICBzdWJJZHggPSAoaW50KShpbnRwdHJfdClmcmFtZS0+ZGF0YVsxXTsKKworICAg IGlmICghZDNkMTFfdGV4dHVyZSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkQzRDExIHRleHR1cmUgbm90IGZvdW5kXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKyAgICB9CisKKyAgICBociA9IGZ1bmMtPk1GQ3JlYXRlU2FtcGxlKCZzYW1wbGUp OworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBNRiBzYW1wbGU6ICVzXG4iLCBmZl9ocl9zdHIoaHIpKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgaHIgPSBmdW5j LT5NRkNyZWF0ZURYR0lTdXJmYWNlQnVmZmVyKCZJSURfSUQzRDExVGV4dHVyZTJELCBkM2QxMV90 ZXh0dXJlLCBzdWJJZHgsIDAsICZidWZmZXIpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBEWEdJIHN1 cmZhY2UgYnVmZmVyOiAlc1xuIiwgZmZfaHJfc3RyKGhyKSk7CisgICAgICAgIElNRlNhbXBsZV9S ZWxlYXNlKHNhbXBsZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0K KworICAgIGhyID0gSU1GU2FtcGxlX0FkZEJ1ZmZlcihzYW1wbGUsIGJ1ZmZlcik7CisgICAgaWYg KEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gYWRkIGJ1ZmZlciB0byBzYW1wbGU6ICVzXG4iLCBmZl9ocl9zdHIoaHIpKTsKKyAgICAg ICAgSU1GTWVkaWFCdWZmZXJfUmVsZWFzZShidWZmZXIpOworICAgICAgICBJTUZTYW1wbGVfUmVs ZWFzZShzYW1wbGUpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisK KyAgICBJTUZNZWRpYUJ1ZmZlcl9SZWxlYXNlKGJ1ZmZlcik7CisKKyAgICAqb3V0X3NhbXBsZSA9 IHNhbXBsZTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3NvZnR3YXJl X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgQVZGcmFtZSAqZnJhbWUsIElNRlNh bXBsZSAqKm91dF9zYW1wbGUpCit7CisgICAgTUZDb250ZXh0ICpjID0gYXZjdHgtPnByaXZfZGF0 YTsKKyAgICBJTUZTYW1wbGUgKnNhbXBsZSA9IE5VTEw7CisgICAgSU1GTWVkaWFCdWZmZXIgKmJ1 ZmZlciA9IE5VTEw7CisgICAgQllURSAqZGF0YSA9IE5VTEw7CisgICAgSFJFU1VMVCBocjsKKyAg ICBpbnQgc2l6ZSwgcmV0OwogCiAgICAgc2l6ZSA9IGF2X2ltYWdlX2dldF9idWZmZXJfc2l6ZShh dmN0eC0+cGl4X2ZtdCwgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCAxKTsKICAgICBpZiAo c2l6ZSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKIAogICAgIHNhbXBsZSA9IGZmX2NyZWF0ZV9tZW1vcnlfc2FtcGxlKCZjLT5mdW5j dGlvbnMsIE5VTEwsIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Yy0+aW5faW5mby5jYkFsaWdubWVudCk7CiAgICAgaWYgKCFzYW1wbGUpCi0gICAgICAgIHJldHVy biBOVUxMOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKIAogICAgIGhyID0gSU1G U2FtcGxlX0dldEJ1ZmZlckJ5SW5kZXgoc2FtcGxlLCAwLCAmYnVmZmVyKTsKICAgICBpZiAoRkFJ TEVEKGhyKSkgewogICAgICAgICBJTUZTYW1wbGVfUmVsZWFzZShzYW1wbGUpOwotICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CiAgICAgfQogCiAg ICAgaHIgPSBJTUZNZWRpYUJ1ZmZlcl9Mb2NrKGJ1ZmZlciwgJmRhdGEsIE5VTEwsIE5VTEwpOwog ICAgIGlmIChGQUlMRUQoaHIpKSB7CiAgICAgICAgIElNRk1lZGlhQnVmZmVyX1JlbGVhc2UoYnVm ZmVyKTsKICAgICAgICAgSU1GU2FtcGxlX1JlbGVhc2Uoc2FtcGxlKTsKLSAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwogICAgIH0KIAogICAgIHJl dCA9IGF2X2ltYWdlX2NvcHlfdG9fYnVmZmVyKCh1aW50OF90ICopZGF0YSwgc2l6ZSwgKHZvaWQg KilmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLApAQCAtMzQyLDEwICs0MzMsNDMgQEAgc3Rh dGljIElNRlNhbXBsZSAqbWZfdl9hdmZyYW1lX3RvX3NhbXBsZShBVkNvZGVjQ29udGV4dCAqYXZj dHgsIGNvbnN0IEFWRnJhbWUgKmYKICAgICBJTUZNZWRpYUJ1ZmZlcl9SZWxlYXNlKGJ1ZmZlcik7 CiAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgSU1GU2FtcGxlX1JlbGVhc2Uoc2FtcGxlKTsK LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwog ICAgIH0KIAogICAgIElNRlNhbXBsZV9TZXRTYW1wbGVEdXJhdGlvbihzYW1wbGUsIG1mX3RvX21m X3RpbWUoYXZjdHgsIGZyYW1lLT5kdXJhdGlvbikpOworICAgICpvdXRfc2FtcGxlID0gc2FtcGxl OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBJTUZTYW1wbGUgKm1mX3ZfYXZmcmFtZV90 b19zYW1wbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBBVkZyYW1lICpmcmFtZSkKK3sK KyAgICBNRkNvbnRleHQgKmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIE1GRnVuY3Rpb25zICpm dW5jID0gJmMtPmZ1bmN0aW9uczsKKyAgICBJTUZTYW1wbGUgKnNhbXBsZSA9IE5VTEw7CisgICAg SU1GTWVkaWFCdWZmZXIgKmJ1ZmZlciA9IE5VTEw7CisgICAgSFJFU1VMVCBocjsKKyAgICBpbnQg cmV0OworCisgICAgaWYgKGZyYW1lLT5mb3JtYXQgPT0gQVZfUElYX0ZNVF9EM0QxMSkgeworICAg ICAgICAvLyBIYW5kbGUgRDNEMTEgaGFyZHdhcmUgZnJhbWVzCisgICAgICAgIHJldCA9IHByb2Nl c3NfZDNkMTFfZnJhbWUoYXZjdHgsIGZyYW1lLCAmc2FtcGxlKTsKKyAgICAgICAgaWYgKHJldCA8 IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsK KyAgICAgICAgLy8gSGFuZGxlIHNvZnR3YXJlIGZyYW1lcworICAgICAgICByZXQgPSBwcm9jZXNz X3NvZnR3YXJlX2ZyYW1lKGF2Y3R4LCBmcmFtZSwgJnNhbXBsZSk7CisgICAgICAgIGlmIChyZXQg PCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAg IC8vIFNldCBzYW1wbGUgZHVyYXRpb24KKyAgICBociA9IElNRlNhbXBsZV9TZXRTYW1wbGVEdXJh dGlvbihzYW1wbGUsIG1mX3RvX21mX3RpbWUoYXZjdHgsIGZyYW1lLT5kdXJhdGlvbikpOworICAg IGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcs ICJGYWlsZWQgdG8gc2V0IHNhbXBsZSBkdXJhdGlvbjogJXNcbiIsIGZmX2hyX3N0cihocikpOwor ICAgIH0KIAogICAgIHJldHVybiBzYW1wbGU7CiB9CkBAIC01MTEsNiArNjM1LDIyIEBAIHN0YXRp YyBpbnQgbWZfcmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldCAq YXZwa3QpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWMtPnN0cmVhbV9zdGFydGVkKSB7 CisgICAgICAgIEhSRVNVTFQgaHIgPSBJTUZUcmFuc2Zvcm1fUHJvY2Vzc01lc3NhZ2UoYy0+bWZ0 LCBNRlRfTUVTU0FHRV9OT1RJRllfQkVHSU5fU1RSRUFNSU5HLCAwKTsKKyAgICAgICAgaWYgKEZB SUxFRChocikpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY291 bGQgbm90IHN0YXJ0IHN0cmVhbWluZyAoJXMpXG4iLCBmZl9ocl9zdHIoaHIpKTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVCQURNU0cpOworICAgICAgICB9CisKKyAgICAgICAgaHIgPSBJ TUZUcmFuc2Zvcm1fUHJvY2Vzc01lc3NhZ2UoYy0+bWZ0LCBNRlRfTUVTU0FHRV9OT1RJRllfU1RB UlRfT0ZfU1RSRUFNLCAwKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY291bGQgbm90IHN0YXJ0IHN0cmVhbSAoJXMp XG4iLCBmZl9ocl9zdHIoaHIpKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVCQURNU0cp OworICAgICAgICB9CisKKyAgICAgICAgYy0+c3RyZWFtX3N0YXJ0ZWQgPSAxOworICAgIH0KKwog ICAgIHJldCA9IG1mX3NlbmRfc2FtcGxlKGF2Y3R4LCBzYW1wbGUpOwogICAgIGlmIChzYW1wbGUp CiAgICAgICAgIElNRlNhbXBsZV9SZWxlYXNlKHNhbXBsZSk7CkBAIC03MjcsOCArODY3LDE1IEBA IHN0YXRpYyBpbnQgbWZfZW5jdl9vdXRwdXRfYWRqdXN0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwg SU1GTWVkaWFUeXBlICp0eXBlKQogc3RhdGljIGludDY0X3QgbWZfZW5jdl9pbnB1dF9zY29yZShB VkNvZGVjQ29udGV4dCAqYXZjdHgsIElNRk1lZGlhVHlwZSAqdHlwZSkKIHsKICAgICBlbnVtIEFW UGl4ZWxGb3JtYXQgcGl4X2ZtdCA9IGZmX21lZGlhX3R5cGVfdG9fcGl4X2ZtdCgoSU1GQXR0cmli dXRlcyAqKXR5cGUpOwotICAgIGlmIChwaXhfZm10ICE9IGF2Y3R4LT5waXhfZm10KQotICAgICAg ICByZXR1cm4gLTE7IC8vIGNhbiBub3QgdXNlCisKKyAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0g QVZfUElYX0ZNVF9EM0QxMSkgeworICAgICAgICBpZiAocGl4X2ZtdCAhPSBBVl9QSVhfRk1UX05W MTIpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsgLy8gY2FuIG5vdCB1c2UKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwaXhfZm10ICE9IGF2Y3R4LT5waXhfZm10KQorICAg ICAgICAgICAgcmV0dXJuIC0xOyAvLyBjYW4gbm90IHVzZQorICAgIH0KIAogICAgIHJldHVybiAw OwogfQpAQCAtNzM2LDkgKzg4MywxNiBAQCBzdGF0aWMgaW50NjRfdCBtZl9lbmN2X2lucHV0X3Nj b3JlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgSU1GTWVkaWFUeXBlICp0eXBlKQogc3RhdGljIGlu dCBtZl9lbmN2X2lucHV0X2FkanVzdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIElNRk1lZGlhVHlw ZSAqdHlwZSkKIHsKICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCA9IGZmX21lZGlhX3R5 cGVfdG9fcGl4X2ZtdCgoSU1GQXR0cmlidXRlcyAqKXR5cGUpOwotICAgIGlmIChwaXhfZm10ICE9 IGF2Y3R4LT5waXhfZm10KSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi dW5zdXBwb3J0ZWQgaW5wdXQgcGl4ZWwgZm9ybWF0IHNldFxuIik7Ci0gICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7CisgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfRDNE MTEpIHsKKyAgICAgICAgaWYgKHBpeF9mbXQgIT0gQVZfUElYX0ZNVF9OVjEyICYmIHBpeF9mbXQg IT0gQVZfUElYX0ZNVF9EM0QxMSkgeworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJ1bnN1cHBvcnRlZCBpbnB1dCBwaXhlbCBmb3JtYXQgc2V0XG4iKTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgICBpZiAocGl4X2ZtdCAhPSBhdmN0eC0+cGl4X2ZtdCkgeworICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJ1bnN1cHBvcnRlZCBpbnB1dCBwaXhlbCBmb3JtYXQgc2V0 XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KICAg ICB9CiAKICAgICAvL2ZmX01GU2V0QXR0cmlidXRlU2l6ZSgoSU1GQXR0cmlidXRlcyAqKXR5cGUs ICZNRl9NVF9GUkFNRV9TSVpFLCBhdmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQpOwpAQCAtMTEw NiwxOCArMTI2MCw2IEBAIHN0YXRpYyBpbnQgbWZfaW5pdF9lbmNvZGVyKEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKICAgICBpZiAoKHJldCA9IG1mX3NldHVwX2NvbnRleHQoYXZjdHgpKSA8IDApCiAg ICAgICAgIHJldHVybiByZXQ7CiAKLSAgICBociA9IElNRlRyYW5zZm9ybV9Qcm9jZXNzTWVzc2Fn ZShjLT5tZnQsIE1GVF9NRVNTQUdFX05PVElGWV9CRUdJTl9TVFJFQU1JTkcsIDApOwotICAgIGlm IChGQUlMRUQoaHIpKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY291 bGQgbm90IHN0YXJ0IHN0cmVhbWluZyAoJXMpXG4iLCBmZl9ocl9zdHIoaHIpKTsKLSAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgaHIgPSBJTUZUcmFuc2Zvcm1f UHJvY2Vzc01lc3NhZ2UoYy0+bWZ0LCBNRlRfTUVTU0FHRV9OT1RJRllfU1RBUlRfT0ZfU1RSRUFN LCAwKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgImNvdWxkIG5vdCBzdGFydCBzdHJlYW0gKCVzKVxuIiwgZmZfaHJfc3RyKGhyKSk7 Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQogICAgIGlmIChhdmN0 eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIgJiYgYy0+YXN5bmNfZXZlbnRz ICYmCiAgICAgICAgIGMtPmlzX3ZpZGVvICYmICFhdmN0eC0+ZXh0cmFkYXRhKSB7CiAgICAgICAg IGludCBzbGVlcCA9IDEwMDAwLCB0b3RhbCA9IDA7CkBAIC0xMTc1LDYgKzEzMTcsNyBAQCBzdGF0 aWMgaW50IG1mX2xvYWRfbGlicmFyeShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCiAKICNpZiAhSEFW RV9VV1AKICAgICBjLT5saWJyYXJ5ID0gZGxvcGVuKCJtZnBsYXQuZGxsIiwgMCk7CisgICAgYy0+ ZDNkX2RsbCA9IGRsb3BlbigiRDNEMTEuZGxsIiwgMCk7CiAKICAgICBpZiAoIWMtPmxpYnJhcnkp IHsKICAgICAgICAgYXZfbG9nKGMsIEFWX0xPR19FUlJPUiwgIkRMTCBtZnBsYXQuZGxsIGZhaWxl ZCB0byBvcGVuXG4iKTsKQEAgLTExODcsNiArMTMzMCw4IEBAIHN0YXRpYyBpbnQgbWZfbG9hZF9s aWJyYXJ5KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKICAgICBMT0FEX01GX0ZVTkNUSU9OKGMsIE1G Q3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlcik7CiAgICAgTE9BRF9NRl9GVU5DVElPTihjLCBNRkNy ZWF0ZVNhbXBsZSk7CiAgICAgTE9BRF9NRl9GVU5DVElPTihjLCBNRkNyZWF0ZU1lZGlhVHlwZSk7 CisgICAgTE9BRF9NRl9GVU5DVElPTihjLCBNRkNyZWF0ZURYR0lTdXJmYWNlQnVmZmVyKTsKKyAg ICBMT0FEX01GX0ZVTkNUSU9OKGMsIE1GQ3JlYXRlRFhHSURldmljZU1hbmFnZXIpOwogICAgIC8v IE1GVEVudW1FeCBpcyBtaXNzaW5nIGluIFdpbmRvd3MgVmlzdGEncyBtZnBsYXQuZGxsLgogICAg IExPQURfTUZfRlVOQ1RJT04oYywgTUZURW51bUV4KTsKIApAQCAtMTIwOCw2ICsxMzUzLDcgQEAg c3RhdGljIGludCBtZl9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCiAgICAgICAgIGZmX2Zy ZWVfbWYoJmMtPmZ1bmN0aW9ucywgJmMtPm1mdCk7CiAKICAgICBkbGNsb3NlKGMtPmxpYnJhcnkp OworICAgIGRsY2xvc2UoYy0+ZDNkX2RsbCk7CiAgICAgYy0+bGlicmFyeSA9IE5VTEw7CiAjZWxz ZQogICAgIGZmX2ZyZWVfbWYoJmMtPmZ1bmN0aW9ucywgJmMtPm1mdCk7CkBAIC0xMzAwLDcgKzE0 NDYsNyBAQCBzdGF0aWMgY29uc3QgRkZDb2RlY0RlZmF1bHQgZGVmYXVsdHNbXSA9IHsKIH07CiAK ICNkZWZpbmUgVkZNVFMgXAotICAgICAgICBDT0RFQ19QSVhGTVRTKEFWX1BJWF9GTVRfTlYxMiwg QVZfUElYX0ZNVF9ZVVY0MjBQKSwKKyAgICAgICAgQ09ERUNfUElYRk1UUyhBVl9QSVhfRk1UX05W MTIsIEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZfUElYX0ZNVF9EM0QxMSksCiAjZGVmaW5lIFZDQVBT IFwKICAgICAgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09E RUNfQ0FQX0hZQlJJRCB8ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW X0NPREVDX0NBUF9EUjEsCi0tIAoyLjM0LjEKCg== --_002_PN0P287MB1494D3E65FC190ED16BEA69FE199APN0P287MB1494INDP_ 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_PN0P287MB1494D3E65FC190ED16BEA69FE199APN0P287MB1494INDP_--