Correspondencia operativa con el controlador del dispositivo de compensación de movimiento

[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.

Esta sección contiene una descripción del lado del controlador del dispositivo de compensación de movimiento de la interfaz de DirectX VA. (Referencia:Windows 2000 DDK - Controladores gráficos - Guía de diseño - 3.0 DirectDraw DDI - Compensación de movimiento 3.12. Consulta el DDK de Windows para obtener documentación sobre las estructuras en negrita).

Los siguientes elementos hacen referencia a las entradas a las que se accede a través de la estructura de DD_MOTIONCOMPCALLBACKS :

  1. Al principio del procesamiento pertinente, el controlador de dispositivo DdMoCompCreate se usa para notificar al controlador que el descodificador de software comenzará a usar un objeto de aceleración de vídeo.
  2. Los GUID recibidos de IAMVideoAccelerator::GetVideoAcceleratorGUIDs se originan en los DdMoCompGetGUID del controlador del dispositivo.
  3. Una llamada al pin de entrada de bajada IAMVideoAccelerator::GetUncompFormatsSupported devuelve datos del DdMoCompGetFormats del controlador del dispositivo.
  4. La estructura de datos DXVA_ConnectMode del IAMVideoAcceleratorNotify::GetCreateVideoAcceleratorData del descodificador se pasa al DdMoCompCreate del controlador del dispositivo.
  5. Los datos devueltos desde IAMVideoAccelerator::GetCompBufferInfo se originan en DdMoCompGetBuffInfo del controlador del dispositivo.
  6. Los búferes enviados mediante IAMVideoAccelerator::Execute se reciben mediante DdMoCompRender del controlador del dispositivo.
  7. El uso de IAMVideoAccelerator::QueryRenderStatus invoca el DdMoCompQueryStatus del controlador del dispositivo. El descodificador del host verá un código de retorno de DDERR_WASSTILLDRAWING desde DdMoCompQueryStatus como código de retorno de E_PENDING desde IAMVideoAccelerator::QueryRenderStatus.
  8. Los datos enviados a IAMVideoAccelerator::BeginFrame se reciben mediante el DdMoCompBeginFrame del controlador del dispositivo. Se necesita un código de retorno de E_PENDING desde DdMoCompBeginFrame para que el descodificador del host vea E_PENDING en respuesta a IAMVideoAccelerator::BeginFrame.
  9. Los datos enviados a IAMVideoAccelerator::EndFrame los recibe el DdMoCompEndFrame del controlador del dispositivo.
  10. Al final del procesamiento pertinente, el controlador de dispositivo DdMoCompDestroy se usa para notificar al controlador que el objeto de aceleración de vídeo actual ya no se usará, de modo que el controlador pueda realizar cualquier limpieza necesaria.