다음을 통해 공유


DMO 아키텍처

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

이 섹션에서는 DMO의 전체 아키텍처에 대해 설명합니다.

스트림

DMO는 m 입력을 사용하고 n 개의 출력을 생성하는 개체입니다. 입력 및 출력을 스트림이라고 합니다. 모든 DMO에는 하나 이상의 스트림이 있습니다. 스트림은 개체가 아닙니다. 인덱스 번호로 DMO에서 단순히 참조됩니다. 스트림 수는 디자인 타임에 수정됩니다.

미디어 유형

모든 데이터는 데이터 내용을 해석하는 방법을 정의하는 미디어 형식을 사용하여 입력됩니다. 예를 들어 320 x 240 24비트 RGB 비디오는 한 가지 유형입니다. 44.1킬로헤르츠(kHz) 16비트 스테레오 PCM 오디오는 또 다른 유형입니다. 미디어 형식은 DMO_MEDIA_TYPE 구조를 사용하여 설명합니다. 클라이언트가 데이터를 처리하려면 먼저 DMO의 각 스트림에 대한 미디어 형식을 설정해야 합니다.

일반적으로 스트림은 다양한 미디어 유형을 허용할 수 있습니다. 일부 DDO는 다른 DDO보다 광범위한 형식을 지원합니다. DMO 인터페이스는 클라이언트가 지원되는 형식을 검색하는 메서드를 정의합니다. 예를 들어 한 DMO는 모든 비트 깊이에서 RGB 비디오를 지원할 수 있고 다른 DMO는 24비트 RGB만 지원할 수 있습니다. 또한 DMO는 입력 및 출력의 특정 조합으로 제한될 수 있습니다. 예를 들어 입력 형식이 16비트 비디오인 경우 출력 스트림에 동일한 비트 깊이가 필요할 수 있습니다. 클라이언트는 각 스트림의 기본 설정 형식을 열거한 다음 특정 조합을 테스트할 수 있습니다.

버퍼

기본 DMO 모델에서 클라이언트는 별도의 입력 버퍼와 출력 버퍼를 할당합니다. 입력 버퍼를 데이터로 채우고 DMO에 전달하며 DMO는 출력 버퍼에 새 데이터를 씁니다.

필요에 따라 DMO는 "현재 위치" 처리를 지원할 수 있습니다. 현재 위치 처리를 사용하면 DMO는 원본 데이터를 통해 출력을 입력 버퍼에 직접 씁니다. 현재 위치 처리를 사용하면 별도의 버퍼가 필요하지 않습니다. 반면에 일부 애플리케이션에서는 허용되지 않을 수 있는 원래 데이터를 변경합니다.

기본 버퍼링 모델은 IMediaObject 인터페이스를 통해 지원됩니다. 모든 DDO는 이 인터페이스를 구현해야 합니다. DMO가 현재 위치 처리를 지원하는 경우 IMediaObjectInPlace 인터페이스도 노출합니다. 클라이언트는 입력 및 출력 모두의 모든 버퍼를 할당해야 합니다.

DDO 정보