DirectShow DirectShow 의 사용법 DirectShow 필터의 개발 캡춰 포맷과 압축 포맷의 공개 비디오 능력   [목차열람] [주소복사] [슬롯비우기]
비디오 능력
 
Microsoft DirectX 9.0

비디오 능력

IAMStreamConfig::GetStreamCaps 메서드는,AM_MEDIA_TYPE 구조체와 VIDEO_STREAM_CONFIG_CAPS 구조체의 페어의 배열로 비디오 능력을 나타낸다. 다음에 설명하도록(듯이), 이 메서드를 사용하면 핀으로 지원 떠날 수 있어 모든 포맷과 해상도를 공개할 수 있다.

GetStreamCaps 의 오디오 관련의 예에 대해서는, 「오디오 능력」을 참조할것.

사용하고 있는 캡춰 카드가, 160 x 120 픽셀에서 320 x 240 픽셀의 사이의 모든 해상도로 JPEG 포맷을 지원 하고 있다고 한다. 이 경우, 지원 되고 있는 해상도간의 차이는 1 이다. 왜냐하면, 지원 되고 있는 각 해상도에 대해서 1 픽셀 덧셈 또는 뺄셈 하는 것에 의해, 다음의 지원 되고 있는 해상도를 얻고 있기 때문이다. 지원 되고 있는 해상도간에 있어서의 이 차이는, 세분도라고 부른다.

카드가 640 x 480 의 사이즈도 지원 하고 있다고 한다. 다음의 그림에, 이 단독의 해상도와 위의 해상도 범위 (160 x 120 픽셀에서 320 x 240 픽셀까지의 범위의 모든 해상도)를 나타낸다.

160 x 120 픽셀로부터 320 x 240 픽셀까지의 범위의 해상도와 640 x 480 의 사이즈

게다가 세분도가 8 으로 160 x 120 에서 320 x 240 까지의 범위의 해상도로 24 비트 컬러의 RGB 포맷을 지원 하고 있다고 한다. 다음의 그림에, 이 경우의 유효 사이즈의 몇개인가를 나타낸다.

세분도가 8 로 160 x 120 로부터 320 x 240 까지의 범위의 해상도

구체적으로는, 유효한 해상도로서 다음의 해상도가 있다.

GetStreamCaps 를 사용해, 최소 능력 160 x 120, 최대 능력 320 x 240, 세분도 1 을 조합한 320 x 240 JPEG (이것이 디폴트 또는 희망 사이즈의 경우)의 미디어 타입을 제공하는 것에 의해, 이러한 컬러 포맷 및 넓이 능력을 공개한다. GetStreamCaps 를 사용해 다음에 공개하는 페어는, 최소 능력 640 x 480, 최대 능력 640 x 480, 세분도 0 을 조합한 640 x 480 JPEG 의 미디어 타입이 된다. 3 번째의 페어는, 최소 능력 160 x 120, 최대 능력 320 x 240, 세분도 8 을 가지는, 320 x 240 의 24 비트 RGB 의 미디어 타입이다. 이와 같이, 카드가 지원 하는 거의 모든 포맷 및 능력을 공개할 수 있다. 어떠한 압축 포맷이 제공될까를 모르면 안 되는 애플리케이션은, 모든 페어를 취득해, 미디어 타입의 일의인 서브 타입의 리스트를 생성 할 수 있다.

필터는,VIDEOINFOHEADER 구조체의 rcSourcercTarget 멤버로부터 미디어 타입의 전송원직사각형 및 목적지 직사각형을 각각 얻어온다. 필터는, 전송원직사각형 및 목적지 직사각형을 지원 할 필요는 없다.

IAMStreamConfig 의 해설로 설명한 트리밍 직사각형은, 출력 핀의 VIDEOINFOHEADER 구조체의 rcSource 직사각형과 같다.

IAMStreamConfig 의 해설로 설명한 출력 직사각형은, 출력 핀의 BITMAPINFOHEADER 구조체의 biWidthbiHeight 멤버와 같다 ( 「AVI 파일 포맷의 DV 데이터 」를 참조할것).

필터의 출력 핀이, 하늘이 아닌 전송원직사각형 및 목적지 직사각형을 가지는 미디어 타입에 접속되고 있는 경우, 필터는, 입력 포맷의 전송원서브 직사각형을 출력 포맷의 목적지 서브 직사각형에 신축(스트레치) 할 필요가 있다. 전송원서브 직사각형은,VIDEO_STREAM_CONFIG_CAPS 구조체의 InputSize 멤버에 저장 된다.

예를 들어, 다음과 같은 비디오 압력 시나리오를 생각해 보자. 입력 이미지는 RGB 포맷으로, 160 x 120 픽셀의 사이즈를 갖는다. 전송원직사각형의 좌상구석의 좌표는 (20,20)으로, 그 우하구석의 좌표는 (30,30)이다. 출력 이미지는, 사이즈가 320 x 240 의 MPEG 포맷이다. 목적지 직사각형의 좌상구석의 좌표는 (0,0)으로, 그 우하구석의 좌표는 (100,100)이다. 이 경우, 필터는 160 x 120 RGB 의 전송원비트 맵의 10 x 10 부분을 꺼내, 그것을 320 x 240 의 비트 맵의 최초의 100 x 100 영역에 묻어, 320 x 240 비트 맵의 나머지의 영역은 그대로 해 두지 않으면 안 된다. 다음의 그림에 이 조작을 나타낸다.

목적지 직사각형의 확대 축소

필터가 이러한 조작을 지원 하고 있지 않는 경우,rcSourcercTarget 가 하늘이 아닌 미디어 타입에의 접속은 실패한다.

VIDEOINFOHEADER 구조체는, 필터의 데이터 레이트 능력에 관한 정보를 공개한다. 예를 들어, 어느 미디어 타입을 가지는 다음의 필터에 (직접적으로, 또는 CMediaType::SetFormat 함수로부터 건네받은 미디어 타입을 사용해) 출력 핀을 접속했다고 한다. 그 미디어 타입의 VIDEOINFOHEADER 포맷 구조체의 dwBitRate 멤버를 보면 비디오의 압축에 사용해야 할 데이터 레이트를 알 수 있다. VIDEOINFOHEADER 구조체의 AvgTimePerFrame 멤버내의 프레임 근처의 타임 단위수에 dwBitRate 멤버내의 데이터 레이트를 걸어 그 결과를 10,000,000 (1 초 쯤의 단위수)으로 나누면 프레임 근처의 바이트수를 요구할 수가 있다. 작은 사이즈의 프레임을 생성할 수 있지만, 큰 사이즈의 프레임은 생성할 수 없다. 비디오 압력 또는 캡춰 필터의 frame rate를 요구하려면 , 출력 핀의 미디어 타입의 AvgTimePerFrame 를 사용한다.

↑TOP