DirectShow中间过滤器需要注意的问题

李国帅 摘自工作日志
2012/7/10 13:57:45


在解码过滤器之后,渲染器之前,加入一个中间过滤器,就可以在这个过滤器中对媒体帧进行后处理,比如处理抓图,缩放,绘图等。


处理数据解码后非YUV420P的情况
     我们将中间过滤器的inpin设定为接收YV12,但有些视频或解码器不能输出YV12格式,只可以输出I420格式,那么就需要将uv互换,变成YV12进行播放。


是否需要把yuv转换为RGB
     做一个后处理的transform filter,把yuv数据转换为rgb数据。 除非有必要,不然的话没有必要做这一步,因为vmr自己根据显卡决定是yuv格式还是rgb格式。
     有些显示器无法显示YV12格式图像帧,但现在已经很少了。

    对于现在的显示设备,基本上都支持YV12,不再需要考虑RGB播放以及其他的YUV格式。


如何在视频上绘制线条或者缩放框
     方法1、
     生成一个内存dc,和一个bmp内存图像,把一帧rgb数据写入bmp文件,然后把dc和bmp文件进行关联。
     使用dc对bmp图像进行拉伸,缩放,绘图,和其他的任何处理。
     方法2、
     在界面上添加一个透明窗口,绘制文字和线条。方法简单,但窗口必须是播放窗口的上层窗口。


中间过滤器的限制
     现在自己用的中间过滤器仅仅支持YV12格式,如果不是YV12,那么必须转换为YV12,这样的话中间处理就不能继承自CTransInPlaceFilter,需要使用CTransformFilter这样的过滤器,因为输入输出媒体格式不一样。
     把解码之后的视频格式从RGB或其他YUV格式转换为YV12格式,可以自己按照公式转换,也可以使用ffmpeg中的转换函数。
     其实如果转换为RGB格式进行输出,视频图像处理更加方便一些,因为对rgb的处理有比较成熟的技术,也更加的直观。


中间过滤器改进
     以后可能加入,去噪,锐化,抓图等等。
     如果使用evr,中间过滤器不能够抓到图像,好像抓到的都是0,但使用evr的抓图接口是可以抓到图像的。
--------------------------------------------


现在开始做一个中间处理过滤器,把放大的矩形框绘制到画面上。
中间过滤器基类有三种选择
     CBaseFilter CBaseInputPin CBaseOutputPin
     CTransformFilter CTransformInputPin CTransformOutputPin 进行数据转换,可以改变媒体类型和媒体缓冲区
     CTransInPlaceFilter CTransInPlaceInputPin CTransInPlaceOutputPin 仅仅是把缓冲区里面数据进行处理。

如果要把yv12改变为yuv或者rgb格式,可以在render中进行,现在的render使用了vmr9,现在不用考虑显示器不能播放rgb的情况。

所以直接更改yv数据,在yv12数据中绘制矩形,这样快捷,方便。

名字定为“XVideoTransFilter ”,仅仅处理视频。主要处理绘制绘制矩形。
但是如果后期需要进行复杂的操作,比如进行倒放缓冲,可以这个基础上更改的话。
暂不处理音频,需要进行音频处理,另外加入一个过滤器。


YUV介绍


YUV(从技术上来讲并不叫YUV而 是叫做YCbCr)是一种类似于RGB方式的存储原始图像的格式。 粗略的讲,Y是亮度分量,U和V是色度分量。(这种格式比RGB复杂的多,因为很多的颜 色信息被丢弃了,而且你可以每2个Y有1个U和1个V)。SDL的YUV覆盖使用一组原始的YUV数据并且在屏幕上显示出他们。它可以允许4种不同的 YUV格式,但是其中的YV12是最快的一种。还有一个叫做YUV420P的YUV格式,它和YV12是一样的,除了U和V分量的位置被调换了以外。 420意味着它以4:2:0的比例进行了二次抽样,基本上就意味着1个颜色分量对应着4个亮度分量。所以它的色度信息只有原来的1/4。这是一种节省带宽 的好方式,因为人眼感觉不到这种变化。在名称中的P表示这种格式是平面的――简单的说就是Y,U和V分量分别在不同的数组中。FFMPEG可以把图像格式 转换为YUV420P,但是现在很多视频流的格式已经是YUV420P的了或者可以被很容易的转换成YUV420P格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值