Fluxos opcionais
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]
Um DMO pode designar alguns de seus fluxos de saída como opcionais. Um fluxo opcional produz dados que o aplicativo pode descartar, por completo ou em exemplos ocasionais. Por exemplo, um fluxo opcional pode conter informações adicionais sobre um fluxo primário.
Para consultar se um fluxo é opcional, chame o método IMediaObject::GetOutputStreamInfo e marcar o parâmetro pdwFlags. Os fluxos opcionais retornam o sinalizador DMO_OUTPUT_STREAMF_DISCARDABLE ou o sinalizador DMO_OUTPUT_STREAMF_OPTIONAL. Essas bandeiras significam quase a mesma coisa; uma pequena diferença entre eles será explicada em breve.
Se um fluxo for opcional, o cliente poderá instruir o DMO a descartar dados desse fluxo ao processar a saída. Para fazer isso, chame o método IMediaObject::P rocessOutput e defina o buffer de saída como NULL para cada fluxo que você deseja descartar. (O buffer de saída é especificado no membro pBuffer do DMO_OUTPUT_DATA_BUFFER.) Defina também o sinalizador DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER no parâmetro dwFlags .
Para cada fluxo em que o ponteiro pBuffer é NULL, o DMO tentará descartar os dados. Se o fluxo for opcional, o DMO tem a garantia de descartar os dados. Se o fluxo não for opcional, o DMO descartará os dados quando possível, mas não há garantia de que os faça. Se ele não puder descartar os dados, ele definirá o sinalizador DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE. Se você definir um ponteiro pBuffer como NULL , mas não definir o sinalizador DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, o DMO não descartará os dados. Nesse caso, o DMO armazena em buffer a saída internamente ou simplesmente falha na chamada ProcessOutput .
A única diferença funcional entre o sinalizador DMO_OUTPUT_STREAMF_OPTIONAL e o sinalizador DMO_OUTPUT_STREAMF_DISCARDABLE é a seguinte:
- O sinalizador DMO_OUTPUT_STREAMF_OPTIONAL indica que o cliente não precisa definir um tipo de mídia nesse fluxo. No entanto, se o cliente começar a processar dados sem definir o tipo de mídia para esse fluxo, ele deverá descartar os dados desse fluxo durante toda a duração do streaming. Se você quiser descartar amostras seletivamente, deverá definir o tipo de mídia.
- O sinalizador DMO_OUTPUT_STREAMF_DISCARDABLE indica que, embora o fluxo seja opcional, ele sempre requer um tipo de mídia.
Tópicos relacionados