Controlar eventos de reintentos en la captura de vídeo
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
Si crea un gráfico de captura de vídeo sin usar la interfaz ICaptureGraphBuilder2 y obtiene una vista previa del vídeo mediante el filtro antiguo de Video Renderer, debe invalidar el control predeterminado para los eventos de EC_REPAINT . Consulte el Administrador de gráficos de filtros para la interfaz IMediaEvent y llame al método IMediaEvent::CancelDefaultHandling con el valor EC_REPAINT:
IMediaEvent *pEvent = 0;
hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent);
if (SUCCEEDED(hr))
{
pEvent->CancelDefaultHandling (EC_REPAINT);
pEvent->Release();
}
Esto evita un posible error que puede dañar el archivo de captura. Si el usuario cubre y descubre la ventana de vista previa, el filtro Video Renderer recibe un mensaje de WM_PAINT. De forma predeterminada, Video Renderer solicita un nuevo fotograma y el Administrador de gráficos de filtros pausa el grafo para dar indicaciones a otro fotograma de vídeo. Si esto sucede mientras el grafo está escribiendo un archivo, dañará el archivo. La invalidación del comportamiento predeterminado de EC_REPAINT impide que el representador solicite un nuevo marco.
No es necesario realizar este paso si usa la interfaz ICaptureGraphBuilder2 , ya que Capture Graph Builder lo hace automáticamente. Además, no es necesario si usa el representador de mezcla de vídeos (VMR) para la versión preliminar. VmR siempre tiene el fotograma más reciente disponible, por lo que no envía eventos EC_REPAINT.
Temas relacionados