A 100-lines code snippet which illustrates how a bitmap is overlaid over displayed video with Video Mixing Renderer 9 Filter using IVMRMixerBitmap9 interface. A video clip is played (default is Windows clock.avi, but you can replace it with your longer one to see overlay is really in a loop).
http://code.assembla.com/…/VmrMixerBitmapSample01/…
VMR9AlphaBitmap AlphaBitmap; ZeroMemory(&AlphaBitmap, sizeof AlphaBitmap); AlphaBitmap.dwFlags = VMR9AlphaBitmap_hDC; AlphaBitmap.hdc = Dc; AlphaBitmap.rSrc = CRect(0, 0, 32, 32); AlphaBitmap.rDest.left = (FLOAT) 0.75; AlphaBitmap.rDest.top = (FLOAT) 0.75; AlphaBitmap.rDest.right = (FLOAT) 0.95; AlphaBitmap.rDest.bottom = (FLOAT) 0.95; AlphaBitmap.fAlpha = 0.75; const HRESULT nSetAlphaBitmapResult = pVmrMixerBitmap->SetAlphaBitmap(&AlphaBitmap); ATLENSURE_SUCCEEDED(nSetAlphaBitmapResult);
With a low FPS clip like clock.avi it is clear that the overlaid image is only updated with the next “main” video frame.
Visual C++ .NET 2008 source code is available from SVN, release binary included.