window 顯示驅動開發-如何查詢視頻處理功能(六)

D3DDDICAPS_FILTERPROPERTYRANGE請求類型

UMD 返回指向 DXVADDI_VALUERANGE 結構的指針,該結構包含傳遞D3DDDICAPS_FILTERPROPERTYRANGE請求類型時特定視頻流上特定篩選器設置允許的值范圍。 Direct3D 運行時在D3DDDIARG_GETCAPS的 pInfo 成員指向的變量中為特定視頻流的篩選器設置指定DXVADDI_QUERYFILTERPROPERTYRANGEINPUT結構。

功能概述

D3DDDICAPS_FILTERPROPERTYRANGE請求類型允許應用程序查詢視頻處理器支持的過濾器屬性(如降噪強度、邊緣增強等)的有效參數范圍,用于精細控制視頻后處理效果。

關鍵數據結構

輸入結構 (DXVADDI_QUERYFILTERPROPERTYRANGEINPUT)

typedef struct _DXVADDI_QUERYFILTERPROPERTYRANGEINPUT {GUID VPGuid;                   // 視頻處理器GUIDDXVADDI_VIDEODESC VideoDesc;   // 視頻流描述DXVA2_FilterProperty Prop;     // 過濾器屬性類型
} DXVADDI_QUERYFILTERPROPERTYRANGEINPUT;

輸出結構 (DXVADDI_VALUERANGE)

typedef struct _DXVADDI_VALUERANGE {DXVA2_Fixed32 MinValue;        // 最小值(Fixed32格式)DXVA2_Fixed32 MaxValue;        // 最大值DXVA2_Fixed32 DefaultValue;    // 默認值DXVA2_Fixed32 StepSize;        // 步進增量
} DXVADDI_VALUERANGE;

過濾器屬性枚舉 (DXVA2_FilterProperty)

typedef enum {DXVA2_FilterProperty_NoiseFilterLumaLevel,      // 亮度降噪DXVA2_FilterProperty_NoiseFilterLumaThreshold,  // 亮度閾值DXVA2_FilterProperty_NoiseFilterLumaRadius,     // 亮度半徑DXVA2_FilterProperty_NoiseFilterChromaLevel,    // 色度降噪// ...其他過濾器屬性
} DXVA2_FilterProperty;

驅動程序實現規范

標準處理邏輯

case D3DDDICAPS_FILTERPROPERTYRANGE: {// 參數驗證if (pArgs->DataSize < sizeof(DXVADDI_VALUERANGE)) {pArgs->DataSize = sizeof(DXVADDI_VALUERANGE);return E_INVALIDARG;}DXVADDI_QUERYFILTERPROPERTYRANGEINPUT* pInput = (DXVADDI_QUERYFILTERPROPERTYRANGEINPUT*)pArgs->pInfo;DXVADDI_VALUERANGE* pRange = (DXVADDI_VALUERANGE*)pArgs->pData;// 根據屬性類型設置范圍switch (pInput->Prop) {case DXVA2_FilterProperty_NoiseFilterLumaLevel:pRange->MinValue = DXVA2_Fixed32(0.0f);    // 0%pRange->MaxValue = DXVA2_Fixed32(1.0f);    // 100%pRange->DefaultValue = DXVA2_Fixed32(0.5f);// 50%pRange->StepSize = DXVA2_Fixed32(0.01f);   // 1%步進break;case DXVA2_FilterProperty_NoiseFilterLumaRadius:pRange->MinValue = DXVA2_Fixed32(1.0f);    // 1像素pRange->MaxValue = DXVA2_Fixed32(5.0f);    // 5像素pRange->DefaultValue = DXVA2_Fixed32(2.0f);pRange->StepSize = DXVA2_Fixed32(1.0f);    // 整像素步進break;// 其他屬性處理...}pArgs->DataSize = sizeof(DXVADDI_VALUERANGE);return S_OK;
}

高級實現策略

動態范圍調整

// 根據視頻分辨率調整范圍
if (pInput->VideoDesc.SampleWidth > 1920) {// 4K視頻使用更精細的降噪pRange->StepSize = DXVA2_Fixed32(0.005f); pRange->MaxValue = DXVA2_Fixed32(0.8f); // 限制最大強度
}

硬件能力檢測

// 檢查硬件是否支持高級過濾
if (!CheckHardwareFilterSupport(pInput->Prop)) {pRange->MinValue = pRange->MaxValue = pRange->DefaultValue;pRange->StepSize = DXVA2_Fixed32(0.0f); // 固定值
}

錯誤處理規范

不支持的屬性

if (!IsSupportedFilterProperty(pInput->Prop)) {return DXVA2_E_UNSUPPORTED_PROPERTY;
}

無效視頻格式

if (pInput->VideoDesc.SampleFormat == D3DDDIFMT_UNKNOWN) {return E_INVALIDARG;
}

實際應用示例

運行時查詢流程

// 準備查詢參數
DXVADDI_QUERYFILTERPROPERTYRANGEINPUT input = {DXVA2_VideoProcProgressiveDevice,{1920, 1080, D3DDDIFMT_NV12, ...},DXVA2_FilterProperty_NoiseFilterLumaLevel
};DXVADDI_VALUERANGE range;
D3DDDIARG_GETCAPS args = {D3DDDICAPS_FILTERPROPERTYRANGE,&input,&range,sizeof(DXVADDI_VALUERANGE)
};// 執行查詢
if (SUCCEEDED(pDevice->GetCaps(&args))) {float minLevel = FixedToFloat(range.MinValue);float maxLevel = FixedToFloat(range.MaxValue);// 配置UI控制范圍...
}

Fixed32轉換工具函數

// Fixed32轉換為浮點數
inline float FixedToFloat(DXVA2_Fixed32 fixed) {return fixed.value + (fixed.fraction / 65536.0f);
}// 浮點數轉換為Fixed32
inline DXVA2_Fixed32 FloatToFixed(float f) {DXVA2_Fixed32 fixed;fixed.value = static_cast<SHORT>(f);fixed.fraction = static_cast<USHORT>((f - fixed.value) * 65536.0f);return fixed;
}

此機制使應用程序能夠:

  • 精確了解各視頻過濾器的可調參數范圍
  • 提供專業的視頻質量控制界面
  • 實現基于硬件能力的動態功能調整
  • 確保參數設置的有效性和安全性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83342.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83342.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle線上故障問題解決

----重啟電腦找不到sid Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor Could not open connection sqlplus "/as sysdba" SQL> shutdown immediate 數據庫…

語音信號處理三十——高效多相抽取器(Polyphase+Noble)

文章目錄 前言一、Polyphase 多項分解1.定義2.拆分公式3.推導過程1&#xff09;按模 M M M拆分求和項2&#xff09;提取因子 4.總結 二、Noble恒等式1. 定義2.Noble恒等式表達方式1&#xff09;抽取系統的 Noble 恒等式2&#xff09;插值系統的 Noble 恒等式 2.Nodble恒等式推導…

廣告推薦系統中模型訓練中模型的結構信息、Dense數據、Sparse數據

下面結合廣告推薦系統常見的深度學習模型(比如 Wide & Deep、DeepFM、Two-Tower 等),介紹一下“模型的結構信息”、Dense 數據和 Sparse 數據在訓練過程中的角色及處理方式。 模型結構信息 輸入層(Input Layer) ? Sparse 輸入:各類離散高維特征(用戶 ID、廣告 ID、…

安全生產管理是什么?安全生產管理主要管什么?

安全生產管理是什么&#xff1f;安全生產管理主要管什么&#xff1f; 不管是制造業、建筑業&#xff0c;還是倉儲、物流、化工等等&#xff0c;一聊到“安全事故”&#xff0c;大家腦子里最先冒出來的兩個詞&#xff0c;肯定就是&#xff1a; 人的不安全行為物的不安全狀態 …

SecureRandom.getInstanceStrong() 與虛擬機的愛恨情仇

問題描述 使用Ruoyi-cloud 二開&#xff0c;將服務部署到虛擬機上后&#xff0c;準備登錄&#xff0c;發現驗證碼一致加載不出來&#xff0c;接口請求超時! 解決步驟 telnet 虛擬機ipport 發現可以通.curl 接口&#xff0c;發現一致不返回&#xff0c;超時了./code 接口超時&am…

DEM 地形分析與水文建模:基于 ArcGIS 的流域特征提取

技術點目錄 一、 GIS理論及ArcGIS認識二、ArcGIS數據管理與轉換三、ArcGIS地圖制作與發布四、ArcGIS數據制備與編輯五、ArcGIS矢量空間分析及應用六、ArcGIS柵格空間分析及應用七、ArcGIS空間插值及應用八、DEM數據與GIS三維分析九、ArcGIS高級建模及應用十、綜合講解了解更多 …

芯伯樂XBLW GT712選型及應用設計指南

前言 在電子工程領域&#xff0c;精準的電流測量對于眾多電路設計與系統監控至關重要。芯伯樂推出的XBLW GT712電流傳感器以其獨特的優勢&#xff0c;成為工程師在諸多應用中的首選工具。本文將深入剖析XBLW GT712的工作原理、性能特點以及應用要點&#xff0c;為工程師提供詳…

MySQL查看連接情況

說明&#xff1a;本文介紹如何查看MySQL會話連接情況&#xff0c;方便排查MySQL占用CPU過高或其他問題。 連接數據庫 首先&#xff0c;使用命令行連接到MySQL數據庫 mysql -u[用戶名] -p[密碼] -h[主機IP] -P[端口號]如果MySQL就在本機上&#xff0c;那么如下即可 mysql -u…

圖文教程——Deepseek最強平替工具免費申請教程——國內edu郵箱可用

親測有效&#xff01;只需 4 步即可免費體驗最新最強的 AI 助手&#xff01; 最強AI助手 This account isn’t eligible for Google AI Pro plan Google AI Pro plan isn’t available in some countries or for people under a certain age. 問題終極解決方案&#xff1a; ht…

java轉PHP開發需要幾步?

PHP基礎入門指南&#xff08;面向Java開發者&#xff09; 作為Java開發者&#xff0c;你已經掌握了面向對象編程、變量類型和控制結構等核心概念&#xff0c;這將大大加速你學習PHP的過程。下面我將從語法差異和PHP特性兩個方面&#xff0c;幫助你快速上手PHP開發。 語法差異…

一種使用 PowerToys 的鍵盤管理器工具重新映射按鍵實現在 Windows 上快捷輸入字符的方式

文章目錄 一、問題背景二、安裝 PowerToys三、配置快捷鍵 一、問題背景 在之前的一篇文章中介紹了使用 Java 程序實現快捷鍵輸入字符的方式&#xff08;https://blog.csdn.net/TeleostNaCl/article/details/148158298&#xff09;&#xff0c;其原理是利用 后臺常駐的 Java 應…

Python環境搭建競賽技術

Python環境搭建競賽技術文章大綱 競賽背景與意義 Python環境搭建競賽旨在考察參賽者對Python開發環境的熟悉程度&#xff0c;包括工具選擇、配置優化和問題解決能力。此類競賽常見于編程教學、企業內訓或技術社區活動&#xff0c;強調實踐性和效率。 競賽核心考察點 環境隔…

Python爬蟲實戰:研究MarkupSafe庫相關技術

1. 引言 在當今信息爆炸的時代,Web 數據爬取與分析已成為獲取有價值信息的重要手段。Python 憑借其豐富的庫生態(如 requests、BeautifulSoup),成為 Web 爬蟲開發的首選語言。然而,爬取的外部數據往往存在安全隱患,特別是當這些數據被用于動態生成 HTML 頁面時,可能導致…

Java-43 深入淺出 Nginx - 基本配置方式 nginx.conf Events塊 HTTP塊 反向代理 負載均衡

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI煉丹日志-28 - Aud…

適配器模式深度解析:Java設計模式實戰指南與接口兼容性解決方案

適配器模式深度解析&#xff1a;Java設計模式實戰指南與接口兼容性解決方案 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼…

類復制.省略 class.copy.elision

class類 復制/移動省略class.copy.elision 類復制省略 (copy elision) 當滿足特定條件時&#xff0c;即使所選對象的構造函數和/或析構函數有副作用&#xff0c;實現也被允許省略從相同類型&#xff08;忽略 cv 限定符&#xff09;的源對象創建類對象。 在這種情況下&#…

goreplay

1.github地址 https://github.com/buger/goreplay 2.簡單介紹 GoReplay 是一個開源的網絡監控工具&#xff0c;可以記錄用戶的實時流量并將其用于鏡像、負載測試、監控和詳細分析。 3.出現背景 隨著應用程序的增長&#xff0c;測試它所需的工作量也會呈指數級增長。GoRepl…

TensorZero:開源 LLM 應用優化與可觀測性平臺

TensorZero 是一個開源的 LLM&#xff08;大語言模型&#xff09;應用全鏈路優化平臺&#xff0c;聚焦于“數據—評估—優化—實驗”自動化閉環&#xff0c;極大提升 LLM 產品的可觀測性、可優化性和可擴展性。無論你是 GPT 應用開發者&#xff0c;還是需要管理和提升 LLM 服務…

postgreSql數據遷移到openGauss的方案

從postgresql 導出sql 腳本 工具-備份 選擇格式為Plain 得到腳本用vscode 打開并編輯 首先使用查找替換功能 語法適配修改?&#xff1a; 替換不支持的參數如lock_timeout為lockwait_timeout 移除row_security等openGauss不支持的配置 檢查并修改物化視圖的刷新語法 …

網絡爬蟲學習心得

一、引言? 在大數據時代&#xff0c;數據成為了驅動決策、洞察趨勢的核心資源。出于對數據分析的濃厚興趣&#xff0c;以及希望能更高效獲取網絡信息的目的&#xff0c;我踏上了網絡爬蟲的學習之旅。通過這段時間的學習&#xff0c;我不僅掌握了從網頁中提取數據的技術&#…