|
需求是在UI层上插入一块区域以播放视频,因为这个UI是用3D渲染的,其实就是在3D的纹理上输出视频。
目前是用directShow中的VMR9做的,参照winSDK7.1\DirectShow里的VMR9Allocator这个示例程序,不同的是它是在视频帧输出的时候就渲染到面上去,我这里因为UI本身使用一个控制台统一渲染,所以不能在VMR9输出帧(PresentImage)的时候直接渲染,只能将这个函数里的lpPresInfos.lpSurf使用StretchRect复制到UI的Texture中等UI需要渲染时再使用这个Texture。
然后因为这个StretchRect本身的限制,需要将Texture设置为USAGE_RenderTarget,我在VMR9将视频帧输出到UI本身的纹理上时将这个纹理保存为图片,此时这个纹理确实是视频中的内容。但是在UI使用这个纹理进行渲染时会发现这个纹理已经被改得面目全非了,是不是设置为RenderTarget的纹理可能被DX修改?
有没有对DirectShow熟悉的大神帮忙解释一下,或者有什么别的方式可以实现这种在3D的UI上播放视频的功能?
|
|