Compartir a través de


Distribuidores de complementos

[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 distribuidores de complementos (PID) son una manera de ampliar la funcionalidad del administrador de gráficos de filtros. Un distribuidor de complementos es un objeto COM que el administrador de gráficos de filtros agrega en tiempo de ejecución. Las aplicaciones obtienen acceso al PID a través del administrador de gráficos de filtros.

Cuando se consulta el administrador de gráficos de filtros para una interfaz que no admite, busca en el Registro una clave con el siguiente formato:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID es una cadena que contiene el identificador de interfaz. Si existe la entrada del Registro, el valor de la entrada define el identificador de clase (CLSID) de un PID que admite la interfaz . El administrador de gráficos de filtros agrega el PID y devuelve un puntero de interfaz, actuando como IUnknown externo para el PID. Cuando la aplicación llama a métodos en la interfaz, realmente los llama en el PID. Sin embargo, la existencia del PID es transparente para la aplicación.

El término distribuidor se deriva del hecho de que un PID puede consultar su puntero IUnknown externo para las interfaces en el administrador de gráficos de filtros. Al llamar al método IFilterGraph::EnumFilters , el PID puede enumerar los filtros del gráfico y distribuir llamadas de método a esos filtros. De esta manera, un PID puede servir como un único punto de control para que la aplicación llame a métodos en filtros.

Cuando el administrador de gráficos de filtros agrega un PID, consulta el PID para la interfaz IDistributorNotify . Si el PID admite esta interfaz, el administrador de gráficos de filtros lo usa para notificar al PID sobre los cambios en el gráfico:

Para implementar un PID personalizado, cree un objeto COM que admita la agregación. Debe admitir una interfaz que el administrador de gráficos de filtros aún no admite. Opcionalmente, puede admitir la interfaz IDistributorNotify .

Si el PID obtiene punteros de interfaz del administrador de gráficos de filtros, debe liberarlos inmediatamente. De lo contrario, podría crear un recuento de referencias circulares, lo que podría impedir que el administrador de gráficos de filtros se destruya. Mantener un recuento de referencias en el administrador de gráficos de filtros no es necesario en cualquier caso, ya que el administrador de gráficos de filtros controla la duración del PID.

Dado que un PID está diseñado específicamente para la agregación por el administrador de gráficos de filtros, es posible que desee aplicarlo en el método de constructor del PID. Compruebe si el puntero IUnknown externo es NULL y, si es así, devuelve el código de error VFW_E_NEED_OWNER. (Consulte Códigos de error y éxito). Además, para evitar que otros objetos agreguen el PID, puede consultar el puntero IUnknown externo para la interfaz IGraphBuilder . Devuelve un código de error si el objeto no expone IGraphBuilder.