Freigeben über


AM_MEDIA_TYPE Struktur (strmif.h)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die AM_MEDIA_TYPE-Struktur beschreibt das Format eines Medienbeispiels.

Syntax

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

Member

majortype

Globally Unique Identifier (GUID), der den Haupttyp des Medienbeispiels angibt. Eine Liste der möglichen Haupttypen finden Sie unter Medientypen.

subtype

GUID, die den Untertyp des Medienbeispiels angibt. Eine Liste der möglichen Untertypen finden Sie unter Medientypen. Bei einigen Formaten ist der Wert möglicherweise MEDIASUBTYPE_None, was bedeutet, dass für das Format kein Untertyp erforderlich ist.

bFixedSizeSamples

Wenn TRUE, haben Die Beispiele eine feste Größe. Dieses Feld ist nur informal. Für Audio ist es im Allgemeinen auf TRUE festgelegt. Für Video ist es normalerweise TRUE für unkomprimierte Videos und FALSE für komprimierte Videos.

bTemporalCompression

Bei TRUE werden die Beispiele mithilfe der temporalen Komprimierung (Interframe-Komprimierung) komprimiert. Der Wert TRUE gibt an, dass nicht alle Frames Keyframes sind. Dieses Feld ist nur informal.

lSampleSize

Größe des Beispiels in Bytes. Für komprimierte Daten kann der Wert 0 sein.

formattype

GUID, die die für den Formatblock verwendete Struktur angibt. Das pbFormat-Element verweist auf die entsprechende Formatstruktur. Zu den Formattypen gehören:

Formattyp Struktur formatieren
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Keine.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Keine

pUnk

Wird nicht verwendet. Auf NULL festgelegt.

cbFormat

Größe des Formatblocks in Bytes.

pbFormat

Zeiger auf den Formatblock. Der Strukturtyp wird vom Formattypmember angegeben. Die Formatstruktur muss vorhanden sein, es sei denn, der Formattyp ist GUID_NULL oder FORMAT_None.

Der pbFormat-Puffer muss durch Aufrufen von CoTaskMemAlloc zugewiesen werden. Um den Formatblock freizugeben, rufen Sie FreeMediaType auf.

Bemerkungen

Wenn zwei Pins verbunden sind, verhandeln sie einen Medientyp, der durch eine AM_MEDIA_TYPE-Struktur definiert wird. Der Medientyp beschreibt das Format der Daten, die von den Filtern ausgetauscht werden. Wenn sich die Filter nicht auf einen Medientyp einigen, können sie keine Verbindung herstellen.

Der Streamtyp wird durch zwei GUIDs angegeben, die als Haupttyp und Untertyp bezeichnet werden. Der Haupttyp definiert die allgemeine Kategorie, z. B. Video, Audio oder Bytestream. Der Untertyp definiert eine engere Kategorie innerhalb des Haupttyps. Videountertypen umfassen beispielsweise 8-Bit-, 16-Bit-, 24-Bit- und 32-Bit-RGB.

Auf die AM_MEDIA_TYPE-Struktur folgt ein Datenblock mit variabler Länge, der formatspezifische Informationen enthält. Das pbFormat-Element verweist auf diesen Block, der als Formatblock bezeichnet wird. Das Layout des Formatblocks hängt vom Typ der Daten im Stream ab und wird vom Formattypelement angegeben. Der Formatblock kann NULL sein. Überprüfen Sie den cbFormat-Member , um die Größe zu bestimmen. Wandeln Sie den pbFormat-Member um, um auf den Formatblock zuzugreifen. Zum Beispiel:

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 einigen Situationen können Sie den Formatblock auf NULL und den Formattyp auf GUID_NULL festlegen, was zu einem partiellen Medientyp führt. Dadurch können Sie einen Bereich möglicher Formate angeben. Sie können beispielsweise 24-Bit RGB (MEDIASUBTYPE_RGB24) angeben, ohne eine genaue Breite oder Höhe anzugeben.

Verwenden Sie die DisplayType-Methode , um detaillierte Informationen zu einem angegebenen Medientyp zu Debugzwecken abzurufen.

Requirements (Anforderungen)

   
Kopfzeile strmif.h (include Dshow.h)

Siehe auch

Informationen zu Medientypen

DirectShow-Strukturen

Medientypfunktionen

Medientypen