yooyo
19th October 2009, 02:58
Hi,
Rescently, NVidia disable full screen video option in drivers, so with new board, user cant send overlay to second screen in full screen.
Before, when app open overlay surface it is fullscreen on TV out or second screen. Overlay Mixer Direct Show filter was inserted between video decoder and video renderer and "intercept" decoded stream and render it on overlay surface.
Today seems that overlay is obsolete (not usefull in composite desktop).
I would like to develop Fake Overlay Mixer, which actually create fullscreen window on second display and render video on it. I have some experience in Direct Show development, mostly video renderers, to combine video and 3d graphics.
Im using OpenGL to render video stream.
Video Decoder ---> FakeOverlayMixer ---> Video Renderer
FOM create fullscreen window and opengl context, use async PBO codepath to upload frames without CPU stall.
So far now, I tried develop FakeOverlayMixer based on CTransforormInPlace filter or just by CTransform filter but Im not happy with result.
In CTransInPlace way, my filter automatically inserts itself in graph, but when I try to copy frame to video card buffer it is slow and it drop frames.
In case of CTransform filter, my filter cannot connect to renderer.. Input pin gets connected, but output pin cant be connected!?
So far.. I have several questions:
1. How to allow only one instance of filter in graph?
2. Which base class should I use? CTransform or CTransformInPlace? Which functions to override?
3. Filter should support rgb24, rgb32, yuy2, yuv2. I can make shaders to convert yuv to rgb. How to negotiate "supported pixelformats"?
Rescently, NVidia disable full screen video option in drivers, so with new board, user cant send overlay to second screen in full screen.
Before, when app open overlay surface it is fullscreen on TV out or second screen. Overlay Mixer Direct Show filter was inserted between video decoder and video renderer and "intercept" decoded stream and render it on overlay surface.
Today seems that overlay is obsolete (not usefull in composite desktop).
I would like to develop Fake Overlay Mixer, which actually create fullscreen window on second display and render video on it. I have some experience in Direct Show development, mostly video renderers, to combine video and 3d graphics.
Im using OpenGL to render video stream.
Video Decoder ---> FakeOverlayMixer ---> Video Renderer
FOM create fullscreen window and opengl context, use async PBO codepath to upload frames without CPU stall.
So far now, I tried develop FakeOverlayMixer based on CTransforormInPlace filter or just by CTransform filter but Im not happy with result.
In CTransInPlace way, my filter automatically inserts itself in graph, but when I try to copy frame to video card buffer it is slow and it drop frames.
In case of CTransform filter, my filter cannot connect to renderer.. Input pin gets connected, but output pin cant be connected!?
So far.. I have several questions:
1. How to allow only one instance of filter in graph?
2. Which base class should I use? CTransform or CTransformInPlace? Which functions to override?
3. Filter should support rgb24, rgb32, yuy2, yuv2. I can make shaders to convert yuv to rgb. How to negotiate "supported pixelformats"?