AM_MEDIA_TYPE 구조체(strmif.h)
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 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(Globally Unique Identifier)입니다. 가능한 주요 형식 목록은 미디어 형식을 참조하세요.
subtype
미디어 샘플의 하위 형식을 지정하는 GUID입니다. 가능한 하위 형식 목록은 미디어 형식을 참조하세요. 일부 형식의 경우 값이 MEDIASUBTYPE_None 수 있습니다. 즉, 형식에 하위 형식이 필요하지 않습니다.
bFixedSizeSamples
TRUE이면 샘플 크기가 고정됩니다. 이 필드는 정보 전용입니다. 오디오의 경우 일반적으로 TRUE로 설정됩니다. 비디오의 경우 일반적으로 압축되지 않은 비디오의 경우 TRUE 이고 압축된 비디오의 경우 FALSE 입니다.
bTemporalCompression
TRUE인 경우 샘플은 임시(프레임 간) 압축을 사용하여 압축됩니다. TRUE 값은 모든 프레임이 키 프레임이 아님을 나타냅니다. 이 필드는 정보 전용입니다.
lSampleSize
샘플의 크기(바이트)입니다. 압축된 데이터의 경우 값은 0일 수 있습니다.
formattype
형식 블록에 사용되는 구조를 지정하는 GUID입니다. pbFormat 멤버는 해당 형식 구조를 가리킵니다. 형식 형식은 다음과 같습니다.
형식 유형 | 형식 구조체 |
---|---|
|
|
|
|
|
|
|
|
|
없음 |
|
|
|
|
|
|
|
없음 |
pUnk
사용되지 않습니다. NULL로 설정합니다.
cbFormat
형식 블록의 크기(바이트)입니다.
pbFormat
서식 블록에 대한 포인터입니다. 구조체 형식은 formattype 멤버에 의해 지정됩니다. 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. */ } } |
디버깅을 위해 지정된 미디어 형식에 대한 자세한 정보를 가져오려면 DisplayType 메서드를 사용합니다.
요구 사항
머리글 | strmif.h(Dshow.h 포함) |