2010-04-06 79 views
0

我想爲我的視頻添加水印。是否有可能做directshow過濾器。 想要在頻道徽標等視頻上重疊圖片。以便在播放視頻時圖像會被固定。水印+ Directshow過濾器

請提供一些有價值的幫助或樣本(VC++)

回答

2

我以前也這樣做過。你有兩個選擇。

  1. 使用VMR-7或VMR-9的混音器功能。我保證你看起來真的很醜,因爲VMR濾波器根本不能做alpha混合。你的水印會有粗糙的邊緣。

  2. 實現一個派生自CTransInPlaceFilter的過濾器類。

您實現以下方法:

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。

+0

有一個更簡單的選項3:使用Sample Grabber並在調用回調時修改視頻內容。 – 2012-09-11 08:02:53