DirectShow DirectShow 레퍼런스 DirectShow 구조체 AM_MEDIA_TYPE   [목차열람] [주소복사] [슬롯비우기]
AM_MEDIA_TYPE 구조체
 
Microsoft DirectX 9.0

AM_MEDIA_TYPE 구조체

AM_MEDIA_TYPE 구조체는, 미디어 샘플의 포맷을 기술한다.

구문

typedef struct  _MediaType {
    GUID      majortype;
    GUID      subtype;
    BOOL      bFixedSizeSamples;
    BOOL      bTemporalCompression;
    ULONG     lSampleSize;
    GUID      formattype;
    IUnknown  *pUnk;
    ULONG     cbFormat;
    [size_is(cbFormat)] BYTE *pbFormat;
} AM_MEDIA_TYPE;

멤버

majortype

미디어 샘플의 메이저 타입을 지정하는 글로벌 일의 식별자 (GUID). 지정할 수 있는 메이저 타입의 일람에 대해서는, 「미디어 타입」을 참조할것.

subtype

미디어 샘플의 서브 타입을 지정하는 GUID. 지정할 수 있는 서브 타입의 일람에 대해서는, 「미디어 타입」을 참조할것. 일부의 포맷에 대해서는, 이 값이 MEDIASUBTYPE_None 의 경우가 있다. 이것은, 포맷에는 서브 타입이 필요없는 것을 의미하고 있다.

bFixedSizeSamples

TRUE 의 경우, 샘플의 사이즈는 고정이다. 이 필드는 참조 전용이다. 오디오의 경우는, 보통, TRUE 로 설정된다. 비디오의 경우, 보통, 비압축 비디오는 TRUE, 압축 비디오는 FALSE 로 설정된다.

bTemporalCompression

TRUE 의 경우, 샘플은 시계열 (프레임간) 압축 방식에서 압축되고 있다. 값 TRUE 는 프레임이 모두 키 프레임이라고는 할 수 없는 것을 나타낸다. 이 필드는 참조 전용이다.

lSampleSize

샘플의 사이즈 (바이트 단위). 압축 데이터의 경우는, 0 도 가능.

formattype

포맷 블록에 사용하는 구조체를 지정하는 GUID. pbFormat 멤버는, 대응하는 포맷 구조체를 가리킨다. 포맷 타입에는 다음의 것이 있다.

포맷 타입 (format type) 포맷 구조체
FORMAT_None 없음
FORMAT_DvInfo DVINFO
FORMAT_MPEGVideo MPEG1VIDEOINFO
FORMAT_MPEG2Video MPEG2VIDEOINFO
FORMAT_VideoInfo VIDEOINFOHEADER
FORMAT_VideoInfo2 VIDEOINFOHEADER2
FORMAT_WaveFormatEx WAVEFORMATEX
GUID_NULL 없음

pUnk

미사용.

cbFormat

포맷 블록의 사이즈 (바이트 단위).

pbFormat

포맷 블록의 포인터. 구조체의 종류는,formattype 멤버에 의해 지정된다. formattype 가 GUID_NULL 또는 FORMAT_None 가 아닌 한, 포맷 구조체가 존재해야 한다.

주의

2 개의 핀이 접속하는 경우,AM_MEDIA_TYPE 구조체가 정의하는 미디어 타입을 네고시에이트 한다. 미디어 타입은 필터가 교환하는 데이터의 포맷을 기술한다. 필터가 미디어 타입을 받아들이지 않으면 접속은 할 수 없다.

스트림 타입은 "메이저 타입" 과 "서브 타입" 으로 불리는 2 개의 GUID 에 의해 지정된다. 메이저 타입은 비디오, 오디오, 또는 바이트 스트림과 같이 일반적인 카테고리를 정의한다. 서브 타입은 메이저 타입 내부의 것보다 세세한 카테고리를 정의한다. 예를 들어, 비디오 서브 타입에는 8 비트 RGB, 16 비트 RGB, 24 비트 RGB, 32 비트 RGB가 포함된다.

AM_MEDIA_TYPE 구조체의 뒤에는 가변장의 데이터 블록이 계속되어, 이 데이터 블록에 포맷 고유의 정보를 저장 한다. pbFormat 멤버는,"포맷 블록" 으로 불리는 이 블록의 포인터이다. 포맷 블록의 레이아웃은 스트림내의 데이터형에 의존해,formattype 멤버에 의해 지정된다. 포맷 블록은 NULL 값도 가능. cbFormat 멤버를 체크해 사이즈를 조사하는 것. 포맷 블록에 액세스 하려면 ,pbFormat 멤버를 캐스트 한다. 다음에 예를 나타낸다.

if (pmt->formattype == FORMAT_VideoInfo)
{
    // 버퍼 사이즈를 조사한다.
    if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER))
    {
        VIDEOINFOHEADER *pVih = 
            reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
        /* pVih 로부터 VIDEOINFOHEADER 멤버에게 액세스 한다.  */
    }
}

경우에 따라서는, 포맷 블록을 NULL 로 설정해, 포맷 타입을 GUID_NULL 로 설정할 수 있다. 그 경우는 "파셜" 미디어 타입이 된다. 이 방법을 사용하면 일정한 범위의 가능한 포맷을 지정할 수 있다. 예를 들어, 비디오 프레임의 엄밀한 폭이나 높이를 지정하지 않아도, 24 비트 RGB (MEDIASUBTYPE_RGB24)를 지정할 수 있다.

디버그를 실시하기 위해서(때문에) 지정하는 미디어 타입에 관한 정보를 얻어오려면,DisplayType 메서드를 사용한다.

참조

↑TOP