Condividi tramite


Blocco e sblocco dei puntatori dello stream

Ogni puntatore di flusso mantiene uno stato di blocco: bloccato o sbloccato.

Viene garantito che i puntatori di flusso bloccati facciano riferimento ai dati nella coda. I frame di dati a cui puntano i puntatori di flusso bloccati non possono essere annullati. Di conseguenza, i minidriver devono ridurre al minimo il tempo trascorso mantenendo i puntatori di flusso bloccati.

Non è garantito che un puntatore al flusso sbloccato faccia riferimento a un frame di dati all'interno della coda. Mantenendo un puntatore di flusso sbloccato, un minidriver può conservare un puntatore dati, ma consentire comunque l'annullamento del frame.

È possibile accedere ai dati a cui punta un puntatore di flusso sbloccato. Se la routine CancelCallback che fornisci in KsStreamPointerClone chiama KsStreamPointerDelete, devi sincronizzare CancelCallback e qualsiasi accesso ai dati eseguito. Il minidriver deve garantire che la routine di callback di annullamento non elimini il puntatore dello stream mentre è in uso da un altro thread.

Se la routine di callback di annullamento non chiama KsStreamPointerDelete, la sincronizzazione potrebbe non essere necessaria.

Per bloccare un puntatore di flusso, chiamare KsStreamPointerLock. Per sbloccare un puntatore di flusso, chiamare KsStreamPointerUnlock.

Quando un IRP viene annullato, AVStream chiama i callback di annullamento per tutti i puntatori di flusso sbloccati che puntano ai frame all'interno di IRP.

Sbloccare i puntatori di flusso iniziali e finali solo quando non sono in uso.