Compartir a través de


Mutex de Control de Filtro en AVStream

Cada instancia de filtro AVStream tiene un mutex de control del filtro asociado. Este mutex se usa para sincronizar el acceso a la jerarquía de objetos desde el filtro hacia abajo a los pines individuales. La creación y destrucción de filtros y pines se sincronizan con este mutex.

Se garantiza que la jerarquía de objetos solo es estable desde una instancia de filtro específica hacia abajo mientras se mantiene el mutex del control de filtro. En consecuencia, el minidriver debe obtener el mutex de control de filtro antes de atravesar la jerarquía de objetos por debajo del nivel de filtro mediante las funciones KsXxxGetFirstChildXxx y KsXxxGetNextSiblingXxx.

El mutex del control de filtro también se utiliza para sincronizar las transiciones de estado.

AVStream obtiene el mutex de control del filtro cuando maneja propiedades que requieren que la jerarquía permanezca estable, como al realizar la modificación del descriptor.

Tenga en cuenta que se utiliza un único mutex de control de filtro para la jerarquía de objetos bajo cada filtro individual. Esto significa que un objeto pin utiliza el mutex de control de filtro de su elemento primario cuando un minidriver llama a una función que utiliza un objeto pin.

AVStream mantiene el mutex de control de filtro en nombre del minidriver cuando llama a las siguientes rutinas proporcionadas por el minidriver:

De forma similar a la exclusión mutua del dispositivo, la exclusión mutua del control de filtro no se debe obtener de forma recursiva. Si, por ejemplo, AVStream realiza una devolución de llamada a un minidriver para un envío Create en el contexto del subproceso A, y el minidriver intenta obtener el mutex desde dentro del subproceso A, el subproceso A se interbloquea con sí mismo.

Se puede producir un interbloqueo si realiza alguna de las siguientes acciones:

  • Intente adquirir el mutex del control de filtro desde dentro de la rutina del proceso.

  • Intente obtener el mutex de control de filtro dentro de las devoluciones de llamada de Sleep o Wake.

Para manipular el mutex del control de filtro, use las funciones siguientes:

KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl