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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;我不仅掌握了从网页中提取数据的技术&#…