Flux facultatifs
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Un DMO peut désigner certains de ses flux de sortie comme facultatifs. Un flux facultatif produit des données que l’application peut ignorer, complètement ou occasionnellement. Par exemple, un flux facultatif peut contenir des informations supplémentaires sur un flux principal.
Pour interroger si un flux est facultatif, appelez la méthode IMediaObject ::GetOutputStreamInfo et vérifiez le paramètre pdwFlags. Les flux facultatifs retournent l’indicateur DMO_OUTPUT_STREAMF_DISCARDABLE ou l’indicateur DMO_OUTPUT_STREAMF_OPTIONAL. Ces indicateurs signifient presque la même chose ; une différence mineure entre eux sera expliquée sous peu.
Si un flux est facultatif, le client peut demander au DMO d’ignorer les données de ce flux lorsqu’il traite la sortie. Pour ce faire, appelez la méthode IMediaObject ::P rocessOutput et définissez la mémoire tampon de sortie sur NULL pour chaque flux que vous souhaitez ignorer. (La mémoire tampon de sortie est spécifiée dans le membre pBuffer du DMO_OUTPUT_DATA_BUFFER.) Définissez également l’indicateur DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER dans le paramètre dwFlags.
Pour chaque flux où le pointeur pBuffer est NULL, le DMO tente d’ignorer les données. Si le flux est facultatif, le DMO est garanti pour ignorer les données. Si le flux n’est pas facultatif, le DMO ignore les données si possible, mais n’est pas garanti. S’il ne peut pas ignorer les données, il définit l’indicateur DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE. Si vous définissez un pointeur pBuffer sur NULL, mais que vous ne définissez pas l’indicateur DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, le DMO n’ignore pas les données. Dans ce cas, le DMO met en mémoire tampon la sortie en interne ou échoue simplement l’appel ProcessOutput.
La seule différence fonctionnelle entre l’indicateur de DMO_OUTPUT_STREAMF_OPTIONAL et l’indicateur de DMO_OUTPUT_STREAMF_DISCARDABLE est la suivante :
- L’indicateur DMO_OUTPUT_STREAMF_OPTIONAL indique que le client n’a pas besoin de définir un type de média sur ce flux. Toutefois, si le client commence à traiter les données sans définir le type de média pour ce flux, il doit ignorer les données de ce flux pendant toute la durée de diffusion en continu. Si vous souhaitez ignorer des échantillons de manière sélective, vous devez définir le type de média.
- L’indicateur DMO_OUTPUT_STREAMF_DISCARDABLE indique que, bien que le flux soit facultatif, il nécessite toujours un type de média.
Rubriques connexes