Compartir a través de


procesamiento de In-Place

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

Algunas transformaciones de datos se pueden realizar modificando directamente los datos. Esto se denomina procesamiento local . Muchos efectos de audio y vídeo se pueden hacer de esta manera. Si un DMO admite el procesamiento en contexto, expone la interfaz IMediaObjectInPlace . El procesamiento en contexto suele ser más eficaz que usar búferes independientes para la salida. (Una excepción principal es cuando el búfer reside en la memoria de vídeo. En esa situación, las operaciones de lectura son mucho más lentas que las operaciones de escritura, por lo que no se recomienda el procesamiento en contexto).

Para procesar datos en contexto, el cliente realiza una sola llamada al método IMediaObjectInPlace::P rocess , en lugar de llamadas independientes a ProcessInput y ProcessOutput. El método Process es sincrónico; todo el procesamiento se produce dentro de la llamada. Además, el procesamiento en contexto no usa objetos IMediaBuffer . El método Process toma un puntero directamente al búfer de memoria.

Un DMO que admita el procesamiento en contexto todavía debe implementar la interfaz IMediaObject , incluidos los métodos ProcessInput y ProcessOutput . El cliente puede elegir si se va a usar el procesamiento en contexto o usar búferes independientes. Sin embargo, no combine los dos tipos de procesamiento. Si llama a Process, no llame a ProcessInput o ProcessOutput y viceversa.

Colas de efecto

Un DMO local podría crear alguna salida adicional después de que la entrada se detenga. Esto se denomina cola de efecto. Por ejemplo, un efecto de reverberación continúa después de que la entrada alcance el silencio. Si hay un final de efecto, el método Process devuelve S_FALSE. Una vez que la aplicación ha procesado todos sus datos, puede generar el final del efecto mediante el envío de búferes vacíos al método Process .

Hospedaje directo de un DMO