水印+ Directshow过滤器

时间:2010-04-06 04:39:44

标签: visual-c++ directshow msdn directshow.net

我想在我的视频上添加水印。是否可以使用directshow过滤器。 想要在视频上重叠图像,如频道徽标。这样当视频播放时图像就会被修复。

请提供一些有价值的帮助或样本(VC ++)

1 个答案:

答案 0 :(得分:2)

我以前做过这个。你有两个选择。

  1. 使用VMR-7或VMR-9的混音器功能。我保证你看起来很丑陋,因为VMR滤镜根本不能进行alpha混合。你的水印会有粗糙的边缘。

  2. 实现一个派生自CTransInPlaceFilter的过滤器类。

  3. 您实施以下方法:

      CheckMediaType   (accept all RGB formats)
       SetMediaType     (accept all RGB formats)
       Transform        (this is where you do the overlay)
    

    在过滤器的构造函数中(或在图表运行之前调用的其他方法),从文件或资源加载水印。将图像文件的位图位保存到缓冲区中。

    当调用Transform时,破解传入的IMediaSample,访问其缓冲区,并使用双嵌套for循环将水印的每个像素复制到图像的缓冲区。

    所有这一切的一个问题是您的输入源可能不是原生RGB。例如,大多数网络摄像头都是YUV源(或更糟糕的是,MJPG)。通过将过滤器约束为仅接受RGB类型,将强制加载DShow颜色转换器过滤器。因此,额外的延迟可能会添加到您的图表中。至于alpha混合(如果你想要它),你就是你自己 - 你在blitting上面的源缓冲区很可能是没有alpha通道的RGB24。