DirectShow DirectShow 의 사용법 DirectShow 필터의 개발 비디오 렌더러의 생성 비디오 렌더러에 있어서의 전송원직사각형과 목적지 직사각형   [목차열람] [주소복사] [슬롯비우기]
비디오 렌더러에 있어서의 전송원직사각형과 목적지 직사각형
 
Microsoft DirectX 9.0

비디오 렌더러에 있어서의 전송원직사각형과 목적지 직사각형

비디오 미디어 타입의 VIDEOINFO ,VIDEOINFOHEADER ,VIDEOINFOHEADER2 포맷 구조체에는 3 개의 사이즈가 있다. 여기에서는, 그 내용과 기능에 대해 설명한다.

우선, 이러한 구조체의 bmiHeader 멤버에 사이즈가 있다. bmiHeader 멤버는 BITMAPINFOHEADER 구조체이며, 독자적인 폭멤버와 높이 멤버로서 bmiHeader.biWidthbmiHeader.biHeight 를 갖는다.

또, 각 구조체의 rcSource 멤버에 직사각형이 있다. 게다가 각 구조체의 rcTarget 멤버에도 직사각형이 있다.

2 개의 필터 A 와 B 가 있어, 이 2 개가 특정의 비디오 미디어 타입으로 서로 접속되고 있다고 한다. A 가 좌측 (업 스트림), B 가 우측 (다운 스트림)이다.

필터 A 와 필터 B 의 사이의 버퍼에는, 사이즈 (bmiHeader.biWidth,bmiHeader.biHeight)가 있다. 필터 A 는 rcSource 에 의해 결정되는 입력 비디오의 일부를 받아, 그 비디오를 버퍼의 rcTarget 부분에 맞추어 신축(스트레치) 한다. 입력 비디오로 사용되는 부분은, 필터 A 및 B 가 최초로 접속되는 미디어 타입의 (biWidth,biHeight) 사이즈와rcSource 와의 비율에 의해 정해진다. rcSource 가 비어있는 경우, 필터 A 는 그 입력 비디오의 전체를 사용한다. rcTarget 가 비어있는 경우, 필터 A 는 출력 버퍼의 전체에 비디오를 거둔다.

예를 들어, 필터 A 가 160 × 120 픽셀의 비디오 데이터를 받으면 가정한다. 또, 필터 A 가 다음의 미디어 타입으로 필터 B 에 접속되고 있다고 한다.

(biWidth, biHeight): 320, 240

rcSource: (0, 0, 0, 0)

rcTarget: (0, 0, 0, 0)

이 경우, 필터 A 는 받은 비디오를 x 방향과 y 방향의 양쪽 모두에 대해 2 배에 신장 해, 320 × 240 의 출력 버퍼에 거둔다.

이제 1 개의 예로서 필터 A 가 160 × 120 의 비디오 데이터를 받아, 다음의 미디어 타입으로 필터 B 에 접속되고 있다고 한다.

(biWidth, biHeight): 320, 240

rcSource: (0, 0, 160, 240)

rcTarget: (0, 0, 0, 0)

rcSource 멤버는 접속된 버퍼 사이즈 (320, 240)에 대한 값이다. 지정된 rcSource (0, 0, 160, 240)는 버퍼의 왼쪽 반이기 (위해)때문에, 필터 A 는 입력 비디오의 왼쪽 반, 즉 (0, 0, 80, 120) 부분을 받아, 비디오를 사이즈 (320, 240)에 (x 방향으로 4 배, y 방향으로 2 배에) 신장 해, 320 × 240 의 출력 버퍼에 거둔다.

여기서, 필터 A 가 CBaseAllocator::GetBuffer 를 호출해, 돌려주어진 미디어 샘플에 Attach 된 미디어 타입에 의해, 필터 B 가 필터 A 에 그것까지는 다른 사이즈 또는 종류의 비디오를 요구하고 있는 것이 나타난다. 새로운 미디어 타입은 다음과 같다.

(biWidth, biHeight): 640, 480

rcSource: (0, 0, 160, 120)

rcTarget: (0, 0, 80, 60)

이 경우, 미디어 샘플에는 사이즈가 640 × 480 의 버퍼가 포함된다. rcSource 멤버는, 새로운 미디어 타입 (640, 480)은 아니고, 최초로 접속되고 있던 미디어 타입 (320, 240)에 근거한다. 따라서,rcSource 는 입력 비디오의 좌상의 25% 가 사용되는 것을 지정한다. rcTarget 의 것 (0, 0, 80, 60)에 따라, 입력 비디오의 이 부분은 640 × 480 의 출력 버퍼의 좌상의 (80, 60) 픽셀에 배치된다. 필터 A 는 160 × 120 의 비디오를 받기 (위해)때문에, 입력 비디오의 좌상은 (80, 60)된다. 이것은 출력 비트 맵과 같은 사이즈이며, 신축(스트레치)는 불필요하다.

필터 A 는 출력 버퍼의 나머지의 픽셀에는 데이터를 배치하지 않고, 그 부분의 비트는 조작하지 않는다. rcSource 멤버는, 필터 A 와 필터 B 의 사이에 최초로 접속되고 있던 미디어 타입의 biWidthbiHeight 에 의해 제한된다. rcTarget 는, 미디어 샘플의 새로운 biWidthbiHeight 에 의해 제한된다. 위의예에서는,rcSource 는 (0, 0, 320, 240)의 경계를 나오지 못하고,rcTarget 는 (0, 0, 640, 480)의 경계를 나올 수가 없다.

↑TOP