다음을 통해 공유


DMO 기본 사항(Microsoft Media Foundation)

이 항목에서는 Windows 미디어 코덱과 관련된 DMO에 대한 간략한 개요를 제공합니다. DMO에 대한 자세한 내용은 DirectX 미디어 개체를 참조하세요.

DMO는 데이터를 변환하는 COM 개체입니다. 데이터를 전달하면 변환된 데이터가 반환됩니다. 코덱 인코더 DMO의 경우 압축되지 않은 미디어 데이터를 입력하고 DMO는 압축된 미디어 데이터를 제공합니다. DMO를 사용할 경우의 주요 이점은 모두 동일한 기본 인터페이스인 IMediaObject를 구현하여 수행되는 변환 유형에 관계없이 동일한 개체를 사용할 수 있기 때문에 작업을 간소화한다는 것입니다.

모든 종류의 데이터 변환에 관련된 변수가 있기 때문에 오디오 및 비디오 변환은 다양한 가능한 미디어 구성을 고려해야 합니다. Windows Media 오디오 및 비디오 코덱은 DMO를 사용하여 구성할 수 있어야 하는 다양한 특수 기능도 지원합니다.

일반적으로 코덱 DMO가 디지털 미디어를 압축 및 압축 해제하는 데 필요한 변수 정보는 다음 세 가지 방법 중 하나로 전달됩니다.

  • 인코더 DMO에 전달하는 압축되지 않은 미디어의 특성과 디코더 DMO에 전달하는 압축된 미디어의 특성을 전달하도록 DMO의 입력 형식을 설정합니다.
  • 인코더 DMO에서 제공하는 압축 미디어의 특성과 디코더 DMO에서 전달되는 압축되지 않은 미디어의 특성을 전달하도록 DMO의 출력 형식을 설정합니다.
  • IPropertyBag 인터페이스의 메서드를 사용하여 코덱 DMO의 다양한 기능을 속성으로 지원하는 다른 설정을 구성합니다. IPropertyBag 은 모든 코덱 DMO에서 지원하는 표준 COM 인터페이스입니다.

또한 일부 코덱 기능은 코덱 DMO와 관련된 다른 인터페이스를 사용하여 관리됩니다. 이러한 인터페이스는 코덱 개체 섹션의 각 코덱에 대해 나열됩니다.

입력 및 출력 형식은 입력 및 출력 스트림과 관련이 있습니다. 각 스트림은 콘텐츠의 개별 표현을 나타냅니다. 예를 들어 Windows Media Video 인코더 DMO에는 단일 입력 스트림과 두 개의 출력 스트림이 있습니다. 입력 스트림은 압축되지 않은 비디오 샘플을 허용합니다. 두 출력 스트림 중 첫 번째는 압축된 샘플을 제공합니다. 다른 하나는 압축되지 않은 샘플을 제공합니다. 한 출력 스트림의 개별 샘플은 다른 스트림의 해당 샘플과 동일한 콘텐츠를 나타내지만 각 스트림은 이러한 샘플을 다른 형식으로 제공합니다.

각 스트림(입력 또는 출력)은 하나 이상의 미디어 유형을 지원합니다. 미디어 형식 또는 형식은 DMO_MEDIA_TYPE 구조체로 설명됩니다. IMediaObject::GetOutputType을 호출하여 출력 스트림에서 지원하는 형식에 대해 DMO를 쿼리할 수 있습니다. 이 메서드는 해당 스트림에 대한 유효한 출력 형식(경우에 따라 부분적으로 불완전한 경우)을 반환합니다. GetOutputType을 반복적으로 호출하고 각 호출을 통해 형식 매개 변수를 증가시켜 출력 스트림에 대해 지원되는 미디어 형식을 열거할 수 있습니다. 전달하는 형식 인덱스가 범위를 벗어나면 메서드는 DMO_E_NO_MORE_ITEMS 반환합니다. 입력 형식은 IMediaObject::GetInputType 메서드를 사용하여 동일한 방식으로 열거할 수 있습니다.

DMO에서 열거되는 형식은 "기본 설정" 형식일 뿐입니다. 그러나 다른 형식이 지원될 수 있습니다. IMediaObject::SetOutputType을 호출하여 출력 형식의 유효성을 검사할 수 있습니다. IMediaObject::SetInputType을 사용하여 입력 형식의 유효성을 검사합니다. 전달한 DMO_MEDIA_TYPE 구조체가 잘못된 경우 두 메서드 모두 DMO_E_TYPE_NOT_ACCEPTED 반환합니다. 일부 DMO에서는 입력 형식을 열거하기 전에 출력 형식을 설정해야 합니다. Windows Media 오디오 및 비디오 코덱 DMO에는 모두 상호 의존적인 유효성 검사가 있는 입력 및 출력이 있습니다. 즉, 설정한 출력 형식은 입력 형식에 대한 유효성 검사 조건을 설정합니다. 설정할 때 유효한 입력 및 출력 형식을 변경하는 몇 가지 속성도 있습니다. 이러한 이유로 형식을 열거하기 전에 DMO에서 원하는 속성을 모두 설정해야 합니다.

DMO에 대한 출력 및 입력 형식을 설정한 경우 샘플 처리를 시작할 수 있습니다. 각 입력 샘플은 IMediaObject::P rocessInput 호출을 사용하여 코덱에 전달되며, IMediaObject::P rocessOutput을 호출할 때 각 출력 샘플은 코덱에 의해 전달됩니다.

코덱 DMO 작업