编写DirectShow Filters—质量控制管理

DirectShow之filters例程详解前言 direcshow filter里程的解读和分析。要开发filter,研读directshow提供的filter例程是最好的方法,该文是对filter的一个简单介绍,随后会对每一个filter例程进行详细的解读 阅读详情
质量控制是一种通过filter graph调整数据速率来响应运行性能的机制。如果renderer filter接收太多数据或太少数据,它会发送一个质量消息。这个质量消息请求数据速率的调节。默认的,质量消息从renderer向上直到达到能响应它(如果有)的filter。应用程序也可以实现一个自定义的质量管理器。如果是这种情况,renderer直接传递质量消息到应用程序的质量管理器。
一、 质量消息
质量消息由Quality结构定义。此结构包含下列成员:
1) Type:由QualityMessageType枚举定义。Famine,表示filter正在接收的数据太少。Flood,表示正在接收的数据太多。
2) Proportion:数据速率的调节,基线是1000。例如,750表示75%,1500表示150%
3) Late:引用时间显示大多数sample到达有多晚。如果sample到达太早此值为负
4) TimeStamp:在大多数最近的sample上的时间戳
例如,假定一个sample的时间戳是240ms在280ms到达renderer,流时间。renderer建立一个Famine类型的质量消息。sample晚到40ms,所以Late是400000。(所有引用时间是100纳秒单位)。TimeStamp是2400000。
对于Proportion成员,renderer可能使用一个运行平均值来计算这个值。或者sample按时到达,并且这个sample是不规则的。在这种情况下renderer可能请求一个小的修正。在另一方面,如果sample一直延迟,renderer可能请求一个更大的修正。
质量控制通过IQualityControl接口来处理。它包含两个方法。
1) Notify : 发送一个质量消息
2) SetSink:指定一个自定义质量管理器
一个实现IQualityControl的对象通过Notify接收质量消息。它既能处理消息也能传递这个消息到另一个对象。如果应用程序调用对象的SetSink方法,这个对象会委托质量控制到指定的质量管理器。
二、 默认质量控制
DirectShow Base Classes 对于视频的质量控制提供了一些缺省的方法。
质量消息从renderer 开始,video renderer 的基类是CBaseVideoRenderer,它有下列行为:
1) 当视频render 接收到sample 的时候,它用sample 上的时间戳和当前的参考时间比较
2) 视频render 产生一个质量消息,在基类中,质量消息的Proportion成员被限制在500(50%)到2000(200%),此  值超出这个范围会导致差的质量改变
3) 默认的,video render发送一个质量消息到upstream的output pin(此PIN连接它的input pin)。用程序可以通过调用setsink方法来重载这种行为。
接下来发生什么依赖于upstream filter。一般来说,它是一个transform filter。transformfilter 的基类是CTransformFilter,它使用CTransformInputPin和CTransformOutputPin类来实现input/output pin。同时,这些类有下列行为:
1) CTransformOutputPin::Notify 方法调用CTransformFilter::AlterQuality,它是在filter基类上的一个私有方法。
2) 继承的filter可以重载AlterQuality 方法来处理质量消息,缺省的情况下,AlterQuality忽略质量消息。
3) 如果AlterQuality 不处理质量消息,output pin 调用这个filter上的input pin 上的CBaseInputPin::PassNotify私有方法。
4) PassNotify 方法传递质量消息到适合的地方—接下来的upstream output pin,或者一个自定义质量管理器。
假定没有transform filter 处理质量消息,这个消息最终到达source filter。在基类中,CBasePin::Notify 返回 E_NOTIMPL。source filter 如何处理质量消息取决于source filter 的特性。一些source,如实时视频捕获,不能执行有意思的质量控制。另外source可以调整他们传递的sample 的速率。
下列图示演示了默认行为
基本video renderer实现IQualityControl::Notify,它意味你可以传递质量消息到renderer本身。如果设置Proportion成员为少于1000的值,video renderer在要render的每帧间插入一个等待时期,效果是降低renderer。
directshow filter 工具 directshow filter完整的包含 了多个标准directshow filter,同时包含directshow filter的查看工具 立即下载

相关推荐

DirectShow录屏工具

用于录制屏幕的工具,本身是一个Directshow的filter,包括ffmpeg工具

DirectShow学习笔记-Filter概述

Filter 是DirectShow中最基本的概念。DirectShow使用Filter Graph来管理Filter(管理者叫做Filter Graph Manager)。Filter Graph是Filter的“容器“,而Filter是Filter Graph中的最小功能模块。    Filter一般由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一条顺序的链路,Filt

IT民工 3699

做一个directshow的filter,把RGB视频流变成黑白的

我是按网上的一篇文章(做了一个directshow的filter,把RGB视频流变成黑白的)做的一个filter,有一点改动。可以参考一下。

Directshow简介

        Directshow是在windows平台上用于流媒体开发的框架,其前身是ActiveMovie。它提供了高质量的采集和回放功能,支持很多格式,包括ASF(Advanced Systems Format)﹑MPEG(Motion Picture Experts Group) ﹑AVI(Audio-video Interleaved) ﹑mp3(MPEG Audio Layer-

alunlee的专栏 1511

Directshow filter编写例程(二)读取文件

AsyncReadFilter 将由SDK自带的例子async修改而来,async是把文件先全部读取到内存然后播放。现在要把它修改成从文件直接读取数据。

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

DirectShow体系结构之Filter

    Filter是DirectShow最基本的概念。DirectShow使用Filter Graph来管理Filter,Filter Graph是Filter的容器,而Filter是Filter Graph中的最小功能模块。Filter按照功能来分,大致分为三类:Source Filters、Transform Filters和Renderer Filters。Source Filter主要负...

冷月醉雪的博客 541

Logisim 原码一位乘法器设计 图解及代码(计算机组成原理)

Logisim 原码一位乘法器设计 图解及代码(计算机组成原理) 包对

醉蕤的博客 4376

如何安装或卸载DirectShow filter

<br />[install]<br />1. Put the filtername.ax file in the windows/system32 directory<br />2. Register the file from commandline: regsvr32 filtername.ax<br /> <br />[uninstall]<br />regsvr32 /u filtername.ax

humanzt的专栏 2019

树莓派4B保姆级教程:从零配置Python虚拟环境到PySide2开发全流程(含避坑指南)

本文提供树莓派4B上配置Python虚拟环境及PySide2 GUI开发的完整教程。针对armv7l架构的特殊性,详细讲解了从系统准备、虚拟环境创建到PySide2安装的避坑指南,并重点解决了跨平台UI文件处理等常见难题,帮助开发者构建稳定高效的开发环境。

9q8w7e6r5的博客 822

【WRF-Chem教程-附录 C】闪电-NOx 参数化方案详解

闪电-NOx 参数化方案详解

WW、forever的博客 974

DirectShow 学习笔记(二)Filter

11、Filter原理——概述       Filter 是DirectShow中最基本的概念。DirectShow使用Filter Graph来管理Filter(管理者叫做Filter Graph Manager)。Filter Graph是Filter的“容器“,而Filter是Filter Graph中的最小功能模块。    Filter是一种COM组件。为了实现在Filter Gr

hanyufeng的专栏 1976

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2795

Directshow中Filter开发基础

关于开发自己的Filter,我以前写过一篇文章,《利用Directshow开发自己的filter》,里面详细介绍了开发filter一些步骤,这里我想介绍一些filter的基础知识,可以让你更好的理解filter。本篇文档主要包括下面一些内容 1filter的连接 2filter间的数据流动 3pin连接时数据格式的动态改变 4Threads and Critical Sections

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1360

潇洒郎: 小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

潇洒郎的博客 4585

高熵合金AlCoCrFeNi/金刚石摩擦案例代码

本文介绍金刚石与高熵合金AlCoCrFeNi摩擦的案例。 在之前的文章中,介绍过使用fix indent命令实现虚拟球的摩擦,本文介绍使用金刚石实体球实现高熵合金摩擦的方法。 主要的模拟过程如下: (1)基体建模 建使用原子替换法获得高熵合金初始模型,升温到3000K驰豫后,冷却至300K,获得平衡组织。 (2)摩擦球建模 在高熵合金平衡组织的模型中添加金刚石摩擦球,使用change_box命令扩大box尺寸,添加金刚石摩擦球,并设置混合力场。 (3)摩擦过程 摩擦球下压一定深度后,沿y方向进行摩擦,摩擦

lammps_jiayou的博客 2900

LAV Filters完整配置教程:从零精通视频解码优化

还在为视频播放卡顿、格式不兼容而烦恼吗?作为基于ffmpeg项目的开源DirectShow媒体解码套件,LAV Filters提供了完美的解决方案。本文将带你从基础安装到高级优化,全面掌握这款强大的视频解码工具。 ## 视频播放的常见挑战与解决方案 ### 典型播放问题分析 在日常视频播放中,用户经常遇到以下困扰: - **格式兼容性差**:某些播放器无法识别新型视频容器 - **硬件资源浪费

gitblog_00090的博客 911

39-Halcon-- fit_primitives_object_model_3d函数功能(从3D数据中提取几何基元)

Halcon算子fit_primitives_object_model_3d工业应用精要 该算子专为3D几何特征提取设计,支持平面、球体、圆柱等基元拟合。核心优势: 参数化输出:返回几何元素的数学参数(如平面方程、球心半径) 智能控制:通过max_dist、min_size等参数调节拟合精度 工业场景适配:针对薄壁件、孔系等提供专用优化方案 典型应用流程: 数据预处理(点云降噪/采样) 基元类型与参数设置 多阶段拟合(先平面后圆柱) 几何精度验证 误差控制在0.1%-1.2%范围内(视点云密度而定),适用于

weixin_45590420的博客 1161

WeixinBot 网页版微信 API 逆向完全指南:从扫码登录到微信机器人实战

本文以 WeixinBot 开源仓库的 [README.md](https://link.gitcode.com/i/ee934356bea735be38f45b02ab295a1f) 为骨架,系统梳理网页版微信(Web Weixin)从获取 UUID、扫码登录、初始化、同步刷新到收发消息的完整 API 调用链,并结合仓库源码验证每个接口的底层实现与调用细节。读完本文,你将掌握网页版微信各接口的

gitblog_00086的博客 208

算法 | 基于MATLAB的增量式SVD技术综述:实现方法、代码示例与应用实践

效率提升:较传统SVD降低计算复杂度从On3O(n^3)On3至On2O(n^2)On2实时性:支持毫秒级动态数据更新资源友好:内存占用降低60%-80%[5]

尘世冰封的专栏 486

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

音视频同步原理解析;音频编码和解码原理

视频流中的DTS/PTS到底是什么? DTS(解码时间戳)和PTS(显示时间戳)分别是解码器进行解码和显示帧时相对于SCR(系统参考)的时间戳。SCR可以理解为解码器应该开始从磁盘读取数据时的时间。 mpeg文件中的每一个包都有一个SCR时间戳并且这个时间戳就是读取这个数据包时的系统时间。通常情况下,解码器会在它开始读取mpeg流时启动系统时钟(系统时钟的初始值是第一个数据包的SCR值,通常为

yuyin86的专栏 6561

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

DirectShow 简介

About DirectShow       本节描述DirectShow的整体结构。本节包含的内容比较丰富,我们可能不需要知道所有的这些知识。因此,我们首先应该选择浏览全部的内容,然后根据实际应用程序的需要查看Using DirectShow的内容。如果有关于DirectShow结构的特殊问题,可以再回过来参考本节的内容。   1. DirectShow System Overvie

影音视频技术 2367

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

DirectShow简介

3.1 DirectShow 的功用 (1) 保证数据量庞大的多媒体数据处理的高效性; (2) 时刻保持音频和视频的同步; (3) 用简单的方法处理复杂的媒体源问题,包括本地文件,计算机网络,广播电 视以及其他数码产品; (4) 处理各种各样的媒体格式问题,包括 AVI,ASF,MPEG,DV,MOV 等; (5) 支持目标系统中不可预知的硬件; DirectShow 的设计初衷就是尽量要让

建建的博客 5537

因质量控制导致回放录像过快的原因分析

编者:李国帅 qq:9611153 微信lgs9611153 时间:2014/2/26 13:19:55 背景原因: 数年前资料,使用directshow播放录像文件,发生过快现象。其中一个原因是由质量控制引起的。   问题分析:   如果快速播放文件的话,也不能正常显示视频。 远程回放的时候快放现象,实际播放的时间比想要播放的时间短很多。 不能使用sleep暂停播放,那样的话...

lgs7907 1778
上一篇: 编写DirectShow Filters—线程和关键区
下一篇: 编写DirectShow Filters—DirectShow and COM
mapper
博客等级 码龄19年 31粉丝 24原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值