DirectShow DirectShow 레퍼런스 DirectShow 구조체 VIDEOINFOHEADER2 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
VIDEOINFOHEADER2 구조체는, 인터레이스, 복사 보호, 픽셀의 어스펙트비(가로세로 비율) 정보를 포함한, 비디오 이미지의 비트 맵과 색정보를 기술한다.
구문
typedef struct tagVIDEOINFOHEADER2 {
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
DWORD dwInterlaceFlags;
DWORD dwCopyProtectFlags;
DWORD dwPictAspectRatioX;
DWORD dwPictAspectRatioY;
union {
DWORD dwControlFlags;
DWORD dwReserved1;
};
DWORD dwReserved2;
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER2;
멤버
rcSource
목적지 버퍼에 보내는 소스 스트림의 사용 부분을 지정하는 RECT 구조체. 렌더러에서는, 이 필드를 사용해, 디코더에 신축(스트레치) 또는 클리핑을 지시할 수 있다. 더 자세한 정보는, 「비디오 렌더러에 있어서의 전송원직사각형과 목적지 직사각형」을 참조할것.
rcTarget
목적지 버퍼의 어느 부분을 사용하는지를 지정하는 RECT 구조체.
dwBitRate
비디오 스트림의 대체로의 데이터 레이트 (비트/초).
dwBitErrorRate
비디오 스트림의 데이터 에러 레이트 (비트/초).
AvgTimePerFrame
비디오 프레임의 평균 표시 시간 (100 나노초단위). 더 자세한 정보는, 「VIDEOINFOHEADER 구조체」의 「주의」를 참조할것.
dwInterlaceFlags
비디오를 인터레이스 처리하는 방법을 지정하는 플래그. 이 멤버는, 이하의 플래그의 비트마다 편성 (0 개라도 좋다)이다. 그룹 2 내의 플래그 끼리는 양립하지 않고, 그룹 3 내의 플래그 끼리도 양립하지 않는다 (그룹 2 내의 플래그는 추천하지 않는다). 그룹 1 내의 플래그 끼리는 서로 조합하거나 그룹 2 나 그룹 3 의 1 개의 플래그와 조합할 수가 있다. 플래그의 편성에 대해서는, 이 페이지의 마지막에 기재되어 있는 표를 참조할것.
플래그 | 설명 |
그룹 1 | |
AMINTERLACE_IsInterlaced | 스트림이 인터레이스 방식이다. 이 플래그가 오프의 경우, 비디오는 프로그래시브이므로, 다른 비트는 의미가 없다. |
AMINTERLACE_1FieldPerSample | 각 미디어 샘플에 1 개의 필드가 포함된다. 이 플래그가 오프의 경우는, 각 미디어 샘플에는 2 개의 필드가 포함된다. |
AMINTERLACE_Field1First | 필드 1 이 앞. 이 플래그가 오프의 경우는, 필드 2 가 먼저 된다 (선두 필드는,PAL 에서는 필드 1,NTSC 에서는 필드 2). |
그룹 2 | |
AMINTERLACE_FieldPatField1Only | 스트림에 필드 2 는 없다. |
AMINTERLACE_FieldPatField2Only | 스트림에 필드 1 은 없다. |
AMINTERLACE_FieldPatBothRegular | 필드 1 마다 필드 2 가 반드시 1 개 있다. |
AMINTERLACE_FieldPatBothIrregular | 스트림에는 필드 1 으로 필드 2 가 불규칙하게 배치되고 있다. |
그룹 3 | |
AMINTERLACE_DisplayModeBobOnly | 디스플레이 모드는보브만 가능. |
AMINTERLACE_DisplayModeWeaveOnly | 디스플레이 모드는위브만 가능. |
AMINTERLACE_DisplayModeBobOrWeave | 보브와 위브의 양쪽 모두의 모드가 있다. |
미정도리의 플래그는 0 으로 설정하는 것. 0 이외의 경우, 접속은 거부된다.
dwCopyProtectFlags
스트림의 중복을 제한해야 하는 것을 나타내는 AMCOPYPROTECT_RestrictDuplication 값 (0x00000001)이 설정된 플래그. 미정도리의 경우는, 0 으로 지정하는 것. 0 이외의 경우, 접속은 거부된다.
dwPictAspectRatioX
화면의 어스펙트비(가로세로 비율) (X 넓이). 예를 들어, 16 × 9 인치 디스플레이의 경우는 16.
dwPictAspectRatioY
화면의 어스펙트비(가로세로 비율) (Y 넓이). 예를 들어, 16 × 9 인치 디스플레이의 경우는 9.
dwControlFlags, dwReserved1
이 필드는 원래는 dwReserved 로 불리고 있던 것으로, 0 으로 설정할 필요가 있다. 이 필드는 dwControlFlags 라는 이름으로 변경되어 현재는 다음의 플래그의 비트마다 OR 의 편성 (0 개라도 좋다)을 설정할 필요가 있다.
AMCONTROL_USED | 0x00000001 |
AMCONTROL_PAD_TO_4x3 | 0x00000002 |
AMCONTROL_PAD_TO_16x9 | 0x00000004 |
이러한 플래그는, 출력 직사각형의 어스펙트비(가로세로 비율)을 조사하기 위해서(때문에) 디코더가 사용한다. AMCONTROL_USED 플래그를 사용해, 이러한 플래그가 지원 되고 있는지를 테스트한다. 소스 필터는, AMCONTROL_USED 플래그를 설정해, 다운 스트림 핀으로 QueryAccept 가 성공할지 어떨지를 조사할 필요가 있다. 거부되었을 경우, AMCONTROL 플래그는 사용할 수 없기 때문에, 필드는 0 으로 설정할 필요가 있다. AMCONTROL_PAD_TO_4x3 플래그는, 이미지를 4x3 의 영역에 맞도록(듯이) 패딩 해 표시할 필요가 있는 것을 나타내고 있다. AMCONTROL_PAD_TO_16x9 플래그는, 이미지를 16x9 의 영역에 맞도록(듯이) 패딩 해 표시할 필요가 있는 것을 나타내고 있다. 이러한 플래그의 사용법에 대해서는, 「MPEG 디코더에 의한 변환의 사전 처리」를 참조할것.
dwReserved2
장래적인 사용을 위해서(때문에) 예약되고 있다. 제로가 아니면 안된다.
bmiHeader
비디오 이미지의 비트 맵의 색정보 및 넓이 정보가 저장 된 BITMAPINFOHEADER 구조체.
주의
dwInterlaceFlags 필드는, 비디오가 인터레이스 방식인지 아닌지를 나타내, 게다가 인터레이스 방식이면 미디어 샘플내의 필드의 포맷을 나타내고 있다. 다음 표에, 오버레이 믹서 필터와 Video Mixing Renderer 필터에 대해 유효한 인터레이스 모드를 나타낸다.
디스플레이 모드 | 인터레이스 플래그 | 설명 |
프로그래시브 프레임 | 없음 | 비디오 스트림은 인터레이스 방식은 아니다. |
비인타리브보브 | AMINTERLACE_IsInterlaced |
AMINTERLACE_1FieldPerSample | AMINTERLACE_DisplayModeBobOnly |
비디오 스트림 전체가 인터레이스 방식에서, 각 미디어 샘플에는 1 개의 비디오 필드가 포함되어 있다. |
인타리브보브 | AMINTERLACE_IsInterlaced |
AMINTERLACE_DisplayModeBobOnly |
비디오 스트림 전체가 인터레이스 방식이다. 각 미디어 샘플에는 2 개의 비디오 필드가 포함되어 있다. 미디어 샘플의 플래그는 최초로 표시하는 필드를 나타낸다. |
위브 | AMINTERLACE_IsInterlaced |
AMINTERLACE_FieldPatBothRegular | AMINTERLACE_DisplayModeWeaveOnly |
비디오 스트림은 인터레이스 방식에서, 각 샘플에는 2 개의 비디오 필드가 포함되어 있다. 필드는 비인터레이스화 해서는 안된다. |
보브 또는 위브 | AMINTERLACE_IsInterlaced |
AMINTERLACE_DisplayModeBobOrWeave |
비디오 스트림은, 프로그래시브와 이타레이스콘텐트와의 사이에 다르다. 각 미디어 샘플에는, 프로그래시브 프레임 또는 2 개의 비디오 필드중 한쪽이 포함된다. 미디어 샘플의 플래그는, 컨텐츠를 표시하는 적절한 방법을 나타내고 있다. |
비디오가 인터레이스 방식의 경우, 미디어 샘플에는, 렌더링 요건에 가세해, 샘플의 컨텐츠 (필드 1 또는 필드 2 등)를 설명하는 플래그가 포함된다. 이러한 플래그를 지정하려면 , 각 미디어 샘플의 AM_SAMPLE2_PROPERTIES 구조체의 dwTypeSpecificFlags 멤버를 설정한다. 다음 표에, 전의 표에 기재된 각 디스플레이 모드에 대응하는 유효한 미디어 샘플 플래그를 나타낸다.
디스플레이 모드 | 미디어 샘플 프로퍼티 | |
---|---|---|
프로그래시브 프레임 | 없음 | |
비인타리브보브 | AM_VIDEO_FLAG_FIELD1 또는 AM_VIDEO_FLAG_FIELD2 | |
인타리브보브 | 필드 1 이 앞 | AM_VIDEO_FLAG_FIELD1FIRST |
필드 2 가 앞 | 없음 | |
위브 | AM_VIDEO_FLAG_WEAVE | |
보브 또는 위브 | 보브. 필드 1 이 앞 | AM_VIDEO_FLAG_FIELD1FIRST |
보브. 필드 2 가 앞 | 없음 | |
위브 | AM_VIDEO_FLAG_WEAVE |
dwInterlaceFlags 의 필드 패턴 플래그를 확인하려면 , 다음과 같이 비트 마스크 AMINTERLACE_FieldPatternMask 를 사용한다.
switch (dwInterlaceFlags & AMINTERLACE_FieldPatternMask)
{
case AMINTERLACE_FieldPatField1Only:
// 스트림에 필드 2 는 없다.
case AMINTERLACE_FieldPatField2Only:
// 스트림에 필드 1 은 없다.
case AMINTERLACE_FieldPatBothRegular:
// 필드 1 마다 필드 2 가 반드시 1 개 있다.
case AMINTERLACE_FieldPatBothIrregular:
// 필드 1 으로 필드 2 가 불규칙하게 배치되고 있다.
}
dwInterlaceFlags 의 디스플레이 모드 플래그를 확인하려면 , 다음과 같이 비트 마스크 AMINTERLACE_DisplayModeMask 를 사용한다.
switch (dwInterlaceFlags & AMINTERLACE_DisplayModeMask)
{
case AMINTERLACE_DisplayModeBobOnly:
// 디스플레이 모드는 보브만.
case AMINTERLACE_DisplayModeWeaveOnly:
// 디스플레이 모드는 위브만.
case AMINTERLACE_DisplayModeBobOrWeave:
// 보브와 위브의 양쪽 모두의 모드가 있다.
}
요건
Dvdmedia.h 를 인클루드 하는 것.