In-Place 처리
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
특정 데이터 변환은 데이터를 직접 수정하여 수행할 수 있습니다. 이를 현재 위치 처리라고 합니다. 이러한 방식으로 많은 오디오 및 비디오 효과를 수행할 수 있습니다. DMO가 현재 위치 처리를 지원하는 경우 IMediaObjectInPlace 인터페이스를 노출합니다. 현재 위치 처리는 일반적으로 출력에 별도의 버퍼를 사용하는 것보다 더 효율적입니다. (한 가지 주요 예외는 버퍼가 비디오 메모리에 있는 경우입니다. 이 경우 읽기 작업이 쓰기 작업보다 훨씬 느리므로 현재 위치 처리는 권장되지 않습니다.)
데이터를 처리하기 위해 클라이언트는 ProcessInput 및 ProcessOutput에 대한 별도의 호출이 아닌 IMediaObjectInPlace::P rocess 메서드를 단일 호출합니다. Process 메서드는 동기식입니다. 모든 처리는 호출 내에서 발생합니다. 또한 현재 위치 처리는 IMediaBuffer 개체를 사용하지 않습니다. Process 메서드는 메모리 버퍼에 직접 포인터를 사용합니다.
현재 위치 처리를 지원하는 DMO는 여전히 ProcessInput 및 ProcessOutput 메서드를 포함하여 IMediaObject 인터페이스를 구현해야 합니다. 클라이언트는 현재 위치 처리를 사용할지 아니면 별도의 버퍼를 사용할지 선택할 수 있습니다. 그러나 두 가지 유형의 처리를 혼합하지 마세요. Process를 호출하는 경우 ProcessInput 또는 ProcessOutput을 호출하지 말고 그 반대의 경우도 마찬가지입니다.
효과 꼬리
현재 위치 DMO는 입력이 중지된 후 몇 가지 추가 출력을 만들 수 있습니다. 이를 효과 꼬리라고 합니다. 예를 들어, 반향 효과는 입력이 무음으로 도달한 후에도 계속됩니다. 효과 꼬리가 있는 경우 Process 메서드는 S_FALSE 반환합니다. 애플리케이션이 모든 데이터를 처리한 후에는 빈 버퍼를 Process 메서드로 전송하여 효과 꼬리를 생성할 수 있습니다.
관련 항목