2010-04-06 6 views
0

내 비디오에 워터 마크를 넣으 려합니다. DirectShow 필터로 할 수 있습니다. 채널 로고와 같은 비디오에서 이미지를 겹치고 싶습니다. 비디오가 재생 중일 때 이미지가 고정됩니다.워터 마크 + DirectShow 필터

몇 가지 유용한 도움말이나 샘플을 제공해주세요. (VC++)

답변

2

이전에 해 보았습니다. 두 가지 옵션이 있습니다.

  1. VMR-7 또는 VMR-9의 믹서 기능을 사용하십시오. VMR 필터는 알파 블렌딩을 전혀 수행 할 수 없으므로 이것이 실제로보기 흉하게 보일 것입니다. 워터 마크의 가장자리가 거칠어집니다.

  2. CTransInPlaceFilter에서 파생되는 필터 클래스를 구현합니다.

다음과 같은 방법을 구현 : 필터의 생성자에서

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

가 (또는 그래프 실행되기 전에 호출되는 다른 방법에), 파일 또는 자원에서 워터 마크를로드합니다. 이미지 파일의 비트 맵 비트를 버퍼에 저장하십시오.

Transform이 호출되면 전달 된 IMediaSample을 열어 버퍼에 액세스하고 double-Nested-for 루프를 사용하여 워터 마크의 각 픽셀을 이미지의 버퍼로 복사합니다.

이 모든 문제 중 하나는 입력 소스가 네이티브 RGB가 아닐 수 있다는 것입니다. 예를 들어 대부분의 웹캠은 YUV 소스 (또는 더 나쁜 MJPG)입니다. RGB 유형 만 허용하도록 필터를 제한하면 DShow 색상 변환기 필터가로드됩니다. 따라서 추가 대기 시간이 그래프에 추가 될 수 있습니다. 알파 블렌딩 (원하는 경우)은 여기에 있습니다. 블리스팅하는 소스 버퍼는 알파 채널이없는 RGB24입니다.

+0

더 간단한 옵션 3 : 샘플 그래버를 사용하고 콜백을 호출 할 때 비디오 내용을 수정하십시오. –