Processando Mutex no AVStream

O terceiro mutex é o mutex de processamento. Filtros e pinos individuais têm seus próprios mutexes de processamento. O AVStream adquire independentemente o mutex de processamento antes do processamento no nível do filtro e do pino, a fim de sincronizar o acesso a estruturas relacionadas ao processamento. O AVStream também adquire o mutex de processamento durante outras operações, incluindo a associação de pinos a uma seção de pipe, operações de suspensão ou ativação de energia e alteração de descritores. Os minidrivers podem adquirir manualmente o mutex para executar uma operação síncrona, como processamento ou modificação de descritor. Um minidriver deve obter o mutex de processamento antes de fazer qualquer alteração que não possa acontecer ao mesmo tempo que o processamento.

Como os outros dois tipos de mutexes, o processamento de mutexes não é obtido recursivamente. Isso significa que, se um minidriver tentar capturar o mutex de processamento durante o processamento, ocorrerá um deadlock.

Não use o mutex de processamento para suspender o processamento por longos períodos de tempo. Em vez disso, manipule a porta de controle de processamento diretamente usando as funções KSGATEXxx .

Um thread que adquiriu um mutex de processamento não deve tentar adquirir o mutex de controle de filtro posteriormente.

Para manipular o mutex de processamento, use as seguintes funções:

KsFilterAcquireProcessingMutex, KsPinAcquireProcessingMutex, KsFilterReleaseProcessingMutex, KsPinReleaseProcessingMutex