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 F2C6E5024E for ; Thu, 10 Jul 2025 05:19:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 39F0F68F781; Thu, 10 Jul 2025 08:19:33 +0300 (EEST) Received: from PNZPR01CU001.outbound.protection.outlook.com (mail-centralindiaazon11021131.outbound.protection.outlook.com [40.107.51.131]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id D31D968F694 for ; Thu, 10 Jul 2025 08:19:25 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=njytIyAAfg16Xb8B2F//0VI+HB+Zoz3sZbXvA+lzpMfR82xi8rsgmACJixJe5wS8ORHHrua6O9YlHwGkWYnRWLDDVkX3IE7HZryxOqe1N9rbbBQe2sCVX3mq9vuhc72sF9gTRhNkDoPa+ORAUyO9hZz6FTVhGgdWqGR+OVvVpZ02h4tgjAzJdWEtAtJoyxD58zDMnDbELbsRWsEcJQGGrBk1FErZll6oG8Z/sI6+gQjAJ6d3GacGLwS3G8icvv8KG2s8erm0KtvXncuRvupceVyOh3qvZ5Wd6oxDey3Y5H3h6Eul+cbabGqf9FDGb0Oc6qCuw8/RzSC33XJIzWFlGw== 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=YIUHaQldGumidzh3lctcd/VljkpdOd4637G8bqiJZf4=; b=hMv1UkOO4jsj8JchA77A4+sla4T1jviTWD/TsbDQ7ca1xW7PUBpGs8ZIXevw/YInE8zOevVHEZ9Jgq8kFOAytmAFIe4G8m4OeE7FSo5ofOcnQx1FZaCIiER40D+nt1huI2iWMxLh4kQOPLDecr80ccGQoITdwgJI9sYscFUQp0GD2z6GyO2GYCwvFy0T9785K8ZE81juSxfybULnQ9Kf2ANwPn/JYVlNzyIFaQK221b8BX8wDgAXv2d38IgigOLUFoVjrg8KMtDHXRSj1DddyrT073atuP++AoopricUccChYzVa+V82Ew4eugPqUxWrP1Qy+eujjFsspGXDMNWdKA== 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=YIUHaQldGumidzh3lctcd/VljkpdOd4637G8bqiJZf4=; b=g/mC5r7ZsyYYV3M+69qJc8n1WSujm05KzNwg/KlkTpDkwXftnBk3fNE4PZQ0/lCvI0iQH+9W2cCgoiqmpbEE1LE5/d5m68k7VeJEMSxjwGBwEt1mRwt7Zpg6VBjdIDz2j2cGASuzWp0lfforPSLUA4H0XM92iOZEWo42Cvv3eA3WpKq0gw+KtFD2Hry0DQLf4YydABfKvBYvvJikCj5DKIOAqi4/4gE4l+YLZNDoeQGRK1j45AjgklvW32CA+9sT8uvQCq4ZuhKbXaMPaYqDfx/TcXat2CKKfWnfCOrUfno8vi1gAnwrvLkKWmkczpcmWkoFCNaQ8tasiwXYi+il+w== Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:186::9) by PNXP287MB4097.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:28c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.29; Thu, 10 Jul 2025 05:19:20 +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.8901.028; Thu, 10 Jul 2025 05:19:20 +0000 From: Dash Santosh Sathyanarayanan To: FFmpeg development discussions and patches Thread-Topic: [PATCH v3 1/2] avfilter: add scale_d3d11 filter Thread-Index: AQHb8Vhu49go6CIAwEe3SBK+bcupJg== Date: Thu, 10 Jul 2025 05:19:20 +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_|PNXP287MB4097:EE_ x-ms-office365-filtering-correlation-id: df0a6ad8-3026-4e6f-af72-08ddbf715338 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|10070799003|366016|376014|38070700018|4053099003; x-microsoft-antispam-message-info: =?Windows-1252?Q?J0EGErS1eatph53anPik0y7ui05yuGwf+8LVGdu6w0EF8UWwZcle+c3j?= =?Windows-1252?Q?MbSB/SQixQrW6L/i+6iRqRJkYLl/Rb3G59bIHcebtiLunsgGfs2EGj5a?= =?Windows-1252?Q?0uNV4y34Dw6EZJj0BvMedaYzU4FGNmvzJNBHNOlLOQQ9OCXJLWoIYqSo?= =?Windows-1252?Q?de6wtJwENCszfRNfJjNd/MOLSn058BN+qCzL0O23NRBJ/YgPh3TrCLfH?= =?Windows-1252?Q?VOPd+TtZvsDNCLn75afu4ZzEUPpoV5RxUz4fuzHiqVci2xtoiFPgBa69?= =?Windows-1252?Q?MNxmK3ndLzb6LFHLQKi4vsmApF1blH0PZTqLDvl5LMt6Nc9UPJ5v3axL?= =?Windows-1252?Q?+bHpl7I0Dg3TEXmeA/oqkU081U+NkrIYB2zw51pxauyL8hYc7X9ENQDc?= =?Windows-1252?Q?gTviB/UfTUONIYQsA+LtUM59ojrJPLO3ETwucDafYNuJ8e0z31qbOYEg?= =?Windows-1252?Q?TjbD2m87G7YNvA+NHdf7kZfOJCN68g2FF/qWU7QLVyV4B0vuHx/j/F+o?= =?Windows-1252?Q?PjcG4LVHk3b5JPTx0uItGCfpT0qAPNe9ZFLPcojaF2MImTe6HhgH7Cbi?= =?Windows-1252?Q?ayn9Mzx33+UFTJyiS/hbSQ/Bmpw1iz5pfmCHri0cBy4v7A7r9Bj1E8XM?= =?Windows-1252?Q?7HZaQhpUU2jvATKO8Ib6t298o6pxUTJffmvVrIu7AQ9pRahmnt/Z7V0U?= =?Windows-1252?Q?6h/3ojedZTY5E4x4F8RdLyEu4dMa5kK5ncRT+md3Lhd4j/SiLMNauhZ9?= =?Windows-1252?Q?6jktDcJSZEIj5EcnLQmnfCREb0Bz5nigSzLXvmB+6pxbbcZLdrzHgJ2t?= =?Windows-1252?Q?54gIsyYv74IFDjTtsRUil5yhVH3BX0RTvgaZM2pOmMAUCbvV9rBcvR6S?= =?Windows-1252?Q?d4rgBRPhoXRqwE3JNBZ0f2Ak0j49K8/f4FfqOxMen3srWwNDlE1LspHf?= =?Windows-1252?Q?hSkl/xewUgPrs3Cey8GsQ0R0yYKnzB+96bX0xDJWd3xK5zLrcfxTs4xy?= =?Windows-1252?Q?Wr8vmdqEawrhFcjkc3qFjxoZbgRvD6fwoldY9o3f7pBIAwyVOGqdbOK5?= =?Windows-1252?Q?M8cFmeFSkZOG29veD1zvwyxTGh4G0kj047lO4WXx9Tr8E1L1Gp6HGdvn?= =?Windows-1252?Q?tSJt8MdK2ROQOaLcx5gPssFVzbdU2PFsx64Ior1hgFTgEB8QzEw2M66n?= =?Windows-1252?Q?EhWKj9hcN77u/B7TAc0qU8mfG42xTTXEEScKXrTpByUa/PsKYYSxl+ol?= =?Windows-1252?Q?7LJeFQcdvKT60XkaPOR6D6YmYzqEZGu2gJiKnUYfWKpgw6LKqZcJQ0mX?= =?Windows-1252?Q?Q1yk3snyOAhlTQh24rHJiiwjWDHfj6jiiVaf4UhiwDiLESlsPkXhKGWm?= =?Windows-1252?Q?osqS8vKVWARAJ6yzUzWA4qdo9EuKZH9v7W1vhXx5MIRJK3Hzz/DxtLOi?= =?Windows-1252?Q?z+RjJK8cqje/2S95KTv+S8BZPBb/B/qypFIOxbnaS/8xi+yYNPlH9IZH?= =?Windows-1252?Q?Nqt6W32JXBYQTQPwEiqaNcvHTG/hm9POjecq6yP4shbGERQs14ZJqdWW?= =?Windows-1252?Q?n3j5XZFKUuNsMfFKBrXbwvZFm7u56d7oqafc36EDuFcOx2j+ovRqkana?= =?Windows-1252?Q?bqU=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)(10070799003)(366016)(376014)(38070700018)(4053099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?9XVMrhdLOeeyT19Xbq5bfdETidMhiPCojEsNiuygB444fYLaScAvyZRi?= =?Windows-1252?Q?7zwgW3iKUXjn1B1/f2Y6r7vSUIRSHijoIxPWsMQBO9HKvtDYcbk7/Nun?= =?Windows-1252?Q?vGI4xDUUJDObfipFPMjY9fBG9nxbTnSIkGwkOPb3Esw899LbkesXQS4B?= =?Windows-1252?Q?RJFURCrihjuWBoNxFumm0UQ48l85Tj85mgBLLB5dHJhWEBRR5dq1nUBG?= =?Windows-1252?Q?ewFSJqcyDDXC2YzIpzQ1JcjtaH+Y/gPIu4ZV4o+objnyPBp0bQWp5V68?= =?Windows-1252?Q?ihB5Koo/LqInrd7y6dEqjY6WVVDNjwQ/j/hV8mpO/c/3AhjZrd5BIl+f?= =?Windows-1252?Q?TJ/OP+5OORsOzfwG8GE0NtISmeWCp2Os0JJw+DJoYEHPrqWuzNGRNbxX?= =?Windows-1252?Q?BOopYFSPNQ9vcGPPJLSsjiLPiUWLc7z6ICzI65ScAQ1eevq1/CXjyC4l?= =?Windows-1252?Q?8KSO3JWNmzH0+Vn1/uuymxFtnZbuvn+DTSuoYowCaNKwY7uNfRxq9T7N?= =?Windows-1252?Q?FwClX9Vw4t5Fr7bBtB0Trpii3RJt/HmunYg8LE2SnjmH7RkNqJGR9iNI?= =?Windows-1252?Q?kETGg64kFIKKoqXAYc46M980tomcVBjU422t86QAl//b87QrGHsAzxjp?= =?Windows-1252?Q?gZGMPS/+BG0zOlHRia/PHirNrUE+i1CE71Y5za4SEKR8a9CJcAjPoUF9?= =?Windows-1252?Q?BsuCqW11GAh401V/4sSeN8O9y057W5c9PB2YJwbmPKikKJtlVEAyedtf?= =?Windows-1252?Q?oCoTXjMXRZ545wMRedk65oOPHvOrm0YbfZ3oK4vJ2MgiXYDkoa9mqyz+?= =?Windows-1252?Q?/V8BEWTtVlaDRjSjXWiyQiHJzq654vYh1QOuKpjps8sVzksDhkBhb9Hu?= =?Windows-1252?Q?OTBRUlxP8HFwvOMjV/RfAKnFjfZBnkrnVsfy9Ae2Z66Tx3gNTsUTRGD8?= =?Windows-1252?Q?tc51XBdfqyp0uF6zQj/yANSBH9m+w8Mwwbh5dfTHqSb9nddsHKArINlD?= =?Windows-1252?Q?bDg24xci2lB09rrp44qiFIySs14Ja2Unn9Oae32r8j6Tcjn3EctM/j7d?= =?Windows-1252?Q?rf+r0togf2fjqu+EiDUAUL3hu7ib6Pa2qDHrMFRRji18IOwgfEJ/6Mux?= =?Windows-1252?Q?K9YfyAlIbezOJFrxyD5075MVIEm/jLrr7o6UUwCBPCbgaqOnrRFeX0HM?= =?Windows-1252?Q?tuIEApwrU3hECNiqRJiRvhZ3IzUx5WkiHo28YpnLMmj46hlUFmUKbHxz?= =?Windows-1252?Q?5TmsL5Xar4Pjru6XoVmH+Jnv1AvE5JjrVc32SDQm6IPCUVECI7aqtWWr?= =?Windows-1252?Q?PPGdkA7/p95J1CcbkvXdSL/+1YevZWrIVSP7Qoo534jzbY5q9P929AQR?= =?Windows-1252?Q?DOYZSDTd4hRGBBLKJctUanzx85C/FJFPZK9l8yP5NU3qqADFq1Hu3kku?= =?Windows-1252?Q?aPV8QT6CEe4MvhKcQBKohUc3ZLGLPZMK3twfqRZWJkQavZplxeof8Lon?= =?Windows-1252?Q?2AKLiPfo7M92rk1XvAABrU3hzievu2VAeomdGtv9tM95sM5dZ0ENz7u1?= =?Windows-1252?Q?Y7+xiAx/54x5B/0pkSgiReKkpyl0hvgvTp+QiCEmsycm8YD9bGFtxS9C?= =?Windows-1252?Q?/RAjS8LR8VdLqCb+tKzAXfa4krIgXzBC0XOI0sPPIqLx2GR7DDRz0huE?= =?Windows-1252?Q?1tn1TauhFf56tn1LacIn6bUAV5mGRC72TitU2sgBFhsBYOPuCZBX+gS9?= =?Windows-1252?Q?U/zhggHSOd9wujNqwtprQNyRizefLahDEoOfIcyGx3Y7FzkSPfTiw1C4?= =?Windows-1252?Q?c/+OZi6mP+1oEWOSpGdlgNfE8U8=3D?= Content-Type: multipart/mixed; boundary="_002_PN0P287MB14944168BEDAB0740FF204C7E148APN0P287MB1494INDP_" 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: df0a6ad8-3026-4e6f-af72-08ddbf715338 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jul 2025 05:19:20.4546 (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: MPQu9WKqOluH07VOg/ji5iNltrVbadXRpUEw0GVx9nxa1991wRKqq1EKvJ2ey79MEF8Dse8yO6Zh2pAjJieEDZdrpvCg1Fw2bWqLGDOEaHIgqMR8njpOpWBJZRNw1JkmB/PTnMDZRZk7yUi2aOn8lg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PNXP287MB4097 Subject: [FFmpeg-devel] [PATCH v3 1/2] avfilter: add scale_d3d11 filter 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_PN0P287MB14944168BEDAB0740FF204C7E148APN0P287MB1494INDP_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable > This part is still not acceptable. You blindly set a flag based on=0A= > what you need, if special flags on the context are needed they should=0A= > be negotiated between the different components, guided by the users=0A= > use-case and input, and not hardcoded based on an arbitrary condition=0A= > of a pixel format.=0A= =0A= Couldn't find a way to negotiate between decoder and encoder, but it should= =0A= be possible to use scale_d3d11 filter as passthrough from which the output= =0A= can be sent directly to the encoder. So removed the change from dxva2.c =0A= =0A= > A potentially infinite loop in get_buffer is an absolute no-go. There=0A= > is no way to control this behavior, and the surface may never become=0A= > available if the caller is blocked in a loop here. You assume a=0A= > certain threading model which may not exist.=0A= > This sort of behavior should be handled by the caller, not here (and=0A= > no, a maximum wait time or anything like that does not resolve this=0A= > concern, move it to another layer where the caller can control this).=0A= =0A= Thanks for the feedback. I did try moving the wait logic out of get_buffer,= =0A= but couldn't find a clean way to handle it at a different layer. Without th= e loop,=0A= it ends up breaking the pipeline with a =93static surface pool size exceede= d=94=0A= error, as all surfaces remain busy.=0A= =0A= I also attempted returning EAGAIN instead of ENOMEM, but that leads to an= =0A= assertion failure in the decoder path - apparently EAGAIN isn=92t expected = at that=0A= stage and causes a hard abort.=0A= =0A= At this point I=92m honestly not sure how to proceed. I'd really appreciate= any=0A= guidance or suggestions on alternative approaches that might work here.=0A= Sorry if I=92m missing something obvious.=0A= =0A= - Dash=0A= =0A= ---=0A= Changelog | 1 +=0A= libavfilter/Makefile | 1 +=0A= libavfilter/allfilters.c | 1 +=0A= libavfilter/vf_scale_d3d11.c | 464 ++++++++++++++++++++++++++++++++++=0A= libavutil/hwcontext_d3d11va.c | 37 ++-=0A= 5 files changed, 493 insertions(+), 11 deletions(-)=0A= create mode 100644 libavfilter/vf_scale_d3d11.c=0A= =0A= diff --git a/Changelog b/Changelog=0A= index 4217449438..56122ef555 100644=0A= --- a/Changelog=0A= +++ b/Changelog=0A= @@ -18,6 +18,7 @@ version :=0A= - APV encoding support through a libopenapv wrapper=0A= - VVC decoder supports all content of SCC (Screen Content Coding):=0A= IBC (Inter Block Copy), Palette Mode and ACT (Adaptive Color Transform= =0A= +- Add vf_scale_d3d11 filter=0A= =0A= =0A= version 7.1:=0A= diff --git a/libavfilter/Makefile b/libavfilter/Makefile=0A= index 97f8f17272..95612d753d 100644=0A= --- a/libavfilter/Makefile=0A= +++ b/libavfilter/Makefile=0A= @@ -462,6 +462,7 @@ OBJS-$(CONFIG_ROBERTS_OPENCL_FILTER) +=3D vf_co= nvolution_opencl.o opencl.o=0A= OBJS-$(CONFIG_ROTATE_FILTER) +=3D vf_rotate.o=0A= OBJS-$(CONFIG_SAB_FILTER) +=3D vf_sab.o=0A= OBJS-$(CONFIG_SCALE_FILTER) +=3D vf_scale.o scale_eval.o = framesync.o=0A= +OBJS-$(CONFIG_SCALE_D3D11_FILTER) +=3D vf_scale_d3d11.o scale_e= val.o=0A= OBJS-$(CONFIG_SCALE_CUDA_FILTER) +=3D vf_scale_cuda.o scale_ev= al.o \=0A= vf_scale_cuda.ptx.o cuda/l= oad_helper.o=0A= OBJS-$(CONFIG_SCALE_NPP_FILTER) +=3D vf_scale_npp.o scale_eva= l.o=0A= diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c=0A= index 3bc045b28f..ec5e09494a 100644=0A= --- a/libavfilter/allfilters.c=0A= +++ b/libavfilter/allfilters.c=0A= @@ -436,6 +436,7 @@ extern const FFFilter ff_vf_scale;=0A= extern const FFFilter ff_vf_vpp_amf;=0A= extern const FFFilter ff_vf_sr_amf;=0A= extern const FFFilter ff_vf_scale_cuda;=0A= +extern const FFFilter ff_vf_scale_d3d11;=0A= extern const FFFilter ff_vf_scale_npp;=0A= extern const FFFilter ff_vf_scale_qsv;=0A= extern const FFFilter ff_vf_scale_vaapi;=0A= diff --git a/libavfilter/vf_scale_d3d11.c b/libavfilter/vf_scale_d3d11.c=0A= new file mode 100644=0A= index 0000000000..0b7476dd15=0A= --- /dev/null=0A= +++ b/libavfilter/vf_scale_d3d11.c=0A= @@ -0,0 +1,464 @@=0A= +/*=0A= + * Copyright (C) 2025 MulticorewWare, Inc.=0A= + *=0A= + * Authors: Dash Santosh =0A= + * Sachin =0A= + *=0A= + * This file is part of FFmpeg.=0A= + *=0A= + * FFmpeg is free software; you can redistribute it and/or=0A= + * modify it under the terms of the GNU Lesser General Public=0A= + * License as published by the Free Software Foundation; either=0A= + * version 2.1 of the License, or (at your option) any later version.=0A= + *=0A= + * FFmpeg is distributed in the hope that it will be useful,=0A= + * but WITHOUT ANY WARRANTY; without even the implied warranty of=0A= + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU=0A= + * Lesser General Public License for more details.=0A= + *=0A= + * You should have received a copy of the GNU Lesser General Public=0A= + * License along with FFmpeg; if not, write to the Free Software=0A= + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130= 1 USA=0A= + */=0A= +=0A= +#include "libavutil/opt.h"=0A= +#include "libavutil/pixdesc.h"=0A= +#include "compat/w32dlfcn.h"=0A= +=0A= +#include "libavutil/hwcontext.h"=0A= +#include "libavutil/hwcontext_d3d11va.h"=0A= +=0A= +#include "filters.h"=0A= +#include "scale_eval.h"=0A= +#include "video.h"=0A= +=0A= +typedef struct ScaleD3D11Context {=0A= + const AVClass *classCtx;=0A= + char *w_expr;=0A= + char *h_expr;=0A= + enum AVPixelFormat format;=0A= +=0A= + ///< D3D11 objects=0A= + ID3D11Device *device;=0A= + ID3D11DeviceContext *context;=0A= + ID3D11VideoDevice *videoDevice;=0A= + ID3D11VideoProcessor *processor;=0A= + ID3D11VideoProcessorEnumerator *enumerator;=0A= + ID3D11VideoProcessorOutputView *outputView;=0A= + ID3D11VideoProcessorInputView *inputView;=0A= +=0A= + ///< Buffer references=0A= + AVBufferRef *hw_device_ctx;=0A= + AVBufferRef *hw_frames_ctx_out;=0A= +=0A= + ///< Dimensions and formats=0A= + int width, height;=0A= + int inputWidth, inputHeight;=0A= + DXGI_FORMAT input_format;=0A= + DXGI_FORMAT output_format;=0A= +} ScaleD3D11Context;=0A= +=0A= +static av_cold int scale_d3d11_init(AVFilterContext *ctx) {=0A= + ///< all real work is done in config_props and filter_frame=0A= + return 0;=0A= +}=0A= +=0A= +static void release_d3d11_resources(ScaleD3D11Context *s) {=0A= + if (s->outputView) {=0A= + s->outputView->lpVtbl->Release(s->outputView);=0A= + s->outputView =3D NULL;=0A= + }=0A= +=0A= + if (s->processor) {=0A= + s->processor->lpVtbl->Release(s->processor);=0A= + s->processor =3D NULL;=0A= + }=0A= +=0A= + if (s->enumerator) {=0A= + s->enumerator->lpVtbl->Release(s->enumerator);=0A= + s->enumerator =3D NULL;=0A= + }=0A= +=0A= + if (s->videoDevice) {=0A= + s->videoDevice->lpVtbl->Release(s->videoDevice);=0A= + s->videoDevice =3D NULL;=0A= + }=0A= +}=0A= +=0A= +static int scale_d3d11_configure_processor(ScaleD3D11Context *s, AVFilterC= ontext *ctx) {=0A= + HRESULT hr;=0A= +=0A= + switch (s->format) {=0A= + case AV_PIX_FMT_NV12:=0A= + s->output_format =3D DXGI_FORMAT_NV12;=0A= + break;=0A= + case AV_PIX_FMT_P010:=0A= + s->output_format =3D DXGI_FORMAT_P010;=0A= + break;=0A= + default:=0A= + av_log(ctx, AV_LOG_ERROR, "Invalid output format specified\n")= ;=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + ///< Get D3D11 device and context from hardware device context=0A= + AVHWDeviceContext *hwctx =3D (AVHWDeviceContext *)s->hw_device_ctx->da= ta;=0A= + AVD3D11VADeviceContext *d3d11_hwctx =3D (AVD3D11VADeviceContext *)hwct= x->hwctx;=0A= + s->device =3D d3d11_hwctx->device;=0A= + s->context =3D d3d11_hwctx->device_context;=0A= +=0A= + av_log(ctx, AV_LOG_VERBOSE, "Configuring D3D11 video processor: %dx%d = -> %dx%d\n",=0A= + s->inputWidth, s->inputHeight, s->width, s->height);=0A= +=0A= + ///< Define the video processor content description=0A= + D3D11_VIDEO_PROCESSOR_CONTENT_DESC contentDesc =3D {=0A= + .InputFrameFormat =3D D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE,=0A= + .InputWidth =3D s->inputWidth,=0A= + .InputHeight =3D s->inputHeight,=0A= + .OutputWidth =3D s->width,=0A= + .OutputHeight =3D s->height,=0A= + .Usage =3D D3D11_VIDEO_USAGE_PLAYBACK_NORMAL,=0A= + };=0A= +=0A= + ///< Query video device interface=0A= + hr =3D s->device->lpVtbl->QueryInterface(s->device, &IID_ID3D11VideoDe= vice, (void **)&s->videoDevice);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to get D3D11 video device interf= ace: HRESULT 0x%lX\n", hr);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Create video processor enumerator=0A= + hr =3D s->videoDevice->lpVtbl->CreateVideoProcessorEnumerator(s->video= Device, &contentDesc, &s->enumerator);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to create video processor enumer= ator: HRESULT 0x%lX\n", hr);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Create the video processor=0A= + hr =3D s->videoDevice->lpVtbl->CreateVideoProcessor(s->videoDevice, s-= >enumerator, 0, &s->processor);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to create video processor: HRESU= LT 0x%lX\n", hr);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + av_log(ctx, AV_LOG_VERBOSE, "D3D11 video processor successfully config= ured\n");=0A= + return 0;=0A= +}=0A= +=0A= +static int scale_d3d11_filter_frame(AVFilterLink *inlink, AVFrame *in)=0A= +{=0A= + AVFilterContext *ctx =3D inlink->dst;=0A= + ScaleD3D11Context *s =3D ctx->priv;=0A= + AVFilterLink *outlink =3D ctx->outputs[0];=0A= + ID3D11VideoProcessorInputView *inputView =3D NULL;=0A= + ID3D11VideoContext *videoContext =3D NULL;=0A= + AVFrame *out =3D NULL;=0A= + int ret =3D 0;=0A= + HRESULT hr;=0A= +=0A= + ///< Validate input frame=0A= + if (!in) {=0A= + av_log(ctx, AV_LOG_ERROR, "Null input frame\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + if (!in->hw_frames_ctx) {=0A= + av_log(ctx, AV_LOG_ERROR, "No hardware frames context in input fra= me\n");=0A= + av_frame_free(&in);=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + ///< Verify hardware device contexts=0A= + AVHWFramesContext *frames_ctx =3D (AVHWFramesContext *)in->hw_frames_c= tx->data;=0A= +=0A= + if (!s->hw_device_ctx) {=0A= + av_log(ctx, AV_LOG_ERROR, "Filter hardware device context is unini= tialized\n");=0A= + av_frame_free(&in);=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + AVHWDeviceContext *input_device_ctx =3D (AVHWDeviceContext *)frames_ct= x->device_ref->data;=0A= + AVHWDeviceContext *filter_device_ctx =3D (AVHWDeviceContext *)s->hw_de= vice_ctx->data;=0A= +=0A= + if (input_device_ctx->type !=3D filter_device_ctx->type) {=0A= + av_log(ctx, AV_LOG_ERROR, "Mismatch between input and filter hardw= are device types\n");=0A= + av_frame_free(&in);=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + ///< Allocate output frame=0A= + out =3D av_frame_alloc();=0A= + if (!out) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to allocate output frame\n");=0A= + av_frame_free(&in);=0A= + return AVERROR(ENOMEM);=0A= + }=0A= +=0A= + ret =3D av_hwframe_get_buffer(s->hw_frames_ctx_out, out, 0);=0A= + if (ret < 0) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to get output frame from pool\n"= );=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return ret;=0A= + }=0A= +=0A= + ///< Configure the D3D11 video processor if not already configured=0A= + if (!s->processor) {=0A= + ///< Get info from input texture=0A= + D3D11_TEXTURE2D_DESC textureDesc;=0A= + ID3D11Texture2D *input_texture =3D (ID3D11Texture2D *)in->data[0];= =0A= + input_texture->lpVtbl->GetDesc(input_texture, &textureDesc);=0A= +=0A= + s->inputWidth =3D textureDesc.Width;=0A= + s->inputHeight =3D textureDesc.Height;=0A= + s->input_format =3D textureDesc.Format;=0A= +=0A= + ret =3D scale_d3d11_configure_processor(s, ctx);=0A= + if (ret < 0) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to configure processor\n");= =0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return ret;=0A= + }=0A= + }=0A= +=0A= + ///< Get input texture and prepare input view=0A= + ID3D11Texture2D *d3d11_texture =3D (ID3D11Texture2D *)in->data[0];=0A= + int subIdx =3D (int)(intptr_t)in->data[1];=0A= +=0A= + D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inputViewDesc =3D {=0A= + .FourCC =3D s->input_format,=0A= + .ViewDimension =3D D3D11_VPIV_DIMENSION_TEXTURE2D,=0A= + .Texture2D.ArraySlice =3D subIdx=0A= + };=0A= +=0A= + hr =3D s->videoDevice->lpVtbl->CreateVideoProcessorInputView(=0A= + s->videoDevice, (ID3D11Resource *)d3d11_texture, s->enumerator, &i= nputViewDesc, &inputView);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to create input view: HRESULT 0x= %lX\n", hr);=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Create output view for current texture=0A= + ID3D11Texture2D *output_texture =3D (ID3D11Texture2D *)out->data[0];= =0A= + D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC outputViewDesc =3D {=0A= + .ViewDimension =3D D3D11_VPOV_DIMENSION_TEXTURE2D,=0A= + .Texture2D =3D { .MipSlice =3D 0 },=0A= + };=0A= +=0A= + hr =3D s->videoDevice->lpVtbl->CreateVideoProcessorOutputView(=0A= + s->videoDevice, (ID3D11Resource *)output_texture, s->enumerator, &= outputViewDesc, &s->outputView);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to create output view: HRESULT 0= x%lX\n", hr);=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Set up processing stream=0A= + D3D11_VIDEO_PROCESSOR_STREAM stream =3D {=0A= + .Enable =3D TRUE,=0A= + .pInputSurface =3D inputView,=0A= + .OutputIndex =3D 0=0A= + };=0A= +=0A= + ///< Get video context=0A= + hr =3D s->context->lpVtbl->QueryInterface(s->context, &IID_ID3D11Video= Context, (void **)&videoContext);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to get video context: HRESULT 0x= %lX\n", hr);=0A= + inputView->lpVtbl->Release(inputView);=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Process the frame=0A= + hr =3D videoContext->lpVtbl->VideoProcessorBlt(videoContext, s->proces= sor, s->outputView, 0, 1, &stream);=0A= + if (FAILED(hr)) {=0A= + av_log(ctx, AV_LOG_ERROR, "VideoProcessorBlt failed: HRESULT 0x%lX= \n", hr);=0A= + videoContext->lpVtbl->Release(videoContext);=0A= + inputView->lpVtbl->Release(inputView);=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return AVERROR_EXTERNAL;=0A= + }=0A= +=0A= + ///< Set up output frame=0A= + ret =3D av_frame_copy_props(out, in);=0A= + if (ret < 0) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to copy frame properties\n");=0A= + videoContext->lpVtbl->Release(videoContext);=0A= + inputView->lpVtbl->Release(inputView);=0A= + av_frame_free(&in);=0A= + av_frame_free(&out);=0A= + return ret;=0A= + }=0A= +=0A= + out->data[0] =3D (uint8_t *)output_texture;=0A= + out->data[1] =3D (uint8_t *)(intptr_t)0;=0A= + out->width =3D s->width;=0A= + out->height =3D s->height;=0A= + out->format =3D AV_PIX_FMT_D3D11;=0A= +=0A= + ///< Clean up resources=0A= + inputView->lpVtbl->Release(inputView);=0A= + videoContext->lpVtbl->Release(videoContext);=0A= + if (s->outputView) {=0A= + s->outputView->lpVtbl->Release(s->outputView);=0A= + s->outputView =3D NULL;=0A= + }=0A= + av_frame_free(&in);=0A= +=0A= + ///< Forward the frame=0A= + return ff_filter_frame(outlink, out);=0A= +}=0A= +=0A= +static int scale_d3d11_config_props(AVFilterLink *outlink)=0A= +{=0A= + AVFilterContext *ctx =3D outlink->src;=0A= + ScaleD3D11Context *s =3D ctx->priv;=0A= + AVFilterLink *inlink =3D ctx->inputs[0];=0A= + FilterLink *inl =3D ff_filter_link(inlink);=0A= + FilterLink *outl =3D ff_filter_link(outlink);=0A= + int ret;=0A= +=0A= + ///< Clean up any previous resources=0A= + release_d3d11_resources(s);=0A= +=0A= + ///< Evaluate output dimensions=0A= + ret =3D ff_scale_eval_dimensions(s, s->w_expr, s->h_expr, inlink, outl= ink, &s->width, &s->height);=0A= + if (ret < 0) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to evaluate dimensions\n");=0A= + return ret;=0A= + }=0A= +=0A= + outlink->w =3D s->width;=0A= + outlink->h =3D s->height;=0A= +=0A= + ///< Validate input hw_frames_ctx=0A= + if (!inl->hw_frames_ctx) {=0A= + av_log(ctx, AV_LOG_ERROR, "No hw_frames_ctx available on input lin= k\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + ///< Propagate hw_frames_ctx to output=0A= + outl->hw_frames_ctx =3D av_buffer_ref(inl->hw_frames_ctx);=0A= + if (!outl->hw_frames_ctx) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to propagate hw_frames_ctx to ou= tput\n");=0A= + return AVERROR(ENOMEM);=0A= + }=0A= +=0A= + ///< Initialize filter's hardware device context=0A= + if (!s->hw_device_ctx) {=0A= + AVHWFramesContext *in_frames_ctx =3D (AVHWFramesContext *)inl->hw_= frames_ctx->data;=0A= + s->hw_device_ctx =3D av_buffer_ref(in_frames_ctx->device_ref);=0A= + if (!s->hw_device_ctx) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to initialize filter hardwar= e device context\n");=0A= + return AVERROR(ENOMEM);=0A= + }=0A= + }=0A= +=0A= + ///< Get D3D11 device and context (but don't initialize processor yet = - done in filter_frame)=0A= + AVHWDeviceContext *hwctx =3D (AVHWDeviceContext *)s->hw_device_ctx->da= ta;=0A= + AVD3D11VADeviceContext *d3d11_hwctx =3D (AVD3D11VADeviceContext *)hwct= x->hwctx;=0A= +=0A= + s->device =3D d3d11_hwctx->device;=0A= + s->context =3D d3d11_hwctx->device_context;=0A= +=0A= + if (!s->device || !s->context) {=0A= + av_log(ctx, AV_LOG_ERROR, "Failed to get valid D3D11 device or con= text\n");=0A= + return AVERROR(EINVAL);=0A= + }=0A= +=0A= + ///< Create new hardware frames context for output=0A= + AVHWFramesContext *in_frames_ctx =3D (AVHWFramesContext *)inl->hw_fram= es_ctx->data;=0A= + s->hw_frames_ctx_out =3D av_hwframe_ctx_alloc(s->hw_device_ctx);=0A= + if (!s->hw_frames_ctx_out)=0A= + return AVERROR(ENOMEM);=0A= +=0A= + AVHWFramesContext *frames_ctx =3D (AVHWFramesContext *)s->hw_frames_ct= x_out->data;=0A= + frames_ctx->format =3D AV_PIX_FMT_D3D11;=0A= + frames_ctx->sw_format =3D s->format;=0A= + frames_ctx->width =3D s->width;=0A= + frames_ctx->height =3D s->height;=0A= + frames_ctx->initial_pool_size =3D 10;=0A= +=0A= + if (ctx->extra_hw_frames > 0)=0A= + frames_ctx->initial_pool_size +=3D ctx->extra_hw_frames;=0A= +=0A= + AVD3D11VAFramesContext *frames_hwctx =3D frames_ctx->hwctx;=0A= + frames_hwctx->MiscFlags =3D 0;=0A= + frames_hwctx->BindFlags =3D D3D11_BIND_RENDER_TARGET | D3D11_BIND_VIDE= O_ENCODER;=0A= +=0A= + ret =3D av_hwframe_ctx_init(s->hw_frames_ctx_out);=0A= + if (ret < 0) {=0A= + av_buffer_unref(&s->hw_frames_ctx_out);=0A= + return ret;=0A= + }=0A= +=0A= + outl->hw_frames_ctx =3D av_buffer_ref(s->hw_frames_ctx_out);=0A= + if (!outl->hw_frames_ctx)=0A= + return AVERROR(ENOMEM);=0A= +=0A= + av_log(ctx, AV_LOG_VERBOSE, "D3D11 scale config: %dx%d -> %dx%d\n",=0A= + inlink->w, inlink->h, outlink->w, outlink->h);=0A= + return 0;=0A= +}=0A= +=0A= +static av_cold void scale_d3d11_uninit(AVFilterContext *ctx) {=0A= + ScaleD3D11Context *s =3D ctx->priv;=0A= +=0A= + ///< Release D3D11 resources=0A= + release_d3d11_resources(s);=0A= +=0A= + ///< Free the hardware device context reference=0A= + av_buffer_unref(&s->hw_frames_ctx_out);=0A= + av_buffer_unref(&s->hw_device_ctx);=0A= +=0A= + ///< Free option strings=0A= + av_freep(&s->w_expr);=0A= + av_freep(&s->h_expr);=0A= +}=0A= +=0A= +static const AVFilterPad scale_d3d11_inputs[] =3D {=0A= + {=0A= + .name =3D "default",=0A= + .type =3D AVMEDIA_TYPE_VIDEO,=0A= + .filter_frame =3D scale_d3d11_filter_frame,=0A= + },=0A= +};=0A= +=0A= +static const AVFilterPad scale_d3d11_outputs[] =3D {=0A= + {=0A= + .name =3D "default",=0A= + .type =3D AVMEDIA_TYPE_VIDEO,=0A= + .config_props =3D scale_d3d11_config_props,=0A= + },=0A= +};=0A= +=0A= +#define OFFSET(x) offsetof(ScaleD3D11Context, x)=0A= +#define FLAGS (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)=0A= +=0A= +static const AVOption scale_d3d11_options[] =3D {=0A= + { "width", "Output video width", OFFSET(w_expr), AV_OPT_TYPE_STRING,= {.str =3D "iw"}, .flags =3D FLAGS },=0A= + { "height", "Output video height", OFFSET(h_expr), AV_OPT_TYPE_STRING,= {.str =3D "ih"}, .flags =3D FLAGS },=0A= + { "format", "Output video pixel format", OFFSET(format), AV_OPT_TYPE_P= IXEL_FMT, { .i64 =3D AV_PIX_FMT_NONE }, INT_MIN, INT_MAX, .flags=3DFLAGS },= =0A= + { NULL }=0A= +};=0A= +=0A= +AVFILTER_DEFINE_CLASS(scale_d3d11);=0A= +=0A= +const FFFilter ff_vf_scale_d3d11 =3D {=0A= + .p.name =3D "scale_d3d11",=0A= + .p.description =3D NULL_IF_CONFIG_SMALL("Scale video using Direct3D= 11"),=0A= + .priv_size =3D sizeof(ScaleD3D11Context),=0A= + .p.priv_class =3D &scale_d3d11_class,=0A= + .init =3D scale_d3d11_init,=0A= + .uninit =3D scale_d3d11_uninit,=0A= + FILTER_INPUTS(scale_d3d11_inputs),=0A= + FILTER_OUTPUTS(scale_d3d11_outputs),=0A= + FILTER_SINGLE_PIXFMT(AV_PIX_FMT_D3D11),=0A= + .p.flags =3D AVFILTER_FLAG_HWDEVICE,=0A= + .flags_internal =3D FF_FILTER_FLAG_HWFRAME_AWARE,=0A= +};=0A= \ No newline at end of file=0A= diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c= =0A= index 1a047ce57b..a5947e1618 100644=0A= --- a/libavutil/hwcontext_d3d11va.c=0A= +++ b/libavutil/hwcontext_d3d11va.c=0A= @@ -42,6 +42,8 @@=0A= #include "thread.h"=0A= #include "compat/w32dlfcn.h"=0A= =0A= +#define MAX_ARRAY_SIZE 64 // Driver specification limits ArraySize to 64 f= or decoder-bound resources=0A= +=0A= typedef HRESULT(WINAPI *PFN_CREATE_DXGI_FACTORY)(REFIID riid, void **ppFac= tory);=0A= =0A= static AVOnce functions_loaded =3D AV_ONCE_INIT;=0A= @@ -288,6 +290,8 @@ static int d3d11va_frames_init(AVHWFramesContext *ctx)= =0A= return AVERROR(EINVAL);=0A= }=0A= =0A= + ctx->initial_pool_size =3D FFMIN(ctx->initial_pool_size, MAX_ARRAY_SIZ= E);=0A= +=0A= texDesc =3D (D3D11_TEXTURE2D_DESC){=0A= .Width =3D ctx->width,=0A= .Height =3D ctx->height,=0A= @@ -340,19 +344,30 @@ static int d3d11va_get_buffer(AVHWFramesContext *ctx,= AVFrame *frame)=0A= {=0A= AVD3D11FrameDescriptor *desc;=0A= =0A= - frame->buf[0] =3D av_buffer_pool_get(ctx->pool);=0A= - if (!frame->buf[0])=0A= - return AVERROR(ENOMEM);=0A= -=0A= - desc =3D (AVD3D11FrameDescriptor *)frame->buf[0]->data;=0A= + /**=0A= + * Loop until a buffer becomes available from the pool.=0A= + * In a full hardware pipeline, all buffers may be temporarily in use = by=0A= + * other modules (encoder/filter/decoder). Rather than immediately fai= ling=0A= + * with ENOMEM, we wait for a buffer to be released back to the pool, = which=0A= + * maintains pipeline flow and prevents unnecessary allocation failure= s=0A= + * during normal operation.=0A= + */=0A= + do {=0A= + frame->buf[0] =3D av_buffer_pool_get(ctx->pool);=0A= + if (frame->buf[0]) {=0A= + desc =3D (AVD3D11FrameDescriptor *)frame->buf[0]->data;=0A= + frame->data[0] =3D (uint8_t *)desc->texture;=0A= + frame->data[1] =3D (uint8_t *)desc->index;=0A= + frame->format =3D AV_PIX_FMT_D3D11;=0A= + frame->width =3D ctx->width;=0A= + frame->height =3D ctx->height;=0A= + return 0;=0A= + }=0A= =0A= - frame->data[0] =3D (uint8_t *)desc->texture;=0A= - frame->data[1] =3D (uint8_t *)desc->index;=0A= - frame->format =3D AV_PIX_FMT_D3D11;=0A= - frame->width =3D ctx->width;=0A= - frame->height =3D ctx->height;=0A= + av_usleep(500);=0A= + } while (1);=0A= =0A= - return 0;=0A= + return AVERROR(ENOMEM);=0A= }=0A= =0A= static int d3d11va_transfer_get_formats(AVHWFramesContext *ctx,=0A= -- =0A= 2.34.1=0A= =0A= --_002_PN0P287MB14944168BEDAB0740FF204C7E148APN0P287MB1494INDP_ Content-Type: application/octet-stream; name="v3-0001-avfilter-add-scale_d3d11-filter.patch" Content-Description: v3-0001-avfilter-add-scale_d3d11-filter.patch Content-Disposition: attachment; filename="v3-0001-avfilter-add-scale_d3d11-filter.patch"; size=21428; creation-date="Thu, 10 Jul 2025 05:07:55 GMT"; modification-date="Thu, 10 Jul 2025 05:07:55 GMT" Content-Transfer-Encoding: base64 RnJvbSA4YzViYjhjZTdmNGY3YWE5NmRhZjNhMWU3Mzk2NWUyMzQ4NzQ1MzkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aHlhbmFyYXlhbmFuQG11 bHRpY29yZXdhcmVpbmMuY29tPgpEYXRlOiBXZWQsIDExIEp1biAyMDI1IDA1OjI2OjE5IC0wNzAw ClN1YmplY3Q6IFtQQVRDSCB2MyAxLzJdIGF2ZmlsdGVyOiBhZGQgc2NhbGVfZDNkMTEgZmlsdGVy CgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGhhcmR3YXJlLWFjY2VsZXJhdGVkIHZpZGVv IGZpbHRlciwgc2NhbGVfZDNkMTEsCndoaWNoIHBlcmZvcm1zIHNjYWxpbmcgYW5kIGZvcm1hdCBj b252ZXJzaW9uIHVzaW5nIERpcmVjdDNEIDExLiBUaGUgZmlsdGVyIGVuYWJsZXMKZWZmaWNpZW50 IEdQVS1iYXNlZCBzY2FsaW5nIGFuZCBwaXhlbCBmb3JtYXQgY29udmVyc2lvbiAocDAxMCB0byBu djEyKSwgcmVkdWNpbmcKQ1BVIG92ZXJoZWFkIGFuZCBsYXRlbmN5IGluIHZpZGVvIHBpcGVsaW5l cy4KLS0tCiBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWJhdmZpbHRl ci9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiBsaWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgICAg ICB8ICAgMSArCiBsaWJhdmZpbHRlci92Zl9zY2FsZV9kM2QxMS5jICB8IDQ2NCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDExdmEuYyB8 ICAzNyArKy0KIDUgZmlsZXMgY2hhbmdlZCwgNDkzIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX3NjYWxlX2QzZDExLmMKCmRp ZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKaW5kZXggNDIxNzQ0OTQzOC4uNTYxMjJl ZjU1NSAxMDA2NDQKLS0tIGEvQ2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtMTgsNiArMTgs NyBAQCB2ZXJzaW9uIDxuZXh0PjoKIC0gQVBWIGVuY29kaW5nIHN1cHBvcnQgdGhyb3VnaCBhIGxp Ym9wZW5hcHYgd3JhcHBlcgogLSBWVkMgZGVjb2RlciBzdXBwb3J0cyBhbGwgY29udGVudCBvZiBT Q0MgKFNjcmVlbiBDb250ZW50IENvZGluZyk6CiAgIElCQyAoSW50ZXIgQmxvY2sgQ29weSksIFBh bGV0dGUgTW9kZSBhbmQgQUNUIChBZGFwdGl2ZSBDb2xvciBUcmFuc2Zvcm0KKy0gQWRkIHZmX3Nj YWxlX2QzZDExIGZpbHRlcgogCiAKIHZlcnNpb24gNy4xOgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0 ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRleCA5N2Y4ZjE3MjcyLi45NTYx MmQ3NTNkIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRl ci9NYWtlZmlsZQpAQCAtNDYyLDYgKzQ2Miw3IEBAIE9CSlMtJChDT05GSUdfUk9CRVJUU19PUEVO Q0xfRklMVEVSKSAgICAgICAgICs9IHZmX2NvbnZvbHV0aW9uX29wZW5jbC5vIG9wZW5jbC5vCiBP QkpTLSQoQ09ORklHX1JPVEFURV9GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9yb3RhdGUu bwogT0JKUy0kKENPTkZJR19TQUJfRklMVEVSKSAgICAgICAgICAgICAgICAgICAgKz0gdmZfc2Fi Lm8KIE9CSlMtJChDT05GSUdfU0NBTEVfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZmX3Nj YWxlLm8gc2NhbGVfZXZhbC5vIGZyYW1lc3luYy5vCitPQkpTLSQoQ09ORklHX1NDQUxFX0QzRDEx X0ZJTFRFUikgICAgICAgICAgICArPSB2Zl9zY2FsZV9kM2QxMS5vIHNjYWxlX2V2YWwubwogT0JK Uy0kKENPTkZJR19TQ0FMRV9DVURBX0ZJTFRFUikgICAgICAgICAgICAgKz0gdmZfc2NhbGVfY3Vk YS5vIHNjYWxlX2V2YWwubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2Zl9zY2FsZV9jdWRhLnB0eC5vIGN1ZGEvbG9hZF9oZWxwZXIubwogT0JKUy0k KENPTkZJR19TQ0FMRV9OUFBfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZfc2NhbGVfbnBwLm8g c2NhbGVfZXZhbC5vCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJh dmZpbHRlci9hbGxmaWx0ZXJzLmMKaW5kZXggM2JjMDQ1YjI4Zi4uZWM1ZTA5NDk0YSAxMDA2NDQK LS0tIGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYwpAQCAtNDM2LDYgKzQzNiw3IEBAIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9zY2Fs ZTsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl92cHBfYW1mOwogZXh0ZXJuIGNvbnN0IEZG RmlsdGVyIGZmX3ZmX3NyX2FtZjsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9zY2FsZV9j dWRhOworZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3NjYWxlX2QzZDExOwogZXh0ZXJuIGNv bnN0IEZGRmlsdGVyIGZmX3ZmX3NjYWxlX25wcDsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92 Zl9zY2FsZV9xc3Y7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGVfdmFhcGk7CmRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9zY2FsZV9kM2QxMS5jIGIvbGliYXZmaWx0ZXIvdmZf c2NhbGVfZDNkMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wYjc0 NzZkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvdmZfc2NhbGVfZDNkMTEuYwpA QCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNSBNdWx0aWNvcmV3V2Fy ZSwgSW5jLgorICoKKyAqIEF1dGhvcnM6IERhc2ggU2FudG9zaCA8ZGFzaC5zYXRoYW5hdGF5YW5h bkBtdWx0aWNvcmV3YXJlaW5jLmNvbT4KKyAqICAgICAgICAgIFNhY2hpbiA8c2FjaGluLnByYWth c2hAbXVsdGljb3Jld2FyZWluYy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAibGliYXZ1dGls L3BpeGRlc2MuaCIKKyNpbmNsdWRlICJjb21wYXQvdzMyZGxmY24uaCIKKworI2luY2x1ZGUgImxp YmF2dXRpbC9od2NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEx dmEuaCIKKworI2luY2x1ZGUgImZpbHRlcnMuaCIKKyNpbmNsdWRlICJzY2FsZV9ldmFsLmgiCisj aW5jbHVkZSAidmlkZW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgU2NhbGVEM0QxMUNvbnRleHQgewor ICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzQ3R4OworICAgIGNoYXIgKndfZXhwcjsKKyAgICBjaGFy ICpoX2V4cHI7CisgICAgZW51bSBBVlBpeGVsRm9ybWF0IGZvcm1hdDsKKworICAgIC8vLzwgRDNE MTEgb2JqZWN0cworICAgIElEM0QxMURldmljZSAqZGV2aWNlOworICAgIElEM0QxMURldmljZUNv bnRleHQgKmNvbnRleHQ7CisgICAgSUQzRDExVmlkZW9EZXZpY2UgKnZpZGVvRGV2aWNlOworICAg IElEM0QxMVZpZGVvUHJvY2Vzc29yICpwcm9jZXNzb3I7CisgICAgSUQzRDExVmlkZW9Qcm9jZXNz b3JFbnVtZXJhdG9yICplbnVtZXJhdG9yOworICAgIElEM0QxMVZpZGVvUHJvY2Vzc29yT3V0cHV0 VmlldyAqb3V0cHV0VmlldzsKKyAgICBJRDNEMTFWaWRlb1Byb2Nlc3NvcklucHV0VmlldyAqaW5w dXRWaWV3OworCisgICAgLy8vPCBCdWZmZXIgcmVmZXJlbmNlcworICAgIEFWQnVmZmVyUmVmICpo d19kZXZpY2VfY3R4OworICAgIEFWQnVmZmVyUmVmICpod19mcmFtZXNfY3R4X291dDsKKworICAg IC8vLzwgRGltZW5zaW9ucyBhbmQgZm9ybWF0cworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAg IGludCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodDsKKyAgICBEWEdJX0ZPUk1BVCBpbnB1dF9mb3Jt YXQ7CisgICAgRFhHSV9GT1JNQVQgb3V0cHV0X2Zvcm1hdDsKK30gU2NhbGVEM0QxMUNvbnRleHQ7 CisKK3N0YXRpYyBhdl9jb2xkIGludCBzY2FsZV9kM2QxMV9pbml0KEFWRmlsdGVyQ29udGV4dCAq Y3R4KSB7CisgICAgLy8vPCBhbGwgcmVhbCB3b3JrIGlzIGRvbmUgaW4gY29uZmlnX3Byb3BzIGFu ZCBmaWx0ZXJfZnJhbWUKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9k M2QxMV9yZXNvdXJjZXMoU2NhbGVEM0QxMUNvbnRleHQgKnMpIHsKKyAgICBpZiAocy0+b3V0cHV0 VmlldykgeworICAgICAgICBzLT5vdXRwdXRWaWV3LT5scFZ0YmwtPlJlbGVhc2Uocy0+b3V0cHV0 Vmlldyk7CisgICAgICAgIHMtPm91dHB1dFZpZXcgPSBOVUxMOworICAgIH0KKworICAgIGlmIChz LT5wcm9jZXNzb3IpIHsKKyAgICAgICAgcy0+cHJvY2Vzc29yLT5scFZ0YmwtPlJlbGVhc2Uocy0+ cHJvY2Vzc29yKTsKKyAgICAgICAgcy0+cHJvY2Vzc29yID0gTlVMTDsKKyAgICB9CisKKyAgICBp ZiAocy0+ZW51bWVyYXRvcikgeworICAgICAgICBzLT5lbnVtZXJhdG9yLT5scFZ0YmwtPlJlbGVh c2Uocy0+ZW51bWVyYXRvcik7CisgICAgICAgIHMtPmVudW1lcmF0b3IgPSBOVUxMOworICAgIH0K KworICAgIGlmIChzLT52aWRlb0RldmljZSkgeworICAgICAgICBzLT52aWRlb0RldmljZS0+bHBW dGJsLT5SZWxlYXNlKHMtPnZpZGVvRGV2aWNlKTsKKyAgICAgICAgcy0+dmlkZW9EZXZpY2UgPSBO VUxMOworICAgIH0KK30KKworc3RhdGljIGludCBzY2FsZV9kM2QxMV9jb25maWd1cmVfcHJvY2Vz c29yKFNjYWxlRDNEMTFDb250ZXh0ICpzLCBBVkZpbHRlckNvbnRleHQgKmN0eCkgeworICAgIEhS RVNVTFQgaHI7CisKKyAgICBzd2l0Y2ggKHMtPmZvcm1hdCkgeworICAgICAgICBjYXNlIEFWX1BJ WF9GTVRfTlYxMjoKKyAgICAgICAgICAgIHMtPm91dHB1dF9mb3JtYXQgPSBEWEdJX0ZPUk1BVF9O VjEyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVZfUElYX0ZNVF9QMDEwOgor ICAgICAgICAgICAgcy0+b3V0cHV0X2Zvcm1hdCA9IERYR0lfRk9STUFUX1AwMTA7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkludmFsaWQgb3V0cHV0IGZvcm1hdCBzcGVjaWZpZWRcbiIpOworICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAvLy88IEdldCBEM0Qx MSBkZXZpY2UgYW5kIGNvbnRleHQgZnJvbSBoYXJkd2FyZSBkZXZpY2UgY29udGV4dAorICAgIEFW SFdEZXZpY2VDb250ZXh0ICpod2N0eCA9IChBVkhXRGV2aWNlQ29udGV4dCAqKXMtPmh3X2Rldmlj ZV9jdHgtPmRhdGE7CisgICAgQVZEM0QxMVZBRGV2aWNlQ29udGV4dCAqZDNkMTFfaHdjdHggPSAo QVZEM0QxMVZBRGV2aWNlQ29udGV4dCAqKWh3Y3R4LT5od2N0eDsKKyAgICBzLT5kZXZpY2UgPSBk M2QxMV9od2N0eC0+ZGV2aWNlOworICAgIHMtPmNvbnRleHQgPSBkM2QxMV9od2N0eC0+ZGV2aWNl X2NvbnRleHQ7CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfVkVSQk9TRSwgIkNvbmZpZ3VyaW5n IEQzRDExIHZpZGVvIHByb2Nlc3NvcjogJWR4JWQgLT4gJWR4JWRcbiIsCisgICAgICAgICAgIHMt PmlucHV0V2lkdGgsIHMtPmlucHV0SGVpZ2h0LCBzLT53aWR0aCwgcy0+aGVpZ2h0KTsKKworICAg IC8vLzwgRGVmaW5lIHRoZSB2aWRlbyBwcm9jZXNzb3IgY29udGVudCBkZXNjcmlwdGlvbgorICAg IEQzRDExX1ZJREVPX1BST0NFU1NPUl9DT05URU5UX0RFU0MgY29udGVudERlc2MgPSB7CisgICAg ICAgIC5JbnB1dEZyYW1lRm9ybWF0ID0gRDNEMTFfVklERU9fRlJBTUVfRk9STUFUX1BST0dSRVNT SVZFLAorICAgICAgICAuSW5wdXRXaWR0aCA9IHMtPmlucHV0V2lkdGgsCisgICAgICAgIC5JbnB1 dEhlaWdodCA9IHMtPmlucHV0SGVpZ2h0LAorICAgICAgICAuT3V0cHV0V2lkdGggPSBzLT53aWR0 aCwKKyAgICAgICAgLk91dHB1dEhlaWdodCA9IHMtPmhlaWdodCwKKyAgICAgICAgLlVzYWdlID0g RDNEMTFfVklERU9fVVNBR0VfUExBWUJBQ0tfTk9STUFMLAorICAgIH07CisKKyAgICAvLy88IFF1 ZXJ5IHZpZGVvIGRldmljZSBpbnRlcmZhY2UKKyAgICBociA9IHMtPmRldmljZS0+bHBWdGJsLT5R dWVyeUludGVyZmFjZShzLT5kZXZpY2UsICZJSURfSUQzRDExVmlkZW9EZXZpY2UsICh2b2lkICoq KSZzLT52aWRlb0RldmljZSk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBEM0QxMSB2aWRlbyBkZXZpY2UgaW50 ZXJmYWNlOiBIUkVTVUxUIDB4JWxYXG4iLCBocik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOworICAgIH0KKworICAgIC8vLzwgQ3JlYXRlIHZpZGVvIHByb2Nlc3NvciBlbnVtZXJh dG9yCisgICAgaHIgPSBzLT52aWRlb0RldmljZS0+bHBWdGJsLT5DcmVhdGVWaWRlb1Byb2Nlc3Nv ckVudW1lcmF0b3Iocy0+dmlkZW9EZXZpY2UsICZjb250ZW50RGVzYywgJnMtPmVudW1lcmF0b3Ip OworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW8gcHJvY2Vzc29yIGVudW1lcmF0b3I6IEhSRVNVTFQg MHglbFhcbiIsIGhyKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQor CisgICAgLy8vPCBDcmVhdGUgdGhlIHZpZGVvIHByb2Nlc3NvcgorICAgIGhyID0gcy0+dmlkZW9E ZXZpY2UtPmxwVnRibC0+Q3JlYXRlVmlkZW9Qcm9jZXNzb3Iocy0+dmlkZW9EZXZpY2UsIHMtPmVu dW1lcmF0b3IsIDAsICZzLT5wcm9jZXNzb3IpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW8gcHJv Y2Vzc29yOiBIUkVTVUxUIDB4JWxYXG4iLCBocik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOworICAgIH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiRDNEMTEg dmlkZW8gcHJvY2Vzc29yIHN1Y2Nlc3NmdWxseSBjb25maWd1cmVkXG4iKTsKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBzY2FsZV9kM2QxMV9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5r ICppbmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5s aW5rLT5kc3Q7CisgICAgU2NhbGVEM0QxMUNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZG aWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIElEM0QxMVZpZGVvUHJv Y2Vzc29ySW5wdXRWaWV3ICppbnB1dFZpZXcgPSBOVUxMOworICAgIElEM0QxMVZpZGVvQ29udGV4 dCAqdmlkZW9Db250ZXh0ID0gTlVMTDsKKyAgICBBVkZyYW1lICpvdXQgPSBOVUxMOworICAgIGlu dCByZXQgPSAwOworICAgIEhSRVNVTFQgaHI7CisKKyAgICAvLy88IFZhbGlkYXRlIGlucHV0IGZy YW1lCisgICAgaWYgKCFpbikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJO dWxsIGlucHV0IGZyYW1lXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAg ICB9CisKKyAgICBpZiAoIWluLT5od19mcmFtZXNfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIk5vIGhhcmR3YXJlIGZyYW1lcyBjb250ZXh0IGluIGlucHV0IGZyYW1l XG4iKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgIH0KKworICAgIC8vLzwgVmVyaWZ5IGhhcmR3YXJlIGRldmljZSBjb250 ZXh0cworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250 ZXh0ICopaW4tPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisKKyAgICBpZiAoIXMtPmh3X2RldmljZV9j dHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmlsdGVyIGhhcmR3YXJl IGRldmljZSBjb250ZXh0IGlzIHVuaW5pdGlhbGl6ZWRcbiIpOworICAgICAgICBhdl9mcmFtZV9m cmVlKCZpbik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAg QVZIV0RldmljZUNvbnRleHQgKmlucHV0X2RldmljZV9jdHggPSAoQVZIV0RldmljZUNvbnRleHQg KilmcmFtZXNfY3R4LT5kZXZpY2VfcmVmLT5kYXRhOworICAgIEFWSFdEZXZpY2VDb250ZXh0ICpm aWx0ZXJfZGV2aWNlX2N0eCA9IChBVkhXRGV2aWNlQ29udGV4dCAqKXMtPmh3X2RldmljZV9jdHgt PmRhdGE7CisKKyAgICBpZiAoaW5wdXRfZGV2aWNlX2N0eC0+dHlwZSAhPSBmaWx0ZXJfZGV2aWNl X2N0eC0+dHlwZSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJNaXNtYXRj aCBiZXR3ZWVuIGlucHV0IGFuZCBmaWx0ZXIgaGFyZHdhcmUgZGV2aWNlIHR5cGVzXG4iKTsKKyAg ICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OworICAgIH0KKworICAgIC8vLzwgQWxsb2NhdGUgb3V0cHV0IGZyYW1lCisgICAgb3V0ID0gYXZf ZnJhbWVfYWxsb2MoKTsKKyAgICBpZiAoIW91dCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3V0cHV0IGZyYW1lXG4iKTsKKyAgICAgICAg YXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAg IH0KKworICAgIHJldCA9IGF2X2h3ZnJhbWVfZ2V0X2J1ZmZlcihzLT5od19mcmFtZXNfY3R4X291 dCwgb3V0LCAwKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IG91dHB1dCBmcmFtZSBmcm9tIHBvb2xcbiIpOworICAg ICAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7Cisg ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLy8vPCBDb25maWd1cmUgdGhlIEQzRDEx IHZpZGVvIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSBjb25maWd1cmVkCisgICAgaWYgKCFzLT5w cm9jZXNzb3IpIHsKKyAgICAgICAgLy8vPCBHZXQgaW5mbyBmcm9tIGlucHV0IHRleHR1cmUKKyAg ICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgICAgIElEM0QxMVRl eHR1cmUyRCAqaW5wdXRfdGV4dHVyZSA9IChJRDNEMTFUZXh0dXJlMkQgKilpbi0+ZGF0YVswXTsK KyAgICAgICAgaW5wdXRfdGV4dHVyZS0+bHBWdGJsLT5HZXREZXNjKGlucHV0X3RleHR1cmUsICZ0 ZXh0dXJlRGVzYyk7CisKKyAgICAgICAgcy0+aW5wdXRXaWR0aCA9IHRleHR1cmVEZXNjLldpZHRo OworICAgICAgICBzLT5pbnB1dEhlaWdodCA9IHRleHR1cmVEZXNjLkhlaWdodDsKKyAgICAgICAg cy0+aW5wdXRfZm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworCisgICAgICAgIHJldCA9IHNj YWxlX2QzZDExX2NvbmZpZ3VyZV9wcm9jZXNzb3IocywgY3R4KTsKKyAgICAgICAgaWYgKHJldCA8 IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBj b25maWd1cmUgcHJvY2Vzc29yXG4iKTsKKyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsK KyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAgICAgICByZXR1cm4gcmV0 OworICAgICAgICB9CisgICAgfQorCisgICAgLy8vPCBHZXQgaW5wdXQgdGV4dHVyZSBhbmQgcHJl cGFyZSBpbnB1dCB2aWV3CisgICAgSUQzRDExVGV4dHVyZTJEICpkM2QxMV90ZXh0dXJlID0gKElE M0QxMVRleHR1cmUyRCAqKWluLT5kYXRhWzBdOworICAgIGludCBzdWJJZHggPSAoaW50KShpbnRw dHJfdClpbi0+ZGF0YVsxXTsKKworICAgIEQzRDExX1ZJREVPX1BST0NFU1NPUl9JTlBVVF9WSUVX X0RFU0MgaW5wdXRWaWV3RGVzYyA9IHsKKyAgICAgICAgLkZvdXJDQyA9IHMtPmlucHV0X2Zvcm1h dCwKKyAgICAgICAgLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9WUElWX0RJTUVOU0lPTl9URVhUVVJF MkQsCisgICAgICAgIC5UZXh0dXJlMkQuQXJyYXlTbGljZSA9IHN1YklkeAorICAgIH07CisKKyAg ICBociA9IHMtPnZpZGVvRGV2aWNlLT5scFZ0YmwtPkNyZWF0ZVZpZGVvUHJvY2Vzc29ySW5wdXRW aWV3KAorICAgICAgICBzLT52aWRlb0RldmljZSwgKElEM0QxMVJlc291cmNlICopZDNkMTFfdGV4 dHVyZSwgcy0+ZW51bWVyYXRvciwgJmlucHV0Vmlld0Rlc2MsICZpbnB1dFZpZXcpOworICAgIGlm IChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBjcmVhdGUgaW5wdXQgdmlldzogSFJFU1VMVCAweCVsWFxuIiwgaHIpOworICAgICAgICBh dl9mcmFtZV9mcmVlKCZpbik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIC8vLzwgQ3JlYXRlIG91dHB1 dCB2aWV3IGZvciBjdXJyZW50IHRleHR1cmUKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm91dHB1dF90 ZXh0dXJlID0gKElEM0QxMVRleHR1cmUyRCAqKW91dC0+ZGF0YVswXTsKKyAgICBEM0QxMV9WSURF T19QUk9DRVNTT1JfT1VUUFVUX1ZJRVdfREVTQyBvdXRwdXRWaWV3RGVzYyA9IHsKKyAgICAgICAg LlZpZXdEaW1lbnNpb24gPSBEM0QxMV9WUE9WX0RJTUVOU0lPTl9URVhUVVJFMkQsCisgICAgICAg IC5UZXh0dXJlMkQgPSB7IC5NaXBTbGljZSA9IDAgfSwKKyAgICB9OworCisgICAgaHIgPSBzLT52 aWRlb0RldmljZS0+bHBWdGJsLT5DcmVhdGVWaWRlb1Byb2Nlc3Nvck91dHB1dFZpZXcoCisgICAg ICAgIHMtPnZpZGVvRGV2aWNlLCAoSUQzRDExUmVzb3VyY2UgKilvdXRwdXRfdGV4dHVyZSwgcy0+ ZW51bWVyYXRvciwgJm91dHB1dFZpZXdEZXNjLCAmcy0+b3V0cHV0Vmlldyk7CisgICAgaWYgKEZB SUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IGNyZWF0ZSBvdXRwdXQgdmlldzogSFJFU1VMVCAweCVsWFxuIiwgaHIpOworICAgICAgICBhdl9m cmFtZV9mcmVlKCZpbik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIC8vLzwgU2V0IHVwIHByb2Nlc3Np bmcgc3RyZWFtCisgICAgRDNEMTFfVklERU9fUFJPQ0VTU09SX1NUUkVBTSBzdHJlYW0gPSB7Cisg ICAgICAgIC5FbmFibGUgPSBUUlVFLAorICAgICAgICAucElucHV0U3VyZmFjZSA9IGlucHV0Vmll dywKKyAgICAgICAgLk91dHB1dEluZGV4ID0gMAorICAgIH07CisKKyAgICAvLy88IEdldCB2aWRl byBjb250ZXh0CisgICAgaHIgPSBzLT5jb250ZXh0LT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHMt PmNvbnRleHQsICZJSURfSUQzRDExVmlkZW9Db250ZXh0LCAodm9pZCAqKikmdmlkZW9Db250ZXh0 KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gZ2V0IHZpZGVvIGNvbnRleHQ6IEhSRVNVTFQgMHglbFhcbiIsIGhyKTsK KyAgICAgICAgaW5wdXRWaWV3LT5scFZ0YmwtPlJlbGVhc2UoaW5wdXRWaWV3KTsKKyAgICAgICAg YXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICBhdl9mcmFtZV9mcmVlKCZvdXQpOworICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICAvLy88IFByb2Nlc3MgdGhl IGZyYW1lCisgICAgaHIgPSB2aWRlb0NvbnRleHQtPmxwVnRibC0+VmlkZW9Qcm9jZXNzb3JCbHQo dmlkZW9Db250ZXh0LCBzLT5wcm9jZXNzb3IsIHMtPm91dHB1dFZpZXcsIDAsIDEsICZzdHJlYW0p OworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIlZpZGVvUHJvY2Vzc29yQmx0IGZhaWxlZDogSFJFU1VMVCAweCVsWFxuIiwgaHIpOworICAg ICAgICB2aWRlb0NvbnRleHQtPmxwVnRibC0+UmVsZWFzZSh2aWRlb0NvbnRleHQpOworICAgICAg ICBpbnB1dFZpZXctPmxwVnRibC0+UmVsZWFzZShpbnB1dFZpZXcpOworICAgICAgICBhdl9mcmFt ZV9mcmVlKCZpbik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIC8vLzwgU2V0IHVwIG91dHB1dCBmcmFt ZQorICAgIHJldCA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7CisgICAgaWYgKHJldCA8 IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNvcHkg ZnJhbWUgcHJvcGVydGllc1xuIik7CisgICAgICAgIHZpZGVvQ29udGV4dC0+bHBWdGJsLT5SZWxl YXNlKHZpZGVvQ29udGV4dCk7CisgICAgICAgIGlucHV0Vmlldy0+bHBWdGJsLT5SZWxlYXNlKGlu cHV0Vmlldyk7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgYXZfZnJhbWVf ZnJlZSgmb3V0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBvdXQtPmRhdGFb MF0gPSAodWludDhfdCAqKW91dHB1dF90ZXh0dXJlOworICAgIG91dC0+ZGF0YVsxXSA9ICh1aW50 OF90ICopKGludHB0cl90KTA7CisgICAgb3V0LT53aWR0aCA9IHMtPndpZHRoOworICAgIG91dC0+ aGVpZ2h0ID0gcy0+aGVpZ2h0OworICAgIG91dC0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9EM0QxMTsK KworICAgIC8vLzwgQ2xlYW4gdXAgcmVzb3VyY2VzCisgICAgaW5wdXRWaWV3LT5scFZ0YmwtPlJl bGVhc2UoaW5wdXRWaWV3KTsKKyAgICB2aWRlb0NvbnRleHQtPmxwVnRibC0+UmVsZWFzZSh2aWRl b0NvbnRleHQpOworICAgIGlmIChzLT5vdXRwdXRWaWV3KSB7CisgICAgICAgIHMtPm91dHB1dFZp ZXctPmxwVnRibC0+UmVsZWFzZShzLT5vdXRwdXRWaWV3KTsKKyAgICAgICAgcy0+b3V0cHV0Vmll dyA9IE5VTEw7CisgICAgfQorICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKworICAgIC8vLzwgRm9y d2FyZCB0aGUgZnJhbWUKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7 Cit9CisKK3N0YXRpYyBpbnQgc2NhbGVfZDNkMTFfY29uZmlnX3Byb3BzKEFWRmlsdGVyTGluayAq b3V0bGluaykKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IG91dGxpbmstPnNyYzsKKyAg ICBTY2FsZUQzRDExQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKmlu bGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIEZpbHRlckxpbmsgKmlubCA9IGZmX2ZpbHRlcl9s aW5rKGlubGluayk7CisgICAgRmlsdGVyTGluayAqb3V0bCA9IGZmX2ZpbHRlcl9saW5rKG91dGxp bmspOworICAgIGludCByZXQ7CisKKyAgICAvLy88IENsZWFuIHVwIGFueSBwcmV2aW91cyByZXNv dXJjZXMKKyAgICByZWxlYXNlX2QzZDExX3Jlc291cmNlcyhzKTsKKworICAgIC8vLzwgRXZhbHVh dGUgb3V0cHV0IGRpbWVuc2lvbnMKKyAgICByZXQgPSBmZl9zY2FsZV9ldmFsX2RpbWVuc2lvbnMo cywgcy0+d19leHByLCBzLT5oX2V4cHIsIGlubGluaywgb3V0bGluaywgJnMtPndpZHRoLCAmcy0+ aGVpZ2h0KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gZXZhbHVhdGUgZGltZW5zaW9uc1xuIik7CisgICAgICAgIHJldHVy biByZXQ7CisgICAgfQorCisgICAgb3V0bGluay0+dyA9IHMtPndpZHRoOworICAgIG91dGxpbmst PmggPSBzLT5oZWlnaHQ7CisKKyAgICAvLy88IFZhbGlkYXRlIGlucHV0IGh3X2ZyYW1lc19jdHgK KyAgICBpZiAoIWlubC0+aHdfZnJhbWVzX2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJObyBod19mcmFtZXNfY3R4IGF2YWlsYWJsZSBvbiBpbnB1dCBsaW5rXG4iKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAvLy88IFByb3Bh Z2F0ZSBod19mcmFtZXNfY3R4IHRvIG91dHB1dAorICAgIG91dGwtPmh3X2ZyYW1lc19jdHggPSBh dl9idWZmZXJfcmVmKGlubC0+aHdfZnJhbWVzX2N0eCk7CisgICAgaWYgKCFvdXRsLT5od19mcmFt ZXNfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBw cm9wYWdhdGUgaHdfZnJhbWVzX2N0eCB0byBvdXRwdXRcbiIpOworICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworICAgIH0KKworICAgIC8vLzwgSW5pdGlhbGl6ZSBmaWx0ZXIncyBoYXJk d2FyZSBkZXZpY2UgY29udGV4dAorICAgIGlmICghcy0+aHdfZGV2aWNlX2N0eCkgeworICAgICAg ICBBVkhXRnJhbWVzQ29udGV4dCAqaW5fZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVzQ29udGV4dCAq KWlubC0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICAgICAgcy0+aHdfZGV2aWNlX2N0eCA9IGF2 X2J1ZmZlcl9yZWYoaW5fZnJhbWVzX2N0eC0+ZGV2aWNlX3JlZik7CisgICAgICAgIGlmICghcy0+ aHdfZGV2aWNlX2N0eCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIGluaXRpYWxpemUgZmlsdGVyIGhhcmR3YXJlIGRldmljZSBjb250ZXh0XG4iKTsK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvLy88IEdldCBEM0QxMSBkZXZpY2UgYW5kIGNvbnRleHQgKGJ1dCBkb24ndCBpbml0aWFs aXplIHByb2Nlc3NvciB5ZXQgLSBkb25lIGluIGZpbHRlcl9mcmFtZSkKKyAgICBBVkhXRGV2aWNl Q29udGV4dCAqaHdjdHggPSAoQVZIV0RldmljZUNvbnRleHQgKilzLT5od19kZXZpY2VfY3R4LT5k YXRhOworICAgIEFWRDNEMTFWQURldmljZUNvbnRleHQgKmQzZDExX2h3Y3R4ID0gKEFWRDNEMTFW QURldmljZUNvbnRleHQgKilod2N0eC0+aHdjdHg7CisKKyAgICBzLT5kZXZpY2UgPSBkM2QxMV9o d2N0eC0+ZGV2aWNlOworICAgIHMtPmNvbnRleHQgPSBkM2QxMV9od2N0eC0+ZGV2aWNlX2NvbnRl eHQ7CisKKyAgICBpZiAoIXMtPmRldmljZSB8fCAhcy0+Y29udGV4dCkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IHZhbGlkIEQzRDExIGRldmljZSBv ciBjb250ZXh0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisK KyAgICAvLy88IENyZWF0ZSBuZXcgaGFyZHdhcmUgZnJhbWVzIGNvbnRleHQgZm9yIG91dHB1dAor ICAgIEFWSFdGcmFtZXNDb250ZXh0ICppbl9mcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0 ICopaW5sLT5od19mcmFtZXNfY3R4LT5kYXRhOworICAgIHMtPmh3X2ZyYW1lc19jdHhfb3V0ID0g YXZfaHdmcmFtZV9jdHhfYWxsb2Mocy0+aHdfZGV2aWNlX2N0eCk7CisgICAgaWYgKCFzLT5od19m cmFtZXNfY3R4X291dCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIEFW SFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0ICopcy0+aHdf ZnJhbWVzX2N0eF9vdXQtPmRhdGE7CisgICAgZnJhbWVzX2N0eC0+Zm9ybWF0ID0gQVZfUElYX0ZN VF9EM0QxMTsKKyAgICBmcmFtZXNfY3R4LT5zd19mb3JtYXQgPSBzLT5mb3JtYXQ7CisgICAgZnJh bWVzX2N0eC0+d2lkdGggPSBzLT53aWR0aDsKKyAgICBmcmFtZXNfY3R4LT5oZWlnaHQgPSBzLT5o ZWlnaHQ7CisgICAgZnJhbWVzX2N0eC0+aW5pdGlhbF9wb29sX3NpemUgPSAxMDsKKworICAgIGlm IChjdHgtPmV4dHJhX2h3X2ZyYW1lcyA+IDApCisgICAgICAgIGZyYW1lc19jdHgtPmluaXRpYWxf cG9vbF9zaXplICs9IGN0eC0+ZXh0cmFfaHdfZnJhbWVzOworCisgICAgQVZEM0QxMVZBRnJhbWVz Q29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7CisgICAgZnJhbWVzX2h3 Y3R4LT5NaXNjRmxhZ3MgPSAwOworICAgIGZyYW1lc19od2N0eC0+QmluZEZsYWdzID0gRDNEMTFf QklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9WSURFT19FTkNPREVSOworCisgICAgcmV0 ID0gYXZfaHdmcmFtZV9jdHhfaW5pdChzLT5od19mcmFtZXNfY3R4X291dCk7CisgICAgaWYgKHJl dCA8IDApIHsKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZzLT5od19mcmFtZXNfY3R4X291dCk7 CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgb3V0bC0+aHdfZnJhbWVzX2N0eCA9 IGF2X2J1ZmZlcl9yZWYocy0+aHdfZnJhbWVzX2N0eF9vdXQpOworICAgIGlmICghb3V0bC0+aHdf ZnJhbWVzX2N0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiRDNEMTEgc2NhbGUgY29uZmlnOiAlZHglZCAtPiAlZHgl ZFxuIiwKKyAgICAgICAgICAgaW5saW5rLT53LCBpbmxpbmstPmgsIG91dGxpbmstPncsIG91dGxp bmstPmgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCB2b2lkIHNjYWxlX2Qz ZDExX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkgeworICAgIFNjYWxlRDNEMTFDb250ZXh0 ICpzID0gY3R4LT5wcml2OworCisgICAgLy8vPCBSZWxlYXNlIEQzRDExIHJlc291cmNlcworICAg IHJlbGVhc2VfZDNkMTFfcmVzb3VyY2VzKHMpOworCisgICAgLy8vPCBGcmVlIHRoZSBoYXJkd2Fy ZSBkZXZpY2UgY29udGV4dCByZWZlcmVuY2UKKyAgICBhdl9idWZmZXJfdW5yZWYoJnMtPmh3X2Zy YW1lc19jdHhfb3V0KTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJnMtPmh3X2RldmljZV9jdHgpOwor CisgICAgLy8vPCBGcmVlIG9wdGlvbiBzdHJpbmdzCisgICAgYXZfZnJlZXAoJnMtPndfZXhwcik7 CisgICAgYXZfZnJlZXAoJnMtPmhfZXhwcik7Cit9CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBh ZCBzY2FsZV9kM2QxMV9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAg PSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8s CisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSBzY2FsZV9kM2QxMV9maWx0ZXJfZnJhbWUsCisgICAg fSwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBzY2FsZV9kM2QxMV9vdXRwdXRzW10g PSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAu dHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuY29uZmlnX3Byb3Bz ID0gc2NhbGVfZDNkMTFfY29uZmlnX3Byb3BzLAorICAgIH0sCit9OworCisjZGVmaW5lIE9GRlNF VCh4KSBvZmZzZXRvZihTY2FsZUQzRDExQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgKEFWX09Q VF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQorCitzdGF0 aWMgY29uc3QgQVZPcHRpb24gc2NhbGVfZDNkMTFfb3B0aW9uc1tdID0geworICAgIHsgIndpZHRo IiwgICJPdXRwdXQgdmlkZW8gd2lkdGgiLCAgT0ZGU0VUKHdfZXhwciksIEFWX09QVF9UWVBFX1NU UklORywgey5zdHIgPSAiaXcifSwgLmZsYWdzID0gRkxBR1MgfSwKKyAgICB7ICJoZWlnaHQiLCAi T3V0cHV0IHZpZGVvIGhlaWdodCIsIE9GRlNFVChoX2V4cHIpLCBBVl9PUFRfVFlQRV9TVFJJTkcs IHsuc3RyID0gImloIn0sIC5mbGFncyA9IEZMQUdTIH0sCisgICAgeyAiZm9ybWF0IiwgIk91dHB1 dCB2aWRlbyBwaXhlbCBmb3JtYXQiLCBPRkZTRVQoZm9ybWF0KSwgQVZfT1BUX1RZUEVfUElYRUxf Rk1ULCB7IC5pNjQgPSBBVl9QSVhfRk1UX05PTkUgfSwgSU5UX01JTiwgSU5UX01BWCwgLmZsYWdz PUZMQUdTIH0sCisgICAgeyBOVUxMIH0KK307CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyhzY2Fs ZV9kM2QxMSk7CisKK2NvbnN0IEZGRmlsdGVyIGZmX3ZmX3NjYWxlX2QzZDExID0geworICAgIC5w Lm5hbWUgICAgICAgICAgID0gInNjYWxlX2QzZDExIiwKKyAgICAucC5kZXNjcmlwdGlvbiAgICA9 IE5VTExfSUZfQ09ORklHX1NNQUxMKCJTY2FsZSB2aWRlbyB1c2luZyBEaXJlY3QzRDExIiksCisg ICAgLnByaXZfc2l6ZSAgICAgICAgPSBzaXplb2YoU2NhbGVEM0QxMUNvbnRleHQpLAorICAgIC5w LnByaXZfY2xhc3MgICAgID0gJnNjYWxlX2QzZDExX2NsYXNzLAorICAgIC5pbml0ICAgICAgICAg ICAgID0gc2NhbGVfZDNkMTFfaW5pdCwKKyAgICAudW5pbml0ICAgICAgICAgICA9IHNjYWxlX2Qz ZDExX3VuaW5pdCwKKyAgICBGSUxURVJfSU5QVVRTKHNjYWxlX2QzZDExX2lucHV0cyksCisgICAg RklMVEVSX09VVFBVVFMoc2NhbGVfZDNkMTFfb3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9Q SVhGTVQoQVZfUElYX0ZNVF9EM0QxMSksCisgICAgLnAuZmxhZ3MgICAgICAgICAgPSBBVkZJTFRF Ul9GTEFHX0hXREVWSUNFLAorICAgIC5mbGFnc19pbnRlcm5hbCAgID0gRkZfRklMVEVSX0ZMQUdf SFdGUkFNRV9BV0FSRSwKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMXZhLmMgYi9saWJhdnV0aWwvaHdjb250ZXh0X2Qz ZDExdmEuYwppbmRleCAxYTA0N2NlNTdiLi5hNTk0N2UxNjE4IDEwMDY0NAotLS0gYS9saWJhdnV0 aWwvaHdjb250ZXh0X2QzZDExdmEuYworKysgYi9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDExdmEu YwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgInRocmVhZC5oIgogI2luY2x1ZGUgImNvbXBh dC93MzJkbGZjbi5oIgogCisjZGVmaW5lIE1BWF9BUlJBWV9TSVpFIDY0IC8vIERyaXZlciBzcGVj aWZpY2F0aW9uIGxpbWl0cyBBcnJheVNpemUgdG8gNjQgZm9yIGRlY29kZXItYm91bmQgcmVzb3Vy Y2VzCisKIHR5cGVkZWYgSFJFU1VMVChXSU5BUEkgKlBGTl9DUkVBVEVfRFhHSV9GQUNUT1JZKShS RUZJSUQgcmlpZCwgdm9pZCAqKnBwRmFjdG9yeSk7CiAKIHN0YXRpYyBBVk9uY2UgZnVuY3Rpb25z X2xvYWRlZCA9IEFWX09OQ0VfSU5JVDsKQEAgLTI4OCw2ICsyOTAsOCBAQCBzdGF0aWMgaW50IGQz ZDExdmFfZnJhbWVzX2luaXQoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCkKICAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKICAgICB9CiAKKyAgICBjdHgtPmluaXRpYWxfcG9vbF9zaXplID0g RkZNSU4oY3R4LT5pbml0aWFsX3Bvb2xfc2l6ZSwgTUFYX0FSUkFZX1NJWkUpOworCiAgICAgdGV4 RGVzYyA9IChEM0QxMV9URVhUVVJFMkRfREVTQyl7CiAgICAgICAgIC5XaWR0aCAgICAgID0gY3R4 LT53aWR0aCwKICAgICAgICAgLkhlaWdodCAgICAgPSBjdHgtPmhlaWdodCwKQEAgLTM0MCwxOSAr MzQ0LDMwIEBAIHN0YXRpYyBpbnQgZDNkMTF2YV9nZXRfYnVmZmVyKEFWSFdGcmFtZXNDb250ZXh0 ICpjdHgsIEFWRnJhbWUgKmZyYW1lKQogewogICAgIEFWRDNEMTFGcmFtZURlc2NyaXB0b3IgKmRl c2M7CiAKLSAgICBmcmFtZS0+YnVmWzBdID0gYXZfYnVmZmVyX3Bvb2xfZ2V0KGN0eC0+cG9vbCk7 Ci0gICAgaWYgKCFmcmFtZS0+YnVmWzBdKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OwotCi0gICAgZGVzYyA9IChBVkQzRDExRnJhbWVEZXNjcmlwdG9yICopZnJhbWUtPmJ1ZlswXS0+ ZGF0YTsKKyAgICAvKioKKyAgICAgKiBMb29wIHVudGlsIGEgYnVmZmVyIGJlY29tZXMgYXZhaWxh YmxlIGZyb20gdGhlIHBvb2wuCisgICAgICogSW4gYSBmdWxsIGhhcmR3YXJlIHBpcGVsaW5lLCBh bGwgYnVmZmVycyBtYXkgYmUgdGVtcG9yYXJpbHkgaW4gdXNlIGJ5CisgICAgICogb3RoZXIgbW9k dWxlcyAoZW5jb2Rlci9maWx0ZXIvZGVjb2RlcikuIFJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGZh aWxpbmcKKyAgICAgKiB3aXRoIEVOT01FTSwgd2Ugd2FpdCBmb3IgYSBidWZmZXIgdG8gYmUgcmVs ZWFzZWQgYmFjayB0byB0aGUgcG9vbCwgd2hpY2gKKyAgICAgKiBtYWludGFpbnMgcGlwZWxpbmUg ZmxvdyBhbmQgcHJldmVudHMgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBmYWlsdXJlcworICAgICAq IGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgorICAgICAqLworICAgIGRvIHsKKyAgICAgICAgZnJh bWUtPmJ1ZlswXSA9IGF2X2J1ZmZlcl9wb29sX2dldChjdHgtPnBvb2wpOworICAgICAgICBpZiAo ZnJhbWUtPmJ1ZlswXSkgeworICAgICAgICAgICAgZGVzYyA9IChBVkQzRDExRnJhbWVEZXNjcmlw dG9yICopZnJhbWUtPmJ1ZlswXS0+ZGF0YTsKKyAgICAgICAgICAgIGZyYW1lLT5kYXRhWzBdID0g KHVpbnQ4X3QgKilkZXNjLT50ZXh0dXJlOworICAgICAgICAgICAgZnJhbWUtPmRhdGFbMV0gPSAo dWludDhfdCAqKWRlc2MtPmluZGV4OworICAgICAgICAgICAgZnJhbWUtPmZvcm1hdCAgPSBBVl9Q SVhfRk1UX0QzRDExOworICAgICAgICAgICAgZnJhbWUtPndpZHRoICAgPSBjdHgtPndpZHRoOwor ICAgICAgICAgICAgZnJhbWUtPmhlaWdodCAgPSBjdHgtPmhlaWdodDsKKyAgICAgICAgICAgIHJl dHVybiAwOworICAgICAgICB9CiAKLSAgICBmcmFtZS0+ZGF0YVswXSA9ICh1aW50OF90ICopZGVz Yy0+dGV4dHVyZTsKLSAgICBmcmFtZS0+ZGF0YVsxXSA9ICh1aW50OF90ICopZGVzYy0+aW5kZXg7 Ci0gICAgZnJhbWUtPmZvcm1hdCAgPSBBVl9QSVhfRk1UX0QzRDExOwotICAgIGZyYW1lLT53aWR0 aCAgID0gY3R4LT53aWR0aDsKLSAgICBmcmFtZS0+aGVpZ2h0ICA9IGN0eC0+aGVpZ2h0OworICAg ICAgICBhdl91c2xlZXAoNTAwKTsKKyAgICB9IHdoaWxlICgxKTsKIAotICAgIHJldHVybiAwOwor ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQgZDNkMTF2YV90cmFu c2Zlcl9nZXRfZm9ybWF0cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4LAotLSAKMi4zNC4xCgo= --_002_PN0P287MB14944168BEDAB0740FF204C7E148APN0P287MB1494INDP_ 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_PN0P287MB14944168BEDAB0740FF204C7E148APN0P287MB1494INDP_--