DirectX Media Object DMO 의 생성 DMO 의 미디어 타입   [목차열람] [주소복사] [슬롯비우기]
DMO 의 미디어 타입
 
Microsoft DirectX 9.0

DMO 의 미디어 타입

미디어 타입은, 미디어 데이터의 스트림에 관련된 포맷을 나타내고 있다. 여기에서는, DMO 에 의한 미디어 타입의 처리 방법에 대해 설명한다. 이것은 주로, 커스텀 DMO 를 생성 하는 개발자전용의 내용이다.

미디어 타입은,DMO_MEDIA_TYPE 구조체를 사용해 정의된다. 이 구조체에는, 이하의 정보가 포함된다.

DMO 가 최초로 생성 되었을 때에는, 스트림에 미디어 타입은 설정되지 않다. 클라이언트가 각 스트림에 미디어 타입을 설정하지 않으면, DMO 는 데이터를 처리할 수 없다. 이 처리에 대해서는, 「DMO 에의 미디어 타입의 설정」으로 클라이언트의 시점으로부터 설명되고 있다.

레지스트리내의 미디어 타입

DMO 는,DMORegister 함수를 호출하는 것으로, 지원 하는 미디어 타입의 리스트를 레지스트리에 추가할 수 있다. 애플리케이션에서는, 이 정보를 사용해, 특정의 포맷에 일치하는 DMO 를 검색할 수 있다. 레지스트리의 정보는, 포괄적인 것이다고는 할 수 없다. 보통은, DMO 가 지원 하는 주된 타입만을 포함한다. 레지스트리 엔트리에서는 입력 타입과 출력 타입으로 다른 키가 사용되지만, 개별의 스트림은 구별되지 않는다.

DMORegister 함수는,DMO_PARTIAL_MEDIATYPE 구조체를 사용해 미디어 타입을 나타낸다. 이 구조체에는,DMO_MEDIA_TYPE 구조체에 포함되는 정보의 서브 세트, 즉 메이저 타입과 서브 타입이 포함된다. 포맷 블록은 포함되지 않는다. 이것은, 포맷 블록에는, 보통, 비디오 이미지의 높이와 폭 등, 레지스트리에 저장 하려면 향하지 않는 상세한 정보가 포함되기 때문에 있다.

우선 미디어 타입

애플리케이션은, DMO 를 생성 한 후, 지원 되고 있는 미디어 타입을 DMO 에 문의할 수가 있다. DMO 는, 각 스트림에 대해서, 미디어 타입의 우선순서의 리스트 (비어 있는 경우도 있다)를 생성 한다. IMediaObject::GetInputType 메서드와 IMediaObject::GetOutputType 메서드는, 우선되는 타입을 열거한다. 스트림으로 우선되는 타입은, 애플리케이션이 다른 스트림에 미디어 타입을 설정 하면, 동적으로 변경되는 경우가 있다. 예를 들어, 입력 타입을 설정 하면, 우선되는 출력 타입의 리스트가 변경되는 경우가 있다 (역의 경우도 있다). 다만, DMO 는 우선 타입을 동적으로 갱신하지 않아도 상관없다. 애플리케이션은, 받는 타입이 모두 유효하다라고는 가정할 수 없다. 이 때문에,IMediaObject::SetInputType 메서드와 IMediaObject::SetOutputType 메서드는 특정의 타입을 검사하기 위한 플래그를 지원 하고 있다.

GetInputType 메서드와 GetOutputType 메서드는 어느쪽이나,DMO_MEDIA_TYPE 구조체를 돌려준다. DMO 는, 이 구조체의 정보의 일부를 공백으로 해, 타입의 범위를 나타낼 수가 있다. 메이저 타입 또는 서브 타입에는 GUID_NULL 를 설정할 수 있어 포맷 블록은 하늘 (0 바이트)로 할 수 있다. 포맷 블록이 하늘의 경우, 포맷 타입은 GUID_NULL 이어야 한다.

애플리케이션이 DMO 의 모든 입력 타입을 설정한 다음에도, DMO 는 보통, 각 출력 스트림에 대해서 1 개 혹은 복수의 완전한 타입을 돌려줄 필요가 있다. 완전한 출력 타입은 테스트가 용이하고, 애플리케이션은 그것을 적당한 디폴트로서 사용할 수 있다. DMO 의 테스트 애플리케이션은, 이 동작을 이용하고 있다 ( 「DMOTest 애플리케이션의 사용법」을 참조).

미디어 타입의 설정

특정의 스트림의 타입을 테스트, 설정, 소거하려면 , 애플리케이션은 SetInputType 메서드와 SetOutputType 메서드를 사용한다. 애플리케이션은, 타입을 완전하게 지정해야 한다. DMO 는, 요구된 타입을 받아들일 수가 있을지 어떨지를 검증한다. 결과는, 다른 스트림으로 설정된 타입에 따라서 다른 경우가 있다. DMO_SET_TYPEF_CLEAR 플래그를 지정 하면 스트림의 타입이 소거되므로, 애플리케이션은 원 상태에 돌아와 다른 편성을 시험할 수가 있다.

시나리오예

다음의 예에서는, 몇개의 전형적인 시나리오를 이용해, 지금까지의 설명을 구체적으로 가리킨다.

↑TOP