Proporcionar un cambio de tamaño de vídeo personalizado
[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 API no se admite y puede modificarse o no estar disponible en el futuro].
Nota:
Esta característica requiere DirectX 9.0 o posterior.
Cuando DirectShow Editing Services (DES) cambia el tamaño de un clip de origen de vídeo, el comportamiento predeterminado es StretchBlt, que es rápido pero no con alias. Puede cambiar el comportamiento de cambio de tamaño mediante la implementación de un cambio de tamaño personalizado como filtro de transformación DirectShow. El filtro debe exponer la interfaz IResize , que permite a DES especificar el tamaño de vídeo de entrada y salida. Para obtener información sobre cómo escribir un filtro de transformación, vea Escribir filtros de transformación. La clase base CTransformFilter se recomienda como punto de partida. Al implementar el filtro, tenga en cuenta lo siguiente:
- Admita la interfaz IResize en el filtro (no las patillas).
- El filtro solo debe aceptar formatos VIDEOINFOHEADER (FORMAT_VideoInfo). Rechazar otros tipos de formato.
- El formato de vídeo de DES puede ser cualquier tipo RGB sin comprimir, incluido RGB de 32 bits con alfa (MEDIASUBTYPE_ARGB32). El filtro puede rechazar de forma segura los formatos con biHeight< 0.
- Antes de que el motor de representación conecte el pin de salida del filtro, llama a IResize::p ut_MediaType para establecer el tipo de salida. También puede llamar a IResize::p ut_Size para ajustar el tamaño de salida. Puede llamar a estos dos métodos en cualquier orden, cualquier número de veces, antes de conectar el pin de salida.
- Una vez que el motor de representación conecta el pin de salida, podría llamar a put_Size de nuevo. El filtro de cambio de tamaño debe volver a conectar su pin de salida con el nuevo tamaño.
- Dentro del método CTransformFilter::Transform del filtro, extienda el vídeo de entrada al tamaño de salida.
- El filtro nunca debe establecer la marca de discontinuidad en el ejemplo de salida o adjuntar un tipo de medio al ejemplo de salida.
- Para guardar el estado del filtro en un archivo GraphEdit (.grf), implemente la interfaz IPersistStream . (Esto es opcional, pero útil para las pruebas).
Para usar el filtro de cambio de tamaño, el filtro debe estar registrado como un objeto COM en el sistema del usuario. Antes de que la aplicación represente el proyecto de vídeo, consulte el motor de representación para la interfaz IRenderEngine2 y llame a IRenderEngine2::SetResizerGUID con el CLSID del filtro de cambio de tamaño.
Temas relacionados