Bloqueo y desbloqueo de punteros de flujo
Cada puntero de secuencia mantiene un estado de bloqueo: bloqueado o desbloqueado.
Se garantiza que los punteros de flujo bloqueados hagan referencia a los datos de la cola. No se pueden cancelar los marcos de datos a los que apuntan los punteros de flujo bloqueados. Por lo tanto, los minidrivers deben minimizar el tiempo que dedican a mantener punteros de flujo bloqueados.
No se garantiza que un puntero de secuencia desbloqueado haga referencia a una trama de datos dentro de la cola. Al mantener presionado un puntero de flujo desbloqueado, un minidriver puede conservar un puntero de datos, pero permite que se cancele el fotograma.
Es posible acceder a los datos a los que apunta un puntero de flujo desbloqueado. Si la rutina CancelCallback que proporciona en KsStreamPointerClone llama a KsStreamPointerDelete, debe sincronizar CancelCallback y cualquier acceso a datos que realice. El minidriver debe asegurarse de que la rutina de devolución de llamada de cancelación no elimina el puntero de secuencia mientras otro subproceso lo usa.
Si la rutina de devolución de llamada de cancelación no llama a KsStreamPointerDelete, es posible que no sea necesaria la sincronización.
Para bloquear un puntero de secuencia, llame a KsStreamPointerLock. Para desbloquear un puntero de secuencia, llame a KsStreamPointerUnlock.
Cuando se cancela un IRP, AVStream llama a las devoluciones de llamada de cancelación para todos los punteros de secuencia desbloqueados que apuntan a fotogramas dentro del IRP.
Desbloquee los punteros de flujo perimetral iniciales y finales solo cuando no estén en uso.