AM_MEDIA_TYPE struttura (strmif.h)

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

La struttura AM_MEDIA_TYPE descrive il formato di un esempio multimediale.

Sintassi

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

Members

majortype

Identificatore univoco globale (GUID) che specifica il tipo principale dell'esempio multimediale. Per un elenco dei possibili tipi principali, vedere Tipi di supporti.

subtype

GUID che specifica il sottotipo dell'esempio multimediale. Per un elenco di sottotipi possibili, vedere Tipi di supporti. Per alcuni formati, il valore potrebbe essere MEDIASUBTYPE_None, il che significa che il formato non richiede un sottotipo.

bFixedSizeSamples

Se TRUE, gli esempi sono di dimensioni fisse. Questo campo è solo informativo. Per l'audio, in genere è impostato su TRUE. Per il video, in genere è TRUE per il video non compresso e FALSE per il video compresso.

bTemporalCompression

Se TRUE, gli esempi vengono compressi usando la compressione temporale (interframe). Un valore true indica che non tutti i fotogrammi sono fotogrammi chiave. Questo campo è solo informativo.

lSampleSize

Dimensioni dell'esempio in byte. Per i dati compressi, il valore può essere zero.

formattype

GUID che specifica la struttura usata per il blocco di formato. Il membro pbFormat punta alla struttura di formato corrispondente. I tipi di formato includono quanto segue:

Tipo di formato Struttura formato
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Nessuno.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Nessuno

pUnk

Non usato. Impostare su NULL.

cbFormat

Dimensioni del blocco di formato, in byte.

pbFormat

Puntatore al blocco di formato. Il tipo di struttura viene specificato dal membro formattype . La struttura di formato deve essere presente, a meno che il formato non sia GUID_NULL o FORMAT_None.

Il buffer pbFormat deve essere allocato chiamando CoTaskMemAlloc. Per rilasciare il blocco di formato, chiamare FreeMediaType.

Commenti

Quando due pin si connettono, negoziano un tipo di supporto, definito da una struttura AM_MEDIA_TYPE . Il tipo di supporto descrive il formato dei dati che i filtri cambieranno. Se i filtri non accettano un tipo di supporto, non possono connettersi.

Il tipo di flusso viene specificato da due GUIDs, denominato tipo principale e sottotipo. Il tipo principale definisce la categoria generale, ad esempio video, audio o flusso di byte. Il sottotipo definisce una categoria più stretta all'interno del tipo principale. Ad esempio, i sottotipi video includono 8 bit, 16 bit, 24 bit e RGB a 32 bit.

La struttura AM_MEDIA_TYPE è seguita da un blocco a lunghezza variabile di dati che contiene informazioni specifiche del formato. Il membro pbFormat punta a questo blocco, denominato blocco di formato. Il layout del blocco di formato dipende dal tipo di dati nel flusso e viene specificato dal membro formattype . Il blocco di formato potrebbe essere NULL. Controllare il membro cbFormat per determinare le dimensioni. Eseguire il cast del membro pbFormat per accedere al blocco di formato. Ad esempio:

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. */
    }
}
In alcune situazioni, è possibile impostare il blocco di formato su NULL e il tipo di formato su GUID_NULL, causando un tipo di supporto parziale. In questo modo è possibile specificare un intervallo di formati possibili. Ad esempio, è possibile specificare RGB a 24 bit (MEDIASUBTYPE_RGB24) senza dare una larghezza o un'altezza esatta.

Per ottenere informazioni dettagliate su un tipo di supporto specificato per scopi di debug, usare il metodo DisplayType .

Requisiti

   
Intestazione strmif.h (include Dshow.h)

Vedi anche

Informazioni sui tipi di supporti

Strutture DirectShow

Funzioni di tipo multimediale

Tipi di supporti