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 A5E5A4BDA0 for ; Thu, 22 May 2025 13:20:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 4CF1A68D7B4; Thu, 22 May 2025 16:20:34 +0300 (EEST) Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazon11021140.outbound.protection.outlook.com [40.107.57.140]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 15A0D68D10A for ; Thu, 22 May 2025 16:20:27 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mRQIAuF+RGsx5wz2bx+7zdrO+eAMeOgEOUChNndlHGVgNN2zIv8rLXzh7aqM2uWmk9oUyRbMAAB6p1nedQ009Hpwu8jeX0fv6PADEu32vNz2IZTGqA7+z3K0PzEp/ZTIoeQpkdbU/GS20pvfFCY2eOh3z5p1tzKs1l0iZPtK2hZxtxCg3tF9CSMhjZ+fYB0dajlHWd+cR3LA4DrWDIgosYU+jFmaKQMADO1s9AKZ4pRHW8ELV0ttXbZ6ELmaMbbR0HAYl8OGpO3xn/Cq9fZDJ6AztSHm5VwYdbAKzM81hP7hkREPNgKM0uF2J/WcWh0VSscBA7CjBjjSmG6Qik8ZtA== 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=cJz7y1AU6zwcVeawDsdUBFuwD1NKjeblFiJT0DJar3w=; b=GGRs2uNGVuMH5Z0W2wYju3wOvDYSrFqDgnRGEA1ndhUKIAZOVwGWUpZmxAEpq+VqN5R034m8xrZIjgh5BeoqqroTS4bzV/xW8kgYF3vg4onw8K4O43lnEY554r/QHL5wnTVmKL1r2Pk4AX7BcCBva3jzeYS09GZ5ckajT4mqazeW3RowdEB6/XkrjRlhMaJHXg68VBWGXKuRDcjXOvAwav0pa3eCDZQzsjxjxqKRAue/m5IHY2tvqVoPTRDjYIeIL39flwUHRcpvE+iaZEX2KCVOuifTvrpo7wpaZU5AHNBweqmklAe0xStKFEV0oB7eWsLHP8UGqP5n+kA4N0tZVg== 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=cJz7y1AU6zwcVeawDsdUBFuwD1NKjeblFiJT0DJar3w=; b=kUo/ojPwgKMwDBwdCuXFGCxvfHXpX+BGppLsJeCzg7/5aQvkR5D3BBnBjR8CvEkjlUHkiXbro0MV9XHGh3AlRICnwXita+SNHBNInO5qACcZjS5FNmZXeWkHDKYqWDWuOdQA+Ezy6bdnb1t+4UDTTFcFqHxRgjSFtAIoheR+2g+8ylW3k11yzplgl1f1KtO+LiMRyZYrN10HB7epkphUzbWmJla85fpcqN7FOaj+1SmsbqeBAgTzN05AwDPltH3ecntVmnDRWTPpdsLqjDR14j084QCijTx96+slOeg/K6yUOioqBagqR0upE4OEQ/ueJREH8oZZ74zmi56UA/pvfQ== Received: from PN0P287MB1494.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:186::9) by MA0P287MB0281.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:b3::14) 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:20:17 +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:20:17 +0000 From: Dash Santosh Sathyanarayanan To: FFmpeg development discussions and patches Thread-Topic: [PATCH 1/2] avfilter: add scale_d3d11 filter Thread-Index: AQHbyxskU+BZwNxA8Uak9GOiqoIdXQ== Date: Thu, 22 May 2025 13:20:17 +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_|MA0P287MB0281:EE_ x-ms-office365-filtering-correlation-id: 6f15b7f6-7a18-4169-32e8-08dd9933652a 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?7PuNXSpKfROknqznIiw1u+2XcDqP5gD15c/d40UpHGtCTksQlhf6VcwWhn?= =?iso-8859-1?Q?eHbQNJY4gE8CAMcAMEiJ6Jp96km4fcV54kUwm45z59vbpV1sYJEHGKAn64?= =?iso-8859-1?Q?Iufwh10jHy5/eemLjboAiqnwuIFSWS+A7EOmMuAJSizf32DOJ643LTU7QL?= =?iso-8859-1?Q?ruU4hfZRbHpEOcaBlDw+lmg163wIgnyrIZzQdi3zYGgNuofbyeN9TuV+Nx?= =?iso-8859-1?Q?B7eUR7DcXpFeb4tjYJqLTZK52IXTki+2stmD5zDMCyknm9B0+N9ihp5+tQ?= =?iso-8859-1?Q?9NB5zKwNJ8NT1ItoTuLqyVrHULkoxt4owbuYUL00HdQlLlvQ+YIVifmW/8?= =?iso-8859-1?Q?02JdbGiCmdu1+s9mMUkeZRAuyFDbtTYuQMrp3hpbrYAw+jj84It2/O7tkz?= =?iso-8859-1?Q?WSR53d9rB6zfgRMZHo3MdLMCGP6pKH9NA55NiBuy6ZROnS3ZEtyl32siZ7?= =?iso-8859-1?Q?wzw7jM/z18Sd8POTstdg4jXMIYCyPUanzwshw6JuO9xhQ37pQumGzhuqRt?= =?iso-8859-1?Q?9V7F9OEXC8U8BXka0xQIuMUeRYxwYBdqQc8znDeFQ14+TH4iZTnc2z5X5j?= =?iso-8859-1?Q?lDWgsVf3iFHIzKPxcnH93iRr81sC7WAF2EVJVkoWf66P7bStZrt1711yGS?= =?iso-8859-1?Q?qcZl6SyN8J6QJjJNZtAG3nRIgP2ADpd8UAKUoa+2O7ldV1kDwaW94H81oq?= =?iso-8859-1?Q?STqes0Rm1mMQcO2QlzZDn/GMUKuqvw25ox4NTEedCSOBhY5YFDvhWGeWmM?= =?iso-8859-1?Q?WDfuRJOLn4Lo2NbY7v0vdcYxeSju8jOzz3U6XsaTkBrC+Cy4xY2RyHRvTF?= =?iso-8859-1?Q?uhYnGKfg2qg6zVKeaNpEVn6mk1+EDvd0Y3U6ONZGSXE3uovmeuUhHZFm7u?= =?iso-8859-1?Q?jUSGMOb1GB+/YlyWNzFvPvzNjAD9UZmNlgvDxpTq/R7i9ueHl2j3U4V+4C?= =?iso-8859-1?Q?z0DPnDPaJBMq85/6ydH/aY7OiXU6NXqogeJVyTGyZTI9x8i/k4wD9V4+cc?= =?iso-8859-1?Q?ZTQej1ej7c4Ds6ePYWPq+CkBuJbCF69Zd/Eyj1tgjk5Mb+hMObdhSWJKoZ?= =?iso-8859-1?Q?LFqD/sWKpUhoFj+ub/M1Du+qPmQgkLJlV4LbJIFAfUprk67hKMjJXC2kzy?= =?iso-8859-1?Q?sTwGq90lRbUGV98U7s50l6DnG1LVk+yaD+0ZRGJe5ePvn55eHqVg5tX3hX?= =?iso-8859-1?Q?Cqbv/gW/rWfnYMp7QngQBeehB2nDWL7PzksxpRBvwHaS4IaJqhme1LpiNz?= =?iso-8859-1?Q?YL1q4CkmC66ULYYVJGJgE/uA5SZFleUlctWuujPefwsw362ly8VJx2fLVw?= =?iso-8859-1?Q?jAeOdDEVSCsrjz1Y39e8W2GscWrISklXLGDihFmHfVPiZsvzHgE3kPtMyK?= =?iso-8859-1?Q?jCfEpmTJ43X9427uxPRjHZRA7BUy0fgdwfdYLdPnGNvRPEObXPUVMromnh?= =?iso-8859-1?Q?yuX4HP5MycZhwl9TOS7JzJZTrqKE0LzcoLuxKAo5ZQbkCwU2Mhr6iLGRVs?= =?iso-8859-1?Q?tEr6IIJYxWZu5CaUBhcu7Ci8IEEhkdnVsU1h9aRAslC9pHoPjgQ12c05tQ?= =?iso-8859-1?Q?1blmXsc=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?CXudza5n7JNeniGBBJ8nDT8coRmBHLSh12By/B4syrdCMave3LApe6AiYr?= =?iso-8859-1?Q?DYDBDefufvq0zSLHS2wLRBfC1MQkMe9UuEXLV4haxEg0T5HbQeJaGYq3Kc?= =?iso-8859-1?Q?l9YC9oQ554ffmuTp+ZdDNvbbyGxPluvrATLqcICee9+w02LDTygQf/fkf7?= =?iso-8859-1?Q?+QK6rYXM8Dfoc/VJAB/PtXe4/zfMW6uMwtZVdfB9zY/Rd9z1ibcfEcCnJQ?= =?iso-8859-1?Q?0D/ofzXP2CX/SKaQvaWkFSlO572/09jYaEY1KqzrVKI79r1vq0z8vYmZWS?= =?iso-8859-1?Q?0WSQYB5kCPtvs2FiDYQLDM/84jWyUsLaOCqu2VLy63D8gGzGY4oMOQ2d1M?= =?iso-8859-1?Q?MRI0dvHRa4Dmw9fiTAbBPLDFNWta2u9sK7TWDT4Phuil5zU1mPcivjUlBL?= =?iso-8859-1?Q?jhmBihbA4R9CY72t+sJsCa02cIgJT+dLFWekMGxJASPuYmFF64TCBD8d7I?= =?iso-8859-1?Q?/g28SoNQ8DghH+qWNLK17JCEJUMVs7gJGduQasz0RJijhCD9Y7NPZsKdSM?= =?iso-8859-1?Q?tDAxlicZtPpx4VFVK5wuev/CFoQqjVkyscbmjt1XHHcWly1qDVP0AOcscy?= =?iso-8859-1?Q?aMQq6sEVkAehgAHIeXBJhffrEPDNpEc1XOdC9kTRNMJPyAQ6eSd732jrqG?= =?iso-8859-1?Q?+rF6B3voq8taaRhjTeI4urh/tp2+4XbPtFyJLZEiAt48NiIDTzq9+Cnmz3?= =?iso-8859-1?Q?Qa663XJZ462LK7wSQ4/v3EmYsSrC6gbbZonw+tmudeqA75dgMDtNSySAGc?= =?iso-8859-1?Q?ZzEJJPeiLZPJ/peVewdwlVjxwhn4QYaK6t5sstuU/HL5irKnqsQepkZ4QI?= =?iso-8859-1?Q?rdlw8yMK63O4ll8QCNUf0xncivrZWzDPFW2CQuWbk5enBek0BKIQ/f+m5U?= =?iso-8859-1?Q?0N3w4qTJUdMru1/YPPFUSzW7BREzasZ5ETWr65YhtmpBieidIDC9947uHR?= =?iso-8859-1?Q?zEqkxxXOKDdAXS3rSQRRr5MheCwIH3JebIviuN2ALSp1apiVLqNRYG5w1j?= =?iso-8859-1?Q?SD0cUQRLG39cAW/8zINfQr6e8le/wjvGWy1aPV5sXnS+zOb6qyULoWfcHb?= =?iso-8859-1?Q?vtXVzZ35IeyTB316Wn+X3XU4Ky2TYrzrMRXSJT4f0r27whB94Xdtt7itsE?= =?iso-8859-1?Q?6fTU5DtcSfcA2NIHZKXfi1JWefk8ELv6UHc9ro3aSQBUGiaUGRlvR5qAvw?= =?iso-8859-1?Q?gOmj5k1bjlkp5KH+cLQge/7Y6gQiDIJFjXzRGFNLFEdPEwdIdO9BNSCdFm?= =?iso-8859-1?Q?h9lmuzRMoYzvpg4VtSFIieeCSuzX9YcmHt3gxCc1QTDtoaIdnNLrwgBSt2?= =?iso-8859-1?Q?NB97dW0NVk0g8hu/j8ZCRdmhBb5Jp3TtPT+Mm1IA6Y9kBLAZgkFHurRloj?= =?iso-8859-1?Q?ZBGMMZcdWBSjRWpUu1qXtLvm2aMf8hBG56bJMUaMRfRPE2IO1777coYXXt?= =?iso-8859-1?Q?I3KGiy7dhUZ7CqeWX+e9aSMbiO1ylgcsJ92K1e8AAkagL0UEqmsbX89Nu/?= =?iso-8859-1?Q?8kf46UrouUwRzwKc8jTW1JZ58pbfLFLZaP7IGVMfw4rJP0WUSgmH9dY6O5?= =?iso-8859-1?Q?sey8ohJKRjke7ZAvLF+dbj9ESfPP+LchRYorjODI1o6CWvz9GjiFBWkzZs?= =?iso-8859-1?Q?7BLd64e+JoWHwbyfwPAnrlstJWubN36Sar74nKOG4j2R5pqru8EL4k6bea?= =?iso-8859-1?Q?FPrrIxSgBrHXHGr7UJaVAREbZRN6ERNVpoUPvuvwjDoY0I/BD4ozzSkNJ7?= =?iso-8859-1?Q?YKnoOELjlTO/LAEziglRnbbUI=3D?= Content-Type: multipart/mixed; boundary="_002_PN0P287MB14944F67F6F53BA6B2C85E9DE199APN0P287MB1494INDP_" 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: 6f15b7f6-7a18-4169-32e8-08dd9933652a X-MS-Exchange-CrossTenant-originalarrivaltime: 22 May 2025 13:20:17.5917 (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: haITq607K0opKccGo5zgX2WInleLoYXssuZdZO4ld+gTv8aZ0FgoIKhFXyqrecx+70eyRqiB5hKM0awCWjq2xA6yVKfzT8RncmftsavbDSnThe8csa+PpCt/zEzKHdimckxYFQbR2xSVI0qaJruWlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MA0P287MB0281 Subject: [FFmpeg-devel] [PATCH 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 Cc: Sachin Prakash Kumar Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --_002_PN0P287MB14944F67F6F53BA6B2C85E9DE199APN0P287MB1494INDP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This commit introduces a new hardware-accelerated video filter, scale_d3d11= ,=0A= which performs scaling and format conversion using Direct3D 11. The filter = enables=0A= efficient GPU-based scaling and pixel format conversion (p010 to nv12), red= ucing=0A= CPU overhead and latency in video pipelines.=0A= ---=0A= Changelog | 1 +=0A= libavcodec/decode.c | 2 +-=0A= libavcodec/dxva2.c | 3 +=0A= libavfilter/Makefile | 1 +=0A= libavfilter/allfilters.c | 1 +=0A= libavfilter/vf_scale_d3d11.c | 480 ++++++++++++++++++++++++++++++++++=0A= libavutil/hwcontext_d3d11va.c | 40 ++-=0A= 7 files changed, 514 insertions(+), 14 deletions(-)=0A= create mode 100644 libavfilter/vf_scale_d3d11.c=0A= =0A= diff --git a/Changelog b/Changelog=0A= index 4217449438..68610a63d0 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= +- vf_scale_d3d11 filter=0A= =0A= =0A= version 7.1:=0A= diff --git a/libavcodec/decode.c b/libavcodec/decode.c=0A= index c2b2dd6e3b..a796ae7930 100644=0A= --- a/libavcodec/decode.c=0A= +++ b/libavcodec/decode.c=0A= @@ -1079,7 +1079,7 @@ int ff_decode_get_hw_frames_ctx(AVCodecContext *avctx= ,=0A= if (frames_ctx->initial_pool_size) {=0A= // We guarantee 4 base work surfaces. The function above guarantee= s 1=0A= // (the absolute minimum), so add the missing count.=0A= - frames_ctx->initial_pool_size +=3D 3;=0A= + frames_ctx->initial_pool_size +=3D 33;=0A= }=0A= =0A= ret =3D av_hwframe_ctx_init(avctx->hw_frames_ctx);=0A= diff --git a/libavcodec/dxva2.c b/libavcodec/dxva2.c=0A= index 22ecd5acaf..37dab6cd68 100644=0A= --- a/libavcodec/dxva2.c=0A= +++ b/libavcodec/dxva2.c=0A= @@ -647,6 +647,9 @@ int ff_dxva2_common_frame_params(AVCodecContext *avctx,= =0A= AVD3D11VAFramesContext *frames_hwctx =3D frames_ctx->hwctx;=0A= =0A= frames_hwctx->BindFlags |=3D D3D11_BIND_DECODER;=0A= + if (frames_ctx->sw_format =3D=3D AV_PIX_FMT_NV12) {=0A= + frames_hwctx->BindFlags |=3D D3D11_BIND_VIDEO_ENCODER;=0A= + }=0A= }=0A= #endif=0A= =0A= diff --git a/libavfilter/Makefile b/libavfilter/Makefile=0A= index 0effe4127f..dc46e946f2 100644=0A= --- a/libavfilter/Makefile=0A= +++ b/libavfilter/Makefile=0A= @@ -461,6 +461,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 5ea33cdf01..a20fff57e7 100644=0A= --- a/libavfilter/allfilters.c=0A= +++ b/libavfilter/allfilters.c=0A= @@ -435,6 +435,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..e079424002=0A= --- /dev/null=0A= +++ b/libavfilter/vf_scale_d3d11.c=0A= @@ -0,0 +1,480 @@=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= +enum OutputFormat {=0A= + OUTPUT_NV12 =3D 0,=0A= + OUTPUT_P010 =3D 1,=0A= +};=0A= +=0A= +typedef struct ScaleD3D11Context {=0A= + const AVClass *classCtx;=0A= + char *w_expr;=0A= + char *h_expr;=0A= + int output_format_opt;=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->output_format_opt) {=0A= + case OUTPUT_NV12:=0A= + s->output_format =3D DXGI_FORMAT_NV12;=0A= + break;=0A= + case OUTPUT_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= + enum AVPixelFormat sw_format;=0A= + switch (s->output_format_opt) {=0A= + case OUTPUT_NV12:=0A= + sw_format =3D AV_PIX_FMT_NV12;=0A= + break;=0A= + case OUTPUT_P010:=0A= + sw_format =3D AV_PIX_FMT_P010;=0A= + break;=0A= + default:=0A= + return AVERROR(EINVAL);=0A= + }=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 sw_format;=0A= + frames_ctx->width =3D s->width;=0A= + frames_ctx->height =3D s->height;=0A= + frames_ctx->initial_pool_size =3D 30; ///< Adjust pool size as needed= =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= + { "output_fmt", "Output format", OFFSET(output_format_opt), AV_OPT_TYP= E_INT, {.i64 =3D OUTPUT_NV12}, 0, OUTPUT_P010, FLAGS, "fmt" },=0A= + { "nv12", "NV12 format", 0, AV_OPT_TYPE_CONST, {.i64 =3D OUTPUT_NV12},= 0, 0, FLAGS, "fmt" },=0A= + { "p010", "P010 format", 0, AV_OPT_TYPE_CONST, {.i64 =3D OUTPUT_P010},= 0, 0, FLAGS, "fmt" },=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..36694896e4 100644=0A= --- a/libavutil/hwcontext_d3d11va.c=0A= +++ b/libavutil/hwcontext_d3d11va.c=0A= @@ -82,6 +82,8 @@ typedef struct D3D11VAFramesContext {=0A= =0A= int nb_surfaces;=0A= int nb_surfaces_used;=0A= + int retries;=0A= + int max_retries;=0A= =0A= DXGI_FORMAT format;=0A= =0A= @@ -258,7 +260,9 @@ static AVBufferRef *d3d11va_pool_alloc(void *opaque, si= ze_t size)=0A= ID3D11Texture2D_GetDesc(hwctx->texture, &texDesc);=0A= =0A= if (s->nb_surfaces_used >=3D texDesc.ArraySize) {=0A= - av_log(ctx, AV_LOG_ERROR, "Static surface pool size exceeded.\n");= =0A= + if (s->retries >=3D s->max_retries) {=0A= + av_log(ctx, AV_LOG_ERROR, "Static surface pool size exceeded.\= n");=0A= + }=0A= return NULL;=0A= }=0A= =0A= @@ -339,20 +343,30 @@ static int d3d11va_frames_init(AVHWFramesContext *ctx= )=0A= static int d3d11va_get_buffer(AVHWFramesContext *ctx, AVFrame *frame)=0A= {=0A= AVD3D11FrameDescriptor *desc;=0A= + D3D11VAFramesContext *s =3D ctx->hwctx;=0A= + s->retries =3D 0;=0A= + s->max_retries =3D 50;=0A= +=0A= + while (s->retries < s->max_retries) {=0A= + =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= +=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= +=0A= + return 0;=0A= + }=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= - 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(1000);=0A= + s->retries++;=0A= + }=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_PN0P287MB14944F67F6F53BA6B2C85E9DE199APN0P287MB1494INDP_ Content-Type: application/octet-stream; name="0001-avfilter-add-scale_d3d11-filter.patch" Content-Description: 0001-avfilter-add-scale_d3d11-filter.patch Content-Disposition: attachment; filename="0001-avfilter-add-scale_d3d11-filter.patch"; size=22833; creation-date="Thu, 22 May 2025 13:12:43 GMT"; modification-date="Thu, 22 May 2025 13:12:43 GMT" Content-Transfer-Encoding: base64 RnJvbSAzMTY4YWRiNDc0MDEwNzA5NzVmMjIwZTEyYTY4MThiMTNjMGZkMThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aHlhbmFyYXlhbmFuQG11 bHRpY29yZXdhcmVpbmMuY29tPgpEYXRlOiBUaHUsIDIyIE1heSAyMDI1IDA1OjMzOjM2IC0wNzAw ClN1YmplY3Q6IFtQQVRDSCAxLzJdIGF2ZmlsdGVyOiBhZGQgc2NhbGVfZDNkMTEgZmlsdGVyCgpU aGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGhhcmR3YXJlLWFjY2VsZXJhdGVkIHZpZGVvIGZp bHRlciwgc2NhbGVfZDNkMTEsCndoaWNoIHBlcmZvcm1zIHNjYWxpbmcgYW5kIGZvcm1hdCBjb252 ZXJzaW9uIHVzaW5nIERpcmVjdDNEIDExLiBUaGUgZmlsdGVyIGVuYWJsZXMKZWZmaWNpZW50IEdQ VS1iYXNlZCBzY2FsaW5nIGFuZCBwaXhlbCBmb3JtYXQgY29udmVyc2lvbiAocDAxMCB0byBudjEy KSwgcmVkdWNpbmcKQ1BVIG92ZXJoZWFkIGFuZCBsYXRlbmN5IGluIHZpZGVvIHBpcGVsaW5lcy4K LS0tCiBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWJhdmNvZGVjL2Rl Y29kZS5jICAgICAgICAgICB8ICAgMiArLQogbGliYXZjb2RlYy9keHZhMi5jICAgICAgICAgICAg fCAgIDMgKwogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogbGliYXZmaWx0 ZXIvYWxsZmlsdGVycy5jICAgICAgfCAgIDEgKwogbGliYXZmaWx0ZXIvdmZfc2NhbGVfZDNkMTEu YyAgfCA0ODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZ1dGlsL2h3 Y29udGV4dF9kM2QxMXZhLmMgfCAgNDAgKystCiA3IGZpbGVzIGNoYW5nZWQsIDUxNCBpbnNlcnRp b25zKCspLCAxNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92 Zl9zY2FsZV9kM2QxMS5jCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCmluZGV4 IDQyMTc0NDk0MzguLjY4NjEwYTYzZDAgMTAwNjQ0Ci0tLSBhL0NoYW5nZWxvZworKysgYi9DaGFu Z2Vsb2cKQEAgLTE4LDYgKzE4LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAtIEFQViBlbmNvZGluZyBz dXBwb3J0IHRocm91Z2ggYSBsaWJvcGVuYXB2IHdyYXBwZXIKIC0gVlZDIGRlY29kZXIgc3VwcG9y dHMgYWxsIGNvbnRlbnQgb2YgU0NDIChTY3JlZW4gQ29udGVudCBDb2RpbmcpOgogICBJQkMgKElu dGVyIEJsb2NrIENvcHkpLCBQYWxldHRlIE1vZGUgYW5kIEFDVCAoQWRhcHRpdmUgQ29sb3IgVHJh bnNmb3JtCistIHZmX3NjYWxlX2QzZDExIGZpbHRlcgogCiAKIHZlcnNpb24gNy4xOgpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9kZWNvZGUuYyBiL2xpYmF2Y29kZWMvZGVjb2RlLmMKaW5kZXggYzJi MmRkNmUzYi4uYTc5NmFlNzkzMCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9kZWNvZGUuYworKysg Yi9saWJhdmNvZGVjL2RlY29kZS5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQCBpbnQgZmZfZGVjb2Rl X2dldF9od19mcmFtZXNfY3R4KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKICAgICBpZiAoZnJhbWVz X2N0eC0+aW5pdGlhbF9wb29sX3NpemUpIHsKICAgICAgICAgLy8gV2UgZ3VhcmFudGVlIDQgYmFz ZSB3b3JrIHN1cmZhY2VzLiBUaGUgZnVuY3Rpb24gYWJvdmUgZ3VhcmFudGVlcyAxCiAgICAgICAg IC8vICh0aGUgYWJzb2x1dGUgbWluaW11bSksIHNvIGFkZCB0aGUgbWlzc2luZyBjb3VudC4KLSAg ICAgICAgZnJhbWVzX2N0eC0+aW5pdGlhbF9wb29sX3NpemUgKz0gMzsKKyAgICAgICAgZnJhbWVz X2N0eC0+aW5pdGlhbF9wb29sX3NpemUgKz0gMzM7CiAgICAgfQogCiAgICAgcmV0ID0gYXZfaHdm cmFtZV9jdHhfaW5pdChhdmN0eC0+aHdfZnJhbWVzX2N0eCk7CmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2R4dmEyLmMgYi9saWJhdmNvZGVjL2R4dmEyLmMKaW5kZXggMjJlY2Q1YWNhZi4uMzdkYWI2 Y2Q2OCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9keHZhMi5jCisrKyBiL2xpYmF2Y29kZWMvZHh2 YTIuYwpAQCAtNjQ3LDYgKzY0Nyw5IEBAIGludCBmZl9keHZhMl9jb21tb25fZnJhbWVfcGFyYW1z KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKICAgICAgICAgQVZEM0QxMVZBRnJhbWVzQ29udGV4dCAq ZnJhbWVzX2h3Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7CiAKICAgICAgICAgZnJhbWVzX2h3Y3R4 LT5CaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9ERUNPREVSOworICAgICAgICBpZiAoZnJhbWVzX2N0 eC0+c3dfZm9ybWF0ID09IEFWX1BJWF9GTVRfTlYxMikgeworICAgICAgICAgICAgZnJhbWVzX2h3 Y3R4LT5CaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9WSURFT19FTkNPREVSOworICAgICAgICB9CiAg ICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZm aWx0ZXIvTWFrZWZpbGUKaW5kZXggMGVmZmU0MTI3Zi4uZGM0NmU5NDZmMiAxMDA2NDQKLS0tIGEv bGliYXZmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKQEAgLTQ2MSw2 ICs0NjEsNyBAQCBPQkpTLSQoQ09ORklHX1JPQkVSVFNfT1BFTkNMX0ZJTFRFUikgICAgICAgICAr PSB2Zl9jb252b2x1dGlvbl9vcGVuY2wubyBvcGVuY2wubwogT0JKUy0kKENPTkZJR19ST1RBVEVf RklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfcm90YXRlLm8KIE9CSlMtJChDT05GSUdfU0FC X0ZJTFRFUikgICAgICAgICAgICAgICAgICAgICs9IHZmX3NhYi5vCiBPQkpTLSQoQ09ORklHX1ND QUxFX0ZJTFRFUikgICAgICAgICAgICAgICAgICArPSB2Zl9zY2FsZS5vIHNjYWxlX2V2YWwubyBm cmFtZXN5bmMubworT0JKUy0kKENPTkZJR19TQ0FMRV9EM0QxMV9GSUxURVIpICAgICAgICAgICAg Kz0gdmZfc2NhbGVfZDNkMTEubyBzY2FsZV9ldmFsLm8KIE9CSlMtJChDT05GSUdfU0NBTEVfQ1VE QV9GSUxURVIpICAgICAgICAgICAgICs9IHZmX3NjYWxlX2N1ZGEubyBzY2FsZV9ldmFsLm8gXAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmZfc2NhbGVf Y3VkYS5wdHgubyBjdWRhL2xvYWRfaGVscGVyLm8KIE9CSlMtJChDT05GSUdfU0NBTEVfTlBQX0ZJ TFRFUikgICAgICAgICAgICAgICs9IHZmX3NjYWxlX25wcC5vIHNjYWxlX2V2YWwubwpkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5j CmluZGV4IDVlYTMzY2RmMDEuLmEyMGZmZjU3ZTcgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL2Fs bGZpbHRlcnMuYworKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKQEAgLTQzNSw2ICs0MzUs NyBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGU7CiBleHRlcm4gY29uc3QgRkZG aWx0ZXIgZmZfdmZfdnBwX2FtZjsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9zcl9hbWY7 CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGVfY3VkYTsKK2V4dGVybiBjb25zdCBG RkZpbHRlciBmZl92Zl9zY2FsZV9kM2QxMTsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9z Y2FsZV9ucHA7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGVfcXN2OwogZXh0ZXJu IGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3NjYWxlX3ZhYXBpOwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0 ZXIvdmZfc2NhbGVfZDNkMTEuYyBiL2xpYmF2ZmlsdGVyL3ZmX3NjYWxlX2QzZDExLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTA3OTQyNDAwMgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2ZmlsdGVyL3ZmX3NjYWxlX2QzZDExLmMKQEAgLTAsMCArMSw0ODAgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgTXVsdGljb3Jld1dhcmUsIEluYy4KKyAqCisgKiBBdXRo b3JzOiBEYXNoIFNhbnRvc2ggPGRhc2guc2F0aGFuYXRheWFuYW5AbXVsdGljb3Jld2FyZWluYy5j b20+CisgKiAgICAgICAgICBTYWNoaW4gPHNhY2hpbi5wcmFrYXNoQG11bHRpY29yZXdhcmVpbmMu Y29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi bGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCisjaW5jbHVk ZSAiY29tcGF0L3czMmRsZmNuLmgiCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0Lmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMXZhLmgiCisKKyNpbmNsdWRlICJm aWx0ZXJzLmgiCisjaW5jbHVkZSAic2NhbGVfZXZhbC5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisK K2VudW0gT3V0cHV0Rm9ybWF0IHsKKyAgICBPVVRQVVRfTlYxMiA9IDAsCisgICAgT1VUUFVUX1Aw MTAgPSAxLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgU2NhbGVEM0QxMUNvbnRleHQgeworICAgIGNv bnN0IEFWQ2xhc3MgKmNsYXNzQ3R4OworICAgIGNoYXIgKndfZXhwcjsKKyAgICBjaGFyICpoX2V4 cHI7CisgICAgaW50IG91dHB1dF9mb3JtYXRfb3B0OworCisgICAgLy8vPCBEM0QxMSBvYmplY3Rz CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u dGV4dDsKKyAgICBJRDNEMTFWaWRlb0RldmljZSAqdmlkZW9EZXZpY2U7CisgICAgSUQzRDExVmlk ZW9Qcm9jZXNzb3IgKnByb2Nlc3NvcjsKKyAgICBJRDNEMTFWaWRlb1Byb2Nlc3NvckVudW1lcmF0 b3IgKmVudW1lcmF0b3I7CisgICAgSUQzRDExVmlkZW9Qcm9jZXNzb3JPdXRwdXRWaWV3ICpvdXRw dXRWaWV3OworICAgIElEM0QxMVZpZGVvUHJvY2Vzc29ySW5wdXRWaWV3ICppbnB1dFZpZXc7CisK KyAgICAvLy88IEJ1ZmZlciByZWZlcmVuY2VzCisgICAgQVZCdWZmZXJSZWYgKmh3X2RldmljZV9j dHg7CisgICAgQVZCdWZmZXJSZWYgKmh3X2ZyYW1lc19jdHhfb3V0OworCisgICAgLy8vPCBEaW1l bnNpb25zIGFuZCBmb3JtYXRzCisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgaW50IGlucHV0 V2lkdGgsIGlucHV0SGVpZ2h0OworICAgIERYR0lfRk9STUFUIGlucHV0X2Zvcm1hdDsKKyAgICBE WEdJX0ZPUk1BVCBvdXRwdXRfZm9ybWF0OworfSBTY2FsZUQzRDExQ29udGV4dDsKKworc3RhdGlj IGF2X2NvbGQgaW50IHNjYWxlX2QzZDExX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpIHsKKyAg ICAvLy88IGFsbCByZWFsIHdvcmsgaXMgZG9uZSBpbiBjb25maWdfcHJvcHMgYW5kIGZpbHRlcl9m cmFtZQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2QzZDExX3Jlc291 cmNlcyhTY2FsZUQzRDExQ29udGV4dCAqcykgeworICAgIGlmIChzLT5vdXRwdXRWaWV3KSB7Cisg ICAgICAgIHMtPm91dHB1dFZpZXctPmxwVnRibC0+UmVsZWFzZShzLT5vdXRwdXRWaWV3KTsKKyAg ICAgICAgcy0+b3V0cHV0VmlldyA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHMtPnByb2Nlc3Nv cikgeworICAgICAgICBzLT5wcm9jZXNzb3ItPmxwVnRibC0+UmVsZWFzZShzLT5wcm9jZXNzb3Ip OworICAgICAgICBzLT5wcm9jZXNzb3IgPSBOVUxMOworICAgIH0KKworICAgIGlmIChzLT5lbnVt ZXJhdG9yKSB7CisgICAgICAgIHMtPmVudW1lcmF0b3ItPmxwVnRibC0+UmVsZWFzZShzLT5lbnVt ZXJhdG9yKTsKKyAgICAgICAgcy0+ZW51bWVyYXRvciA9IE5VTEw7CisgICAgfQorCisgICAgaWYg KHMtPnZpZGVvRGV2aWNlKSB7CisgICAgICAgIHMtPnZpZGVvRGV2aWNlLT5scFZ0YmwtPlJlbGVh c2Uocy0+dmlkZW9EZXZpY2UpOworICAgICAgICBzLT52aWRlb0RldmljZSA9IE5VTEw7CisgICAg fQorfQorCitzdGF0aWMgaW50IHNjYWxlX2QzZDExX2NvbmZpZ3VyZV9wcm9jZXNzb3IoU2NhbGVE M0QxMUNvbnRleHQgKnMsIEFWRmlsdGVyQ29udGV4dCAqY3R4KSB7CisgICAgSFJFU1VMVCBocjsK KworICAgIHN3aXRjaCAocy0+b3V0cHV0X2Zvcm1hdF9vcHQpIHsKKyAgICAgICAgY2FzZSBPVVRQ VVRfTlYxMjoKKyAgICAgICAgICAgIHMtPm91dHB1dF9mb3JtYXQgPSBEWEdJX0ZPUk1BVF9OVjEy OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUUFVUX1AwMTA6CisgICAgICAg ICAgICBzLT5vdXRwdXRfZm9ybWF0ID0gRFhHSV9GT1JNQVRfUDAxMDsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiSW52YWxpZCBvdXRwdXQgZm9ybWF0IHNwZWNpZmllZFxuIik7CisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIC8vLzwgR2V0IEQzRDExIGRldmlj ZSBhbmQgY29udGV4dCBmcm9tIGhhcmR3YXJlIGRldmljZSBjb250ZXh0CisgICAgQVZIV0Rldmlj ZUNvbnRleHQgKmh3Y3R4ID0gKEFWSFdEZXZpY2VDb250ZXh0ICopcy0+aHdfZGV2aWNlX2N0eC0+ ZGF0YTsKKyAgICBBVkQzRDExVkFEZXZpY2VDb250ZXh0ICpkM2QxMV9od2N0eCA9IChBVkQzRDEx VkFEZXZpY2VDb250ZXh0ICopaHdjdHgtPmh3Y3R4OworICAgIHMtPmRldmljZSA9IGQzZDExX2h3 Y3R4LT5kZXZpY2U7CisgICAgcy0+Y29udGV4dCA9IGQzZDExX2h3Y3R4LT5kZXZpY2VfY29udGV4 dDsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiQ29uZmlndXJpbmcgRDNEMTEg dmlkZW8gcHJvY2Vzc29yOiAlZHglZCAtPiAlZHglZFxuIiwKKyAgICAgICAgICAgcy0+aW5wdXRX aWR0aCwgcy0+aW5wdXRIZWlnaHQsIHMtPndpZHRoLCBzLT5oZWlnaHQpOworCisgICAgLy8vPCBE ZWZpbmUgdGhlIHZpZGVvIHByb2Nlc3NvciBjb250ZW50IGRlc2NyaXB0aW9uCisgICAgRDNEMTFf VklERU9fUFJPQ0VTU09SX0NPTlRFTlRfREVTQyBjb250ZW50RGVzYyA9IHsKKyAgICAgICAgLklu cHV0RnJhbWVGb3JtYXQgPSBEM0QxMV9WSURFT19GUkFNRV9GT1JNQVRfUFJPR1JFU1NJVkUsCisg ICAgICAgIC5JbnB1dFdpZHRoID0gcy0+aW5wdXRXaWR0aCwKKyAgICAgICAgLklucHV0SGVpZ2h0 ID0gcy0+aW5wdXRIZWlnaHQsCisgICAgICAgIC5PdXRwdXRXaWR0aCA9IHMtPndpZHRoLAorICAg ICAgICAuT3V0cHV0SGVpZ2h0ID0gcy0+aGVpZ2h0LAorICAgICAgICAuVXNhZ2UgPSBEM0QxMV9W SURFT19VU0FHRV9QTEFZQkFDS19OT1JNQUwsCisgICAgfTsKKworICAgIC8vLzwgUXVlcnkgdmlk ZW8gZGV2aWNlIGludGVyZmFjZQorICAgIGhyID0gcy0+ZGV2aWNlLT5scFZ0YmwtPlF1ZXJ5SW50 ZXJmYWNlKHMtPmRldmljZSwgJklJRF9JRDNEMTFWaWRlb0RldmljZSwgKHZvaWQgKiopJnMtPnZp ZGVvRGV2aWNlKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IEQzRDExIHZpZGVvIGRldmljZSBpbnRlcmZhY2U6 IEhSRVNVTFQgMHglbFhcbiIsIGhyKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgLy8vPCBDcmVhdGUgdmlkZW8gcHJvY2Vzc29yIGVudW1lcmF0b3IKKyAg ICBociA9IHMtPnZpZGVvRGV2aWNlLT5scFZ0YmwtPkNyZWF0ZVZpZGVvUHJvY2Vzc29yRW51bWVy YXRvcihzLT52aWRlb0RldmljZSwgJmNvbnRlbnREZXNjLCAmcy0+ZW51bWVyYXRvcik7CisgICAg aWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIGNyZWF0ZSB2aWRlbyBwcm9jZXNzb3IgZW51bWVyYXRvcjogSFJFU1VMVCAweCVsWFxu IiwgaHIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICAv Ly88IENyZWF0ZSB0aGUgdmlkZW8gcHJvY2Vzc29yCisgICAgaHIgPSBzLT52aWRlb0RldmljZS0+ bHBWdGJsLT5DcmVhdGVWaWRlb1Byb2Nlc3NvcihzLT52aWRlb0RldmljZSwgcy0+ZW51bWVyYXRv ciwgMCwgJnMtPnByb2Nlc3Nvcik7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSB2aWRlbyBwcm9jZXNzb3I6 IEhSRVNVTFQgMHglbFhcbiIsIGhyKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJEM0QxMSB2aWRlbyBw cm9jZXNzb3Igc3VjY2Vzc2Z1bGx5IGNvbmZpZ3VyZWRcbiIpOworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNjYWxlX2QzZDExX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGlu aywgQVZGcmFtZSAqaW4pCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRz dDsKKyAgICBTY2FsZUQzRDExQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07CisgICAgSUQzRDExVmlkZW9Qcm9jZXNzb3JJ bnB1dFZpZXcgKmlucHV0VmlldyA9IE5VTEw7CisgICAgSUQzRDExVmlkZW9Db250ZXh0ICp2aWRl b0NvbnRleHQgPSBOVUxMOworICAgIEFWRnJhbWUgKm91dCA9IE5VTEw7CisgICAgaW50IHJldCA9 IDA7CisgICAgSFJFU1VMVCBocjsKKworICAgIC8vLzwgVmFsaWRhdGUgaW5wdXQgZnJhbWUKKyAg ICBpZiAoIWluKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk51bGwgaW5w dXQgZnJhbWVcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKwor ICAgIGlmICghaW4tPmh3X2ZyYW1lc19jdHgpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiTm8gaGFyZHdhcmUgZnJhbWVzIGNvbnRleHQgaW4gaW5wdXQgZnJhbWVcbiIpOwor ICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7CisgICAgfQorCisgICAgLy8vPCBWZXJpZnkgaGFyZHdhcmUgZGV2aWNlIGNvbnRleHRzCisg ICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilp bi0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKworICAgIGlmICghcy0+aHdfZGV2aWNlX2N0eCkgewor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGaWx0ZXIgaGFyZHdhcmUgZGV2aWNl IGNvbnRleHQgaXMgdW5pbml0aWFsaXplZFxuIik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmlu KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBBVkhXRGV2 aWNlQ29udGV4dCAqaW5wdXRfZGV2aWNlX2N0eCA9IChBVkhXRGV2aWNlQ29udGV4dCAqKWZyYW1l c19jdHgtPmRldmljZV9yZWYtPmRhdGE7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmZpbHRlcl9k ZXZpY2VfY3R4ID0gKEFWSFdEZXZpY2VDb250ZXh0ICopcy0+aHdfZGV2aWNlX2N0eC0+ZGF0YTsK KworICAgIGlmIChpbnB1dF9kZXZpY2VfY3R4LT50eXBlICE9IGZpbHRlcl9kZXZpY2VfY3R4LT50 eXBlKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk1pc21hdGNoIGJldHdl ZW4gaW5wdXQgYW5kIGZpbHRlciBoYXJkd2FyZSBkZXZpY2UgdHlwZXNcbiIpOworICAgICAgICBh dl9mcmFtZV9mcmVlKCZpbik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAg fQorCisgICAgLy8vPCBBbGxvY2F0ZSBvdXRwdXQgZnJhbWUKKyAgICBvdXQgPSBhdl9mcmFtZV9h bGxvYygpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBvdXRwdXQgZnJhbWVcbiIpOworICAgICAgICBhdl9mcmFt ZV9mcmVlKCZpbik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisg ICAgcmV0ID0gYXZfaHdmcmFtZV9nZXRfYnVmZmVyKHMtPmh3X2ZyYW1lc19jdHhfb3V0LCBvdXQs IDApOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBnZXQgb3V0cHV0IGZyYW1lIGZyb20gcG9vbFxuIik7CisgICAgICAgIGF2 X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICAgICAg cmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvLy88IENvbmZpZ3VyZSB0aGUgRDNEMTEgdmlkZW8g cHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgICBpZiAoIXMtPnByb2Nlc3Nv cikgeworICAgICAgICAvLy88IEdldCBpbmZvIGZyb20gaW5wdXQgdGV4dHVyZQorICAgICAgICBE M0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICAgICAgSUQzRDExVGV4dHVyZTJE ICppbnB1dF90ZXh0dXJlID0gKElEM0QxMVRleHR1cmUyRCAqKWluLT5kYXRhWzBdOworICAgICAg ICBpbnB1dF90ZXh0dXJlLT5scFZ0YmwtPkdldERlc2MoaW5wdXRfdGV4dHVyZSwgJnRleHR1cmVE ZXNjKTsKKworICAgICAgICBzLT5pbnB1dFdpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7CisgICAg ICAgIHMtPmlucHV0SGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAgICBzLT5pbnB1 dF9mb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgcmV0ID0gc2NhbGVfZDNk MTFfY29uZmlndXJlX3Byb2Nlc3NvcihzLCBjdHgpOworICAgICAgICBpZiAocmV0IDwgMCkgewor ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNvbmZpZ3Vy ZSBwcm9jZXNzb3JcbiIpOworICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAg ICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICAvLy88IEdldCBpbnB1dCB0ZXh0dXJlIGFuZCBwcmVwYXJlIGlu cHV0IHZpZXcKKyAgICBJRDNEMTFUZXh0dXJlMkQgKmQzZDExX3RleHR1cmUgPSAoSUQzRDExVGV4 dHVyZTJEICopaW4tPmRhdGFbMF07CisgICAgaW50IHN1YklkeCA9IChpbnQpKGludHB0cl90KWlu LT5kYXRhWzFdOworCisgICAgRDNEMTFfVklERU9fUFJPQ0VTU09SX0lOUFVUX1ZJRVdfREVTQyBp bnB1dFZpZXdEZXNjID0geworICAgICAgICAuRm91ckNDID0gcy0+aW5wdXRfZm9ybWF0LAorICAg ICAgICAuVmlld0RpbWVuc2lvbiA9IEQzRDExX1ZQSVZfRElNRU5TSU9OX1RFWFRVUkUyRCwKKyAg ICAgICAgLlRleHR1cmUyRC5BcnJheVNsaWNlID0gc3ViSWR4CisgICAgfTsKKworICAgIGhyID0g cy0+dmlkZW9EZXZpY2UtPmxwVnRibC0+Q3JlYXRlVmlkZW9Qcm9jZXNzb3JJbnB1dFZpZXcoCisg ICAgICAgIHMtPnZpZGVvRGV2aWNlLCAoSUQzRDExUmVzb3VyY2UgKilkM2QxMV90ZXh0dXJlLCBz LT5lbnVtZXJhdG9yLCAmaW5wdXRWaWV3RGVzYywgJmlucHV0Vmlldyk7CisgICAgaWYgKEZBSUxF RChocikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNy ZWF0ZSBpbnB1dCB2aWV3OiBIUkVTVUxUIDB4JWxYXG4iLCBocik7CisgICAgICAgIGF2X2ZyYW1l X2ZyZWUoJmluKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgLy8vPCBDcmVhdGUgb3V0cHV0IHZpZXcg Zm9yIGN1cnJlbnQgdGV4dHVyZQorICAgIElEM0QxMVRleHR1cmUyRCAqb3V0cHV0X3RleHR1cmUg PSAoSUQzRDExVGV4dHVyZTJEICopb3V0LT5kYXRhWzBdOworICAgIEQzRDExX1ZJREVPX1BST0NF U1NPUl9PVVRQVVRfVklFV19ERVNDIG91dHB1dFZpZXdEZXNjID0geworICAgICAgICAuVmlld0Rp bWVuc2lvbiA9IEQzRDExX1ZQT1ZfRElNRU5TSU9OX1RFWFRVUkUyRCwKKyAgICAgICAgLlRleHR1 cmUyRCA9IHsgLk1pcFNsaWNlID0gMCB9LAorICAgIH07CisKKyAgICBociA9IHMtPnZpZGVvRGV2 aWNlLT5scFZ0YmwtPkNyZWF0ZVZpZGVvUHJvY2Vzc29yT3V0cHV0VmlldygKKyAgICAgICAgcy0+ dmlkZW9EZXZpY2UsIChJRDNEMTFSZXNvdXJjZSAqKW91dHB1dF90ZXh0dXJlLCBzLT5lbnVtZXJh dG9yLCAmb3V0cHV0Vmlld0Rlc2MsICZzLT5vdXRwdXRWaWV3KTsKKyAgICBpZiAoRkFJTEVEKGhy KSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRl IG91dHB1dCB2aWV3OiBIUkVTVUxUIDB4JWxYXG4iLCBocik7CisgICAgICAgIGF2X2ZyYW1lX2Zy ZWUoJmluKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgLy8vPCBTZXQgdXAgcHJvY2Vzc2luZyBzdHJl YW0KKyAgICBEM0QxMV9WSURFT19QUk9DRVNTT1JfU1RSRUFNIHN0cmVhbSA9IHsKKyAgICAgICAg LkVuYWJsZSA9IFRSVUUsCisgICAgICAgIC5wSW5wdXRTdXJmYWNlID0gaW5wdXRWaWV3LAorICAg ICAgICAuT3V0cHV0SW5kZXggPSAwCisgICAgfTsKKworICAgIC8vLzwgR2V0IHZpZGVvIGNvbnRl eHQKKyAgICBociA9IHMtPmNvbnRleHQtPmxwVnRibC0+UXVlcnlJbnRlcmZhY2Uocy0+Y29udGV4 dCwgJklJRF9JRDNEMTFWaWRlb0NvbnRleHQsICh2b2lkICoqKSZ2aWRlb0NvbnRleHQpOworICAg IGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZh aWxlZCB0byBnZXQgdmlkZW8gY29udGV4dDogSFJFU1VMVCAweCVsWFxuIiwgaHIpOworICAgICAg ICBpbnB1dFZpZXctPmxwVnRibC0+UmVsZWFzZShpbnB1dFZpZXcpOworICAgICAgICBhdl9mcmFt ZV9mcmVlKCZpbik7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIC8vLzwgUHJvY2VzcyB0aGUgZnJhbWUK KyAgICBociA9IHZpZGVvQ29udGV4dC0+bHBWdGJsLT5WaWRlb1Byb2Nlc3NvckJsdCh2aWRlb0Nv bnRleHQsIHMtPnByb2Nlc3Nvciwgcy0+b3V0cHV0VmlldywgMCwgMSwgJnN0cmVhbSk7CisgICAg aWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVmlk ZW9Qcm9jZXNzb3JCbHQgZmFpbGVkOiBIUkVTVUxUIDB4JWxYXG4iLCBocik7CisgICAgICAgIHZp ZGVvQ29udGV4dC0+bHBWdGJsLT5SZWxlYXNlKHZpZGVvQ29udGV4dCk7CisgICAgICAgIGlucHV0 Vmlldy0+bHBWdGJsLT5SZWxlYXNlKGlucHV0Vmlldyk7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUo JmluKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7CisgICAgfQorCisgICAgLy8vPCBTZXQgdXAgb3V0cHV0IGZyYW1lCisgICAg cmV0ID0gYXZfZnJhbWVfY29weV9wcm9wcyhvdXQsIGluKTsKKyAgICBpZiAocmV0IDwgMCkgewor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY29weSBmcmFtZSBw cm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgdmlkZW9Db250ZXh0LT5scFZ0YmwtPlJlbGVhc2Uodmlk ZW9Db250ZXh0KTsKKyAgICAgICAgaW5wdXRWaWV3LT5scFZ0YmwtPlJlbGVhc2UoaW5wdXRWaWV3 KTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICBhdl9mcmFtZV9mcmVlKCZv dXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIG91dC0+ZGF0YVswXSA9ICh1 aW50OF90ICopb3V0cHV0X3RleHR1cmU7CisgICAgb3V0LT5kYXRhWzFdID0gKHVpbnQ4X3QgKiko aW50cHRyX3QpMDsKKyAgICBvdXQtPndpZHRoID0gcy0+d2lkdGg7CisgICAgb3V0LT5oZWlnaHQg PSBzLT5oZWlnaHQ7CisgICAgb3V0LT5mb3JtYXQgPSBBVl9QSVhfRk1UX0QzRDExOworCisgICAg Ly8vPCBDbGVhbiB1cCByZXNvdXJjZXMKKyAgICBpbnB1dFZpZXctPmxwVnRibC0+UmVsZWFzZShp bnB1dFZpZXcpOworICAgIHZpZGVvQ29udGV4dC0+bHBWdGJsLT5SZWxlYXNlKHZpZGVvQ29udGV4 dCk7CisgICAgaWYgKHMtPm91dHB1dFZpZXcpIHsKKyAgICAgICAgcy0+b3V0cHV0Vmlldy0+bHBW dGJsLT5SZWxlYXNlKHMtPm91dHB1dFZpZXcpOworICAgICAgICBzLT5vdXRwdXRWaWV3ID0gTlVM TDsKKyAgICB9CisgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworCisgICAgLy8vPCBGb3J3YXJkIHRo ZSBmcmFtZQorICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsKK30KKwor c3RhdGljIGludCBzY2FsZV9kM2QxMV9jb25maWdfcHJvcHMoQVZGaWx0ZXJMaW5rICpvdXRsaW5r KQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gb3V0bGluay0+c3JjOworICAgIFNjYWxl RDNEMTFDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0g Y3R4LT5pbnB1dHNbMF07CisgICAgRmlsdGVyTGluayAqaW5sID0gZmZfZmlsdGVyX2xpbmsoaW5s aW5rKTsKKyAgICBGaWx0ZXJMaW5rICpvdXRsID0gZmZfZmlsdGVyX2xpbmsob3V0bGluayk7Cisg ICAgaW50IHJldDsKKworICAgIC8vLzwgQ2xlYW4gdXAgYW55IHByZXZpb3VzIHJlc291cmNlcwor ICAgIHJlbGVhc2VfZDNkMTFfcmVzb3VyY2VzKHMpOworCisgICAgLy8vPCBFdmFsdWF0ZSBvdXRw dXQgZGltZW5zaW9ucworICAgIHJldCA9IGZmX3NjYWxlX2V2YWxfZGltZW5zaW9ucyhzLCBzLT53 X2V4cHIsIHMtPmhfZXhwciwgaW5saW5rLCBvdXRsaW5rLCAmcy0+d2lkdGgsICZzLT5oZWlnaHQp OworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBldmFsdWF0ZSBkaW1lbnNpb25zXG4iKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICBvdXRsaW5rLT53ID0gcy0+d2lkdGg7CisgICAgb3V0bGluay0+aCA9IHMt PmhlaWdodDsKKworICAgIC8vLzwgVmFsaWRhdGUgaW5wdXQgaHdfZnJhbWVzX2N0eAorICAgIGlm ICghaW5sLT5od19mcmFtZXNfY3R4KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIk5vIGh3X2ZyYW1lc19jdHggYXZhaWxhYmxlIG9uIGlucHV0IGxpbmtcbiIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIC8vLzwgUHJvcGFnYXRlIGh3 X2ZyYW1lc19jdHggdG8gb3V0cHV0CisgICAgb3V0bC0+aHdfZnJhbWVzX2N0eCA9IGF2X2J1ZmZl cl9yZWYoaW5sLT5od19mcmFtZXNfY3R4KTsKKyAgICBpZiAoIW91dGwtPmh3X2ZyYW1lc19jdHgp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHByb3BhZ2F0 ZSBod19mcmFtZXNfY3R4IHRvIG91dHB1dFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgfQorCisgICAgLy8vPCBJbml0aWFsaXplIGZpbHRlcidzIGhhcmR3YXJlIGRl dmljZSBjb250ZXh0CisgICAgaWYgKCFzLT5od19kZXZpY2VfY3R4KSB7CisgICAgICAgIEFWSFdG cmFtZXNDb250ZXh0ICppbl9mcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0ICopaW5sLT5o d19mcmFtZXNfY3R4LT5kYXRhOworICAgICAgICBzLT5od19kZXZpY2VfY3R4ID0gYXZfYnVmZmVy X3JlZihpbl9mcmFtZXNfY3R4LT5kZXZpY2VfcmVmKTsKKyAgICAgICAgaWYgKCFzLT5od19kZXZp Y2VfY3R4KSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gaW5pdGlhbGl6ZSBmaWx0ZXIgaGFyZHdhcmUgZGV2aWNlIGNvbnRleHRcbiIpOworICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v LzwgR2V0IEQzRDExIGRldmljZSBhbmQgY29udGV4dCAoYnV0IGRvbid0IGluaXRpYWxpemUgcHJv Y2Vzc29yIHlldCAtIGRvbmUgaW4gZmlsdGVyX2ZyYW1lKQorICAgIEFWSFdEZXZpY2VDb250ZXh0 ICpod2N0eCA9IChBVkhXRGV2aWNlQ29udGV4dCAqKXMtPmh3X2RldmljZV9jdHgtPmRhdGE7Cisg ICAgQVZEM0QxMVZBRGV2aWNlQ29udGV4dCAqZDNkMTFfaHdjdHggPSAoQVZEM0QxMVZBRGV2aWNl Q29udGV4dCAqKWh3Y3R4LT5od2N0eDsKKworICAgIHMtPmRldmljZSA9IGQzZDExX2h3Y3R4LT5k ZXZpY2U7CisgICAgcy0+Y29udGV4dCA9IGQzZDExX2h3Y3R4LT5kZXZpY2VfY29udGV4dDsKKwor ICAgIGlmICghcy0+ZGV2aWNlIHx8ICFzLT5jb250ZXh0KSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgdmFsaWQgRDNEMTEgZGV2aWNlIG9yIGNvbnRl eHRcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIC8v LzwgQ3JlYXRlIG5ldyBoYXJkd2FyZSBmcmFtZXMgY29udGV4dCBmb3Igb3V0cHV0CisgICAgQVZI V0ZyYW1lc0NvbnRleHQgKmluX2ZyYW1lc19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilpbmwt Pmh3X2ZyYW1lc19jdHgtPmRhdGE7CisgICAgcy0+aHdfZnJhbWVzX2N0eF9vdXQgPSBhdl9od2Zy YW1lX2N0eF9hbGxvYyhzLT5od19kZXZpY2VfY3R4KTsKKyAgICBpZiAoIXMtPmh3X2ZyYW1lc19j dHhfb3V0KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgZW51bSBBVlBp eGVsRm9ybWF0IHN3X2Zvcm1hdDsKKyAgICBzd2l0Y2ggKHMtPm91dHB1dF9mb3JtYXRfb3B0KSB7 CisgICAgICAgIGNhc2UgT1VUUFVUX05WMTI6CisgICAgICAgICAgICBzd19mb3JtYXQgPSBBVl9Q SVhfRk1UX05WMTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPVVRQVVRfUDAx MDoKKyAgICAgICAgICAgIHN3X2Zvcm1hdCA9IEFWX1BJWF9GTVRfUDAxMDsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKKyAgICB9CisKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzX2N0eCA9IChBVkhX RnJhbWVzQ29udGV4dCAqKXMtPmh3X2ZyYW1lc19jdHhfb3V0LT5kYXRhOworICAgIGZyYW1lc19j dHgtPmZvcm1hdCA9IEFWX1BJWF9GTVRfRDNEMTE7CisgICAgZnJhbWVzX2N0eC0+c3dfZm9ybWF0 ID0gc3dfZm9ybWF0OworICAgIGZyYW1lc19jdHgtPndpZHRoID0gcy0+d2lkdGg7CisgICAgZnJh bWVzX2N0eC0+aGVpZ2h0ID0gcy0+aGVpZ2h0OworICAgIGZyYW1lc19jdHgtPmluaXRpYWxfcG9v bF9zaXplID0gMzA7IC8vLzwgQWRqdXN0IHBvb2wgc2l6ZSBhcyBuZWVkZWQKKworICAgIEFWRDNE MTFWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eCA9IGZyYW1lc19jdHgtPmh3Y3R4OworICAg IGZyYW1lc19od2N0eC0+TWlzY0ZsYWdzID0gMDsKKyAgICBmcmFtZXNfaHdjdHgtPkJpbmRGbGFn cyA9IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfVklERU9fRU5DT0RFUjsK KworICAgIHJldCA9IGF2X2h3ZnJhbWVfY3R4X2luaXQocy0+aHdfZnJhbWVzX2N0eF9vdXQpOwor ICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcy0+aHdfZnJhbWVz X2N0eF9vdXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIG91dGwtPmh3X2Zy YW1lc19jdHggPSBhdl9idWZmZXJfcmVmKHMtPmh3X2ZyYW1lc19jdHhfb3V0KTsKKyAgICBpZiAo IW91dGwtPmh3X2ZyYW1lc19jdHgpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisK KyAgICBhdl9sb2coY3R4LCBBVl9MT0dfVkVSQk9TRSwgIkQzRDExIHNjYWxlIGNvbmZpZzogJWR4 JWQgLT4gJWR4JWRcbiIsCisgICAgICAgICAgIGlubGluay0+dywgaW5saW5rLT5oLCBvdXRsaW5r LT53LCBvdXRsaW5rLT5oKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQgdm9p ZCBzY2FsZV9kM2QxMV91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpIHsKKyAgICBTY2FsZUQz RDExQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIC8vLzwgUmVsZWFzZSBEM0QxMSByZXNv dXJjZXMKKyAgICByZWxlYXNlX2QzZDExX3Jlc291cmNlcyhzKTsKKworICAgIC8vLzwgRnJlZSB0 aGUgaGFyZHdhcmUgZGV2aWNlIGNvbnRleHQgcmVmZXJlbmNlCisgICAgYXZfYnVmZmVyX3VucmVm KCZzLT5od19mcmFtZXNfY3R4X291dCk7CisgICAgYXZfYnVmZmVyX3VucmVmKCZzLT5od19kZXZp Y2VfY3R4KTsKKworICAgIC8vLzwgRnJlZSBvcHRpb24gc3RyaW5ncworICAgIGF2X2ZyZWVwKCZz LT53X2V4cHIpOworICAgIGF2X2ZyZWVwKCZzLT5oX2V4cHIpOworfQorCitzdGF0aWMgY29uc3Qg QVZGaWx0ZXJQYWQgc2NhbGVfZDNkMTFfaW5wdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFt ZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9U WVBFX1ZJREVPLAorICAgICAgICAuZmlsdGVyX2ZyYW1lID0gc2NhbGVfZDNkMTFfZmlsdGVyX2Zy YW1lLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgc2NhbGVfZDNkMTFf b3V0cHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwK KyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLmNv bmZpZ19wcm9wcyA9IHNjYWxlX2QzZDExX2NvbmZpZ19wcm9wcywKKyAgICB9LAorfTsKKworI2Rl ZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoU2NhbGVEM0QxMUNvbnRleHQsIHgpCisjZGVmaW5lIEZM QUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJB TSkKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHNjYWxlX2QzZDExX29wdGlvbnNbXSA9IHsKKyAg ICB7ICJ3aWR0aCIsICAiT3V0cHV0IHZpZGVvIHdpZHRoIiwgIE9GRlNFVCh3X2V4cHIpLCBBVl9P UFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIml3In0sIC5mbGFncyA9IEZMQUdTIH0sCisgICAgeyAi aGVpZ2h0IiwgIk91dHB1dCB2aWRlbyBoZWlnaHQiLCBPRkZTRVQoaF9leHByKSwgQVZfT1BUX1RZ UEVfU1RSSU5HLCB7LnN0ciA9ICJpaCJ9LCAuZmxhZ3MgPSBGTEFHUyB9LAorICAgIHsgIm91dHB1 dF9mbXQiLCAiT3V0cHV0IGZvcm1hdCIsIE9GRlNFVChvdXRwdXRfZm9ybWF0X29wdCksIEFWX09Q VF9UWVBFX0lOVCwgey5pNjQgPSBPVVRQVVRfTlYxMn0sIDAsIE9VVFBVVF9QMDEwLCBGTEFHUywg ImZtdCIgfSwKKyAgICB7ICJudjEyIiwgIk5WMTIgZm9ybWF0IiwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0ID0gT1VUUFVUX05WMTJ9LCAwLCAwLCBGTEFHUywgImZtdCIgfSwKKyAgICB7ICJw MDEwIiwgIlAwMTAgZm9ybWF0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gT1VUUFVU X1AwMTB9LCAwLCAwLCBGTEFHUywgImZtdCIgfSwKKyAgICB7IE5VTEwgfQorfTsKKworQVZGSUxU RVJfREVGSU5FX0NMQVNTKHNjYWxlX2QzZDExKTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2Nh bGVfZDNkMTEgPSB7CisgICAgLnAubmFtZSAgICAgICAgICAgPSAic2NhbGVfZDNkMTEiLAorICAg IC5wLmRlc2NyaXB0aW9uICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlNjYWxlIHZpZGVvIHVz aW5nIERpcmVjdDNEMTEiKSwKKyAgICAucHJpdl9zaXplICAgICAgICA9IHNpemVvZihTY2FsZUQz RDExQ29udGV4dCksCisgICAgLnAucHJpdl9jbGFzcyAgICAgPSAmc2NhbGVfZDNkMTFfY2xhc3Ms CisgICAgLmluaXQgICAgICAgICAgICAgPSBzY2FsZV9kM2QxMV9pbml0LAorICAgIC51bmluaXQg ICAgICAgICAgID0gc2NhbGVfZDNkMTFfdW5pbml0LAorICAgIEZJTFRFUl9JTlBVVFMoc2NhbGVf ZDNkMTFfaW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhzY2FsZV9kM2QxMV9vdXRwdXRzKSwK KyAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX0QzRDExKSwKKyAgICAucC5mbGFn cyAgICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCisgICAgLmZsYWdzX2ludGVybmFs ICAgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAorfTsKXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDExdmEuYyBiL2xp YmF2dXRpbC9od2NvbnRleHRfZDNkMTF2YS5jCmluZGV4IDFhMDQ3Y2U1N2IuLjM2Njk0ODk2ZTQg MTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTF2YS5jCisrKyBiL2xpYmF2dXRp bC9od2NvbnRleHRfZDNkMTF2YS5jCkBAIC04Miw2ICs4Miw4IEBAIHR5cGVkZWYgc3RydWN0IEQz RDExVkFGcmFtZXNDb250ZXh0IHsKIAogICAgIGludCBuYl9zdXJmYWNlczsKICAgICBpbnQgbmJf c3VyZmFjZXNfdXNlZDsKKyAgICBpbnQgcmV0cmllczsKKyAgICBpbnQgbWF4X3JldHJpZXM7CiAK ICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQ7CiAKQEAgLTI1OCw3ICsyNjAsOSBAQCBzdGF0aWMgQVZC dWZmZXJSZWYgKmQzZDExdmFfcG9vbF9hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBzaXplKQog ICAgIElEM0QxMVRleHR1cmUyRF9HZXREZXNjKGh3Y3R4LT50ZXh0dXJlLCAmdGV4RGVzYyk7CiAK ICAgICBpZiAocy0+bmJfc3VyZmFjZXNfdXNlZCA+PSB0ZXhEZXNjLkFycmF5U2l6ZSkgewotICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTdGF0aWMgc3VyZmFjZSBwb29sIHNpemUg ZXhjZWVkZWQuXG4iKTsKKyAgICAgICAgaWYgKHMtPnJldHJpZXMgPj0gcy0+bWF4X3JldHJpZXMp IHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlN0YXRpYyBzdXJmYWNl IHBvb2wgc2l6ZSBleGNlZWRlZC5cbiIpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVUxM OwogICAgIH0KIApAQCAtMzM5LDIwICszNDMsMzAgQEAgc3RhdGljIGludCBkM2QxMXZhX2ZyYW1l c19pbml0KEFWSFdGcmFtZXNDb250ZXh0ICpjdHgpCiBzdGF0aWMgaW50IGQzZDExdmFfZ2V0X2J1 ZmZlcihBVkhXRnJhbWVzQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSkKIHsKICAgICBBVkQz RDExRnJhbWVEZXNjcmlwdG9yICpkZXNjOworICAgIEQzRDExVkFGcmFtZXNDb250ZXh0ICAgICAg ICpzID0gY3R4LT5od2N0eDsKKyAgICBzLT5yZXRyaWVzID0gMDsKKyAgICBzLT5tYXhfcmV0cmll cyA9IDUwOworCisgICAgd2hpbGUgKHMtPnJldHJpZXMgPCBzLT5tYXhfcmV0cmllcykgeworICAg ICAgICAKKyAgICAgICAgZnJhbWUtPmJ1ZlswXSA9IGF2X2J1ZmZlcl9wb29sX2dldChjdHgtPnBv b2wpOworICAgICAgICBpZiAoZnJhbWUtPmJ1ZlswXSkgeworICAgICAgICAgICAgZGVzYyA9IChB VkQzRDExRnJhbWVEZXNjcmlwdG9yICopZnJhbWUtPmJ1ZlswXS0+ZGF0YTsKKworICAgICAgICAg ICAgZnJhbWUtPmRhdGFbMF0gPSAodWludDhfdCAqKWRlc2MtPnRleHR1cmU7CisgICAgICAgICAg ICBmcmFtZS0+ZGF0YVsxXSA9ICh1aW50OF90ICopZGVzYy0+aW5kZXg7CisgICAgICAgICAgICBm cmFtZS0+Zm9ybWF0ICA9IEFWX1BJWF9GTVRfRDNEMTE7CisgICAgICAgICAgICBmcmFtZS0+d2lk dGggICA9IGN0eC0+d2lkdGg7CisgICAgICAgICAgICBmcmFtZS0+aGVpZ2h0ICA9IGN0eC0+aGVp Z2h0OworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogCi0gICAgZnJhbWUtPmJ1 ZlswXSA9IGF2X2J1ZmZlcl9wb29sX2dldChjdHgtPnBvb2wpOwotICAgIGlmICghZnJhbWUtPmJ1 ZlswXSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGRlc2MgPSAoQVZE M0QxMUZyYW1lRGVzY3JpcHRvciAqKWZyYW1lLT5idWZbMF0tPmRhdGE7Ci0KLSAgICBmcmFtZS0+ ZGF0YVswXSA9ICh1aW50OF90ICopZGVzYy0+dGV4dHVyZTsKLSAgICBmcmFtZS0+ZGF0YVsxXSA9 ICh1aW50OF90ICopZGVzYy0+aW5kZXg7Ci0gICAgZnJhbWUtPmZvcm1hdCAgPSBBVl9QSVhfRk1U X0QzRDExOwotICAgIGZyYW1lLT53aWR0aCAgID0gY3R4LT53aWR0aDsKLSAgICBmcmFtZS0+aGVp Z2h0ICA9IGN0eC0+aGVpZ2h0OworICAgICAgICBhdl91c2xlZXAoMTAwMCk7CisgICAgICAgIHMt PnJldHJpZXMrKzsKKyAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwogfQogCiBzdGF0aWMgaW50IGQzZDExdmFfdHJhbnNmZXJfZ2V0X2Zvcm1hdHMoQVZI V0ZyYW1lc0NvbnRleHQgKmN0eCwKLS0gCjIuMzQuMQoK --_002_PN0P287MB14944F67F6F53BA6B2C85E9DE199APN0P287MB1494INDP_ 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_PN0P287MB14944F67F6F53BA6B2C85E9DE199APN0P287MB1494INDP_--