Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A CDynamicOutputPin classe implementa um pino de saída que dá suporte a reconexões dinâmicas e alterações de formato.
Essa classe deriva da classe CBaseOutputPin e implementa a interface IPinFlowControl . Ele dá suporte a várias operações importantes para a criação dinâmica de grafo:
- Reconexão dinâmica: o pino pode se desconectar e reconectar enquanto o filtro ainda estiver ativo (pausado ou em execução).
- Alteração de formato dinâmico: o pin pode negociar um novo tipo de mídia enquanto o filtro ainda estiver ativo, sem reconectar.
- Controle de fluxo: o filtro proprietário (ou um aplicativo) pode bloquear o fluxo de dados do pino sem interromper o filtro.
Para obter mais informações, consulte Dynamic Graph Building.
O pino tem três estados possíveis: bloqueado, desbloqueado e pendente. No estado pendente , o pino está aguardando a conclusão de alguma operação em outro thread, antes que o pino mude para o estado bloqueado. Embora o pino esteja bloqueado, o filtro não pode fornecer dados por meio do pino ou alterar a conexão do pino.
Para coordenar entre vários threads, o filtro proprietário deve seguir determinadas regras. (Para obter mais informações sobre threads no grafo de filtro, consulte Threads e Seções Críticas.) Primeiro, o thread de streaming deve sempre chamar o método CDynamicOutputPin::StartUsingOutputPin antes de chamar qualquer um dos seguintes métodos:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
Posteriormente, ele deve chamar o método CDynamicOutputPin::StopUsingOutputPin .
Em segundo lugar, o thread do aplicativo não deve chamar nenhum dos métodos na lista anterior. Em terceiro lugar, o thread de streaming não deve chamar os métodos de classe que bloqueiam ou desbloqueia o pino. Esses métodos são: CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPin e CDynamicOutputPin::UnblockOutputPin.
Essas regras garantem que o thread do aplicativo não possa bloquear o pino enquanto o thread de streaming o estiver usando e vice-versa. Depois que o thread de streaming tiver chamado StartUsingOutputPin, o pino não será bloqueado até que o thread de streaming chame StopUsingOutputPin. Por outro lado, se o pino estiver bloqueado, StartUsingOutputPin aguardará até que o pino seja desbloqueado.
Para evitar esquecer de chamar StopUsingOutputPin, você pode usar a classe CAutoUsingOutputPin . Ele chama StopUsingOutputPin automaticamente quando ele sai do escopo.
Quando o filtro proprietário ingressa ou deixa o grafo de filtro (em seu método IBaseFilter::JoinFilterGraph ), ele deve chamar o método CDynamicOutputPin::SetConfigInfo do pino.
| Variáveis de membro protegidas | Descrição |
|---|---|
| m_BlockStateLock | Seção crítica que protege o estado de bloqueio. |
| m_hUnblockOutputPinEvent | Evento que é sinalizado quando o pino não está bloqueado. |
| m_hNotifyCallerPinBlockedEvent | Evento que é sinalizado quando o pino é bloqueado com êxito ou o usuário cancela um bloco pendente. |
| m_BlockState | Estado de bloqueio. |
| m_dwBlockCallerThreadID | O identificador do thread que chamou pela última vez o método IPinFlowControl::Block nesse pin. |
| m_dwNumOutstandingOutputPinUsers | Número de threads de streaming usando esse pino. |
| m_hStopEvent | Evento que é sinalizado quando o filtro é interrompido ou o pino libera dados. |
| m_pGraphConfig | Ponteiro para a interface IGraphConfig para executar reconexões dinâmicas. |
| m_bPinUsesReadOnlyAllocator | Sinalizador que especifica se os exemplos do alocador do pin são somente leitura. |
| Métodos Protegidos | Descrição |
| SynchronousBlockOutputPin | Bloqueia o pino; não retorna até que o pino seja bloqueado. |
| AsynchronousBlockOutputPin | Bloqueia o pino; pode retornar antes que o pino seja bloqueado. |
| UnblockOutputPin | Desbloqueia o pino. |
| BlockOutputPin | Bloqueia o pino. |
| WaitEvent | Aguarda até que o evento especificado seja sinalizado. |
| Métodos públicos | Descrição |
| CDynamicOutputPin | Método de construtor. |
| ~CDynamicOutputPin | Método destruidor. |
| SetConfigInfo | Especifica o ponteiro IGraphConfig e o evento stop. |
| DeliverBeginFlush | Solicita o pin de entrada conectado para iniciar uma operação de liberação. |
| DeliverEndFlush | Solicita o pin de entrada conectado para encerrar uma operação de liberação. |
| Inativo | Notifica o pino de que o filtro foi interrompido. |
| Ativo | Notifica o pino de que o filtro agora está ativo. |
| Completeconnect | Conclui uma conexão com um pino de entrada. Virtual. |
| StartUsingOutputPin | Obtém acesso ao pino para uma operação de streaming. Virtual. |
| StopUsingOutputPin | Libera o acesso ao pino após uma operação de streaming. Virtual. |
| StreamingThreadUsingOutputPin | Determina se algum thread está executando uma operação de streaming no pino. Virtual. |
| ChangeOutputFormat | Altera dinamicamente o tipo de mídia para a conexão e fornece novas informações de segmento. |
| ChangeMediaType | Altera dinamicamente o tipo de mídia para a conexão. |
| DynamicReconnect | Executa uma reconexão dinâmica com um novo tipo de mídia. |
| Métodos IPin | Descrição |
| Desconectar | Quebra a conexão de pino atual. |
| Métodos IPinFlowControl | Descrição |
| Bloquear | Bloqueia ou desbloqueia o fluxo de dados do pino. |
Requisitos
| Requisito | Valor |
|---|---|
| parâmetro |
|
| Biblioteca |
|