AM_MEDIA_TYPE structure (strmif.h)

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in 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 Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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.]

La structure AM_MEDIA_TYPE décrit le format d’un exemple de média.

Syntaxe

typedef struct _AMMediaType {
  GUID     majortype;
  GUID     subtype;
  BOOL     bFixedSizeSamples;
  BOOL     bTemporalCompression;
  ULONG    lSampleSize;
  GUID     formattype;
  IUnknown *pUnk;
  ULONG    cbFormat;
  BYTE     *pbFormat;
} AM_MEDIA_TYPE;

Membres

majortype

Identificateur global unique (GUID) qui spécifie le type principal de l’exemple de média. Pour obtenir la liste des types principaux possibles, consultez Types de médias.

subtype

GUID qui spécifie le sous-type de l’exemple de média. Pour obtenir la liste des sous-types possibles, consultez Types de médias. Pour certains formats, la valeur peut être MEDIASUBTYPE_None, ce qui signifie que le format ne nécessite pas de sous-type.

bFixedSizeSamples

Si la valeur est TRUE, les échantillons sont de taille fixe. Ce champ est à information uniquement. Pour l’audio, il est généralement défini sur TRUE. Pour la vidéo, elle est généralement TRUE pour la vidéo non compressée et FALSE pour la vidéo compressée.

bTemporalCompression

Si la valeur est TRUE, les exemples sont compressés à l’aide de la compression temporelle (interframe). La valeur TRUE indique que toutes les images ne sont pas des images clés. Ce champ est à information uniquement.

lSampleSize

Taille de l’échantillon en octets. Pour les données compressées, la valeur peut être égale à zéro.

formattype

GUID qui spécifie la structure utilisée pour le bloc de format. Le membre pbFormat pointe vers la structure de format correspondante. Les types de format sont les suivants :

Type de format Structure de format
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Aucun.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Aucun

pUnk

Non utilisé. Défini sur NULL.

cbFormat

Taille du bloc de format, en octets.

pbFormat

Pointeur vers le bloc de format. Le type de structure est spécifié par le membre formattype . La structure de format doit être présente, sauf si formattype est GUID_NULL ou FORMAT_None.

La mémoire tampon pbFormat doit être allouée en appelant CoTaskMemAlloc. Pour libérer le bloc de format, appelez FreeMediaType.

Notes

Lorsque deux broches se connectent, elles négocient un type de média, qui est défini par une structure AM_MEDIA_TYPE . Le type de média décrit le format des données que les filtres échangeront. Si les filtres ne sont pas d’accord sur un type de média, ils ne peuvent pas se connecter.

Le type de flux est spécifié par deux GUID, appelés le type principal et le sous-type. Le type principal définit la catégorie générale, telle que la vidéo, l’audio ou le flux d’octets. Le sous-type définit une catégorie plus étroite dans le type principal. Par exemple, les sous-types vidéo incluent 8 bits, 16 bits, 24 bits et 32 bits RVB.

La structure AM_MEDIA_TYPE est suivie d’un bloc de données de longueur variable qui contient des informations spécifiques au format. Le membre pbFormat pointe vers ce bloc, appelé bloc de format. La disposition du bloc de format dépend du type de données dans le flux et est spécifiée par le membre formattype . Le bloc de format peut être NULL. Vérifiez le membre cbFormat pour déterminer la taille. Castez le membre pbFormat pour accéder au bloc de format. Par exemple :

C++
if (pmt->formattype == FORMAT_VideoInfo)
{
    // Check the buffer size.
    if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER))
    {
        VIDEOINFOHEADER *pVih = 
            reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
        /* Access VIDEOINFOHEADER members through pVih. */
    }
}
Dans certaines situations, vous pouvez définir le bloc de format sur NULL et le type de format sur GUID_NULL, ce qui entraîne un type de média partiel. Cela vous permet de spécifier une plage de formats possibles. Par exemple, vous pouvez spécifier un RVB (MEDIASUBTYPE_RGB24) 24 bits sans donner de largeur ou de hauteur exacte.

Pour obtenir des informations détaillées sur un type de média spécifié à des fins de débogage, utilisez la méthode DisplayType .

Configuration requise

   
En-tête strmif.h (include Dshow.h)

Voir aussi

À propos des types de média

DirectShow Structures

Fonctions de type de média

Types de média