当前位置: 首页 > news >正文

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;
}

此机制使应用程序能够:

  • 精确了解各视频过滤器的可调参数范围
  • 提供专业的视频质量控制界面
  • 实现基于硬件能力的动态功能调整
  • 确保参数设置的有效性和安全性

相关文章:

  • 【Bluedroid】蓝牙启动之 RFCOMM_Init 流程源码解析
  • Android 默认第三方app运行权限(android11-13)
  • 【测试专栏】自动化测试——云存储项目
  • 计算机视觉与深度学习 | 基于Matlab的低照度图像增强算法原理,公式及实现
  • matlab红外与可见光图像配准算法
  • 学车笔记 变挡
  • 建站SEO优化之站点地图sitemap
  • Java多线程通信核心机制详解
  • UE5 学习系列(八)材质基础认知
  • 图数据库的理解
  • 【编译工具】(自动化)自动化测试工具:如何让我的开发效率提升300%并保证代码质量?
  • Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译
  • Roboguide工作站机器人重新安装软件包
  • Altair:让你爱上数据可视化的声明式魔法!
  • Hello Robot发布Stretch3机器人高保真模拟平台-Stretch MuJoCo v0.5-涵盖数百种Robocasa厨房应用测试场景
  • java转PHP开发需要几步?
  • 台湾TEMI协会竞赛——1、龙舟机器人组装教学
  • 七牛云域名配置与CNAME解析
  • 数据链抗干扰
  • 增强跳板机安全性的解决方案
  • 网站域名变更怎么查询/关键词优化推广排名
  • 网站建设 python/有链接的网站
  • 建设银行科技中心网站/seo发展前景怎么样啊
  • 如何建立企业网站或者官网/商旅100网页版
  • 想在网上做外卖 上什么网站好/电商平台怎么推广
  • 网上做家教的网站/免费创建网站的平台