структура AM_MEDIA_TYPE (strmif.h)

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Структура AM_MEDIA_TYPE описывает формат примера мультимедиа.

Синтаксис

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

Члены

majortype

Глобальный уникальный идентификатор (GUID), указывающий основной тип примера мультимедиа. Список возможных основных типов см. в разделе Типы мультимедиа.

subtype

GUID, указывающий подтип примера носителя. Список возможных подтипов см. в разделе Типы мультимедиа. Для некоторых форматов значение может быть MEDIASUBTYPE_None, что означает, что формат не требует подтипа.

bFixedSizeSamples

Если задано значение TRUE, выборки имеют фиксированный размер. Это поле является только информационным. Для звука обычно устанавливается значение TRUE. Для видео обычно имеет значение TRUE для несжатого видео и FALSE для сжатого видео.

bTemporalCompression

При значении TRUE примеры сжимаются с помощью темпорального (межкадрового) сжатия. Значение TRUE указывает, что не все кадры являются ключевыми. Это поле является только информационным.

lSampleSize

Размер выборки в байтах. Для сжатых данных значение может быть равно нулю.

formattype

GUID, указывающий структуру, используемую для блока форматирования. Элемент pbFormat указывает на соответствующую структуру формата. Ниже перечислены типы форматов.

Тип формата Структура форматирования
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Нет.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Нет

pUnk

Не используется. Задайте значение NULL.

cbFormat

Размер блока формата в байтах.

pbFormat

Указатель на блок формата. Тип структуры определяется элементом formattype . Структура форматирования должна присутствовать, если только тип форматирования не GUID_NULL или FORMAT_None.

Буфер pbFormat должен быть выделен путем вызова CoTaskMemAlloc. Чтобы освободить блок форматирования, вызовите FreeMediaType.

Комментарии

При подключении двух контактов они согласовывают тип мультимедиа, который определяется AM_MEDIA_TYPE структурой. Тип носителя описывает формат данных, которыми будут обмениваться фильтры. Если фильтры не согласятся с типом носителя, они не смогут подключиться.

Тип потока определяется двумя идентификаторами GUID, которые называются основным типом и подтипом . Основной тип определяет общую категорию, например видео, аудио или поток байтов. Подтип определяет более узкую категорию в основном типе. Например, подтипы видео включают 8-разрядную, 16-разрядную, 24-разрядную и 32-разрядную rgb-версию.

За AM_MEDIA_TYPE структурой следует блок данных переменной длины, содержащий сведения, относящиеся к формату. Элемент pbFormat указывает на этот блок, называемый блоком формата. Макет блока форматирования зависит от типа данных в потоке и определяется элементом formattype . Блок формата может иметь значение NULL. Проверьте элемент cbFormat , чтобы определить размер. Приведите элемент pbFormat для доступа к блоку форматирования. Пример:

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. */
    }
}
В некоторых ситуациях можно задать для блока форматирования значение NULL , а для типа формата — GUID_NULL, что приводит к частичному типу мультимедиа. Это позволяет указать диапазон возможных форматов. Например, можно указать 24-разрядную RGB (MEDIASUBTYPE_RGB24), не указывая точную ширину или высоту.

Чтобы получить подробные сведения об указанном типе мультимедиа для отладки, используйте метод DisplayType .

Требования

   
Верхняя часть strmif.h (включая Dshow.h)

См. также раздел

Сведения о типах мультимедиа

Структуры DirectShow

Функции типов мультимедиа

Типы мультимедиа