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

VIDEOINFOHEADER2 구조체

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 를 인클루드 하는 것.

↑TOP