Transições de estado
Para garantir a alocação ordenada de recursos, somente um subconjunto das possíveis transições de estado de streaming de kernel é permitido. A tabela a seguir lista as transições permitidas junto com as tarefas que um minidriver de classe Stream normalmente executa durante essas transições.
Transição | Descrição |
---|---|
Parar para pausar |
Alocar recursos. As SRBs de leitura são enfileiradas após a conclusão da transição para KSSTATE_PAUSE . |
Pausar para executar |
Inicie o streaming. |
Executar para pausar |
Pare o streaming. As SRBs de leitura pendentes permanecem na fila mantida pelo minidriver. |
Pausar para parar |
Desaloque os recursos e conclua todas as SRBs de leitura pendentes. As SRBs que não foram preenchidas com uma imagem são concluídas com comprimento zero no membro DataUsed da estrutura KSSTREAM_HEADER . |
Observação : as transições podem circular várias vezes entre os estados KSSTATE_PAUSE e KSSTATE_RUN antes de retornar ao estado KSSTATE_STOP . Os minidrivers de captura de vídeo devem esperar transições como:
KSSTATE_STOP ->KSSTATE_ACQUIRE ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE -> KSSTATE_STOP
Quando um fluxo está em um estado KSSTATE_STOP , o minidriver deve concluir imediatamente todas as SRBs de leitura de dados pendentes.
Como um aplicativo de modo de usuário pode terminar inesperadamente durante o streaming, todos os minidrivers da classe Stream devem aceitar e processar uma solicitação SRB_CLOSE_STREAM da interface da classe Stream a qualquer momento. Antes que a interface da classe Stream envie SRB_CLOSE_STREAM para um minidriver, ela cancela todos os buffers pendentes por meio da rotina HwCancelPacket do minidriver . Observe que o estado do fluxo não pode ser definido como KSSTATE_STOP antes que o aplicativo seja encerrado.
Não atualize os membros PictureNumber ou DropCount de KS_FRAME_INFO, KS_VBI_FRAME_INFO ou KSPROPERTY_DROPPEDFRAMES_CURRENT_S na transição de KSSTATE_PAUSE para KSSTATE_RUN ou KSSTATE_RUN para KSSTATE_PAUSE. Para obter mais informações, consulte Captura de vídeo.