Compartir a través de


Acerca de los ejemplos de medios y asignadores

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

Los filtros proporcionan datos entre conexiones de patillas. Los datos se mueven desde el pin de salida de un filtro a la patilla de entrada de otro filtro. La forma más común para que el pin de salida entregue los datos es llamar al método IMemInputPin::Receive en la entrada, aunque también existen algunos otros mecanismos.

En función del filtro, la memoria de los datos multimedia se puede asignar de varias maneras: en el montón, en una superficie de DirectDraw, mediante la memoria GDI compartida o con algún otro mecanismo de asignación. El objeto responsable de asignar la memoria se denomina asignador, que es un objeto COM que expone la interfaz IMemAllocator .

Cuando se conectan dos patillas, uno de los pines debe proporcionar un asignador. DirectShow define una secuencia de llamadas de método que se usa para establecer qué patilla proporciona el asignador. Las patillas también coinciden en el número de búferes que creará el asignador y el tamaño de los búferes.

Antes de que comience el streaming, el asignador crea un grupo de búferes. Durante el streaming, el filtro ascendente rellena los búferes con datos y los entrega al filtro de bajada. Pero el filtro ascendente no proporciona los punteros sin procesar del filtro de bajada a los búferes. En su lugar, usa objetos COM denominados ejemplos multimedia, que el asignador crea para administrar los búferes. Los ejemplos multimedia exponen la interfaz IMediaSample . Un ejemplo multimedia contiene:

  • un puntero al búfer subyacente
  • una marca de tiempo
  • varias marcas
  • opcionalmente, un tipo de medio

La marca de tiempo define el tiempo de presentación, que el filtro del representador usa para programar la representación. Las marcas indican cosas como si se produjo un salto en los datos desde el ejemplo anterior. El tipo de medio proporciona una manera de que los filtros cambien los formatos de la secuencia media. Normalmente, el ejemplo no tiene ningún tipo de medio, lo que indica que el formato no ha cambiado desde el ejemplo anterior.

Mientras un filtro usa un búfer, contiene el recuento de referencias en el ejemplo. El asignador usa el recuento de referencias para determinar cuándo puede volver a usar el búfer. Esto impide que un filtro sobrescriba un búfer que otro filtro sigue usando. Un ejemplo no vuelve al grupo de muestras disponibles del asignador hasta que cada filtro lo haya liberado.

Para obtener más información, vea los temas siguientes:

Los temas siguientes están diseñados para desarrolladores que escriben sus propios filtros personalizados:

El gráfico de filtros y sus componentes