Share via


DMO 래퍼 필터

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

DMO 래퍼 필터를 사용하면 DirectShow 애플리케이션이 필터 그래프 내에서 DMO( DirectX Media Object )를 사용할 수 있습니다. 필터는 DMO를 래핑하고 DMO에서 데이터 전달과 같은 DMO 사용의 모든 세부 정보를 처리합니다. 또한 필터는 DMO를 집계하므로 애플리케이션은 DMO가 노출하는 COM 인터페이스에 대한 필터를 쿼리할 수 있습니다.

레이블
필터 인터페이스 IBaseFilter, IDMOWrapperFilter, IPersistStream
입력 핀 미디어 형식 주의 참조 하십시오.
입력 핀 인터페이스 IMemInputPin, IPin, IQualityControl
출력 핀 미디어 형식 주의 참조 하십시오.
출력 핀 인터페이스 IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
CLSID 필터링 CLSID_DMOWrapperFilter
속성 페이지 CLSID 속성 페이지 없음
실행 파일 Qasf.dll
장점 주의 참조 하십시오.
필터 범주 주의 참조 하십시오.

 

설명

제한 사항

DMO 래퍼에는 다음과 같은 제한 사항이 있습니다.

  • 0개의 입력, 여러 입력 또는 0개의 출력이 있는 DMO는 지원하지 않습니다. (하나의 입력 및 여러 출력이 있는 DMO를 지원합니다.)
  • 사용자 지정 전송을 지원하지 않습니다. 모든 데이터 전송은 IMemInputPin 인터페이스를 통해 수행됩니다.
  • IMediaObjectInPlace 인터페이스를 사용하지 않습니다. 모든 처리는 IMediaObject 메서드를 사용하여 수행됩니다.

DMO의 각 입력 스트림에 대해 필터는 해당 입력 핀을 만듭니다. 각 출력 스트림에 대해 해당 출력 핀을 만듭니다. 각 핀이 지원하는 미디어 유형은 DMO에 따라 달라집니다.

인코더 인터페이스

DMO가 비디오 인코더 또는 오디오 인코더인 경우 출력 핀은 IAMStreamConfig 인터페이스를 노출합니다. DMO가 비디오 인코더인 경우 출력 핀은 IAMVideoCompression 인터페이스도 노출합니다. 두 경우 모두 DMO가 인터페이스를 지원하는 경우 핀은 DMO에 위임됩니다. 그렇지 않으면 핀이 자체 구현을 제공합니다.

스트리밍

필터는 IMemInputPin 인터페이스를 사용하여 모든 스트리밍을 처리합니다. IAsyncReader 연결을 지원하지 않습니다. 필터는 업스트림(스트림 종료 알림 포함)에서 데이터를 수신하는 경우에만 DMO에서 IMediaObject::P rocessOutput을 호출합니다. 따라서 입력 스트림이 0인 DMO는 지원하지 않습니다.

추구

모든 검색 요청은 DMO 래퍼의 첫 번째 입력 핀을 통해 업스트림 필터에 전달됩니다. 다중 출력 DMO의 경우 이는 애플리케이션이 그래프를 검색할 때 업스트림 필터가 여러 검색 요청을 받을 수 있음을 의미합니다.

장점

DirectShow는 모든 DDO에 MERIT_NORMAL + 0x800 기본 장점 값을 할당합니다. 이 값은 MERIT_NORMALMERIT_PREFERRED 사이입니다. 디코더 필터의 장점 값은 일반적으로 MERIT_NORMAL. 따라서 필터 그래프 관리자는 일반적으로 디코더 필터를 통해 DMO 디코더를 선택합니다. 기본 장점 값을 재정의하려면 HKEY_CLASSES_ROOT\CLSID DMO의 레지스트리 키에 레지스트리 항목을 추가합니다. 값이 장점을 지정하는 "Merit"라는 DWORD 값을 포함합니다.

범주

DMO 래퍼 필터는 모든 범주에 단독으로 표시되지 않습니다. DMO를 래핑하면 DMO의 범주에 해당하는 DirectShow 범주에 DMO 이름 아래에 표시됩니다.

버퍼

DMO 래퍼 필터는 IMediaBuffer 인터페이스를 노출하는 DMO에 미디어 버퍼를 전달합니다.

Windows Vista 이상에서 미디어 버퍼는 IServiceProvider 인터페이스도 노출합니다. DMO는 이 인터페이스를 사용하여 버퍼와 연결된 미디어 샘플에 대한 포인터를 가져올 수 있습니다. 서비스 식별자 IID_IMediaSample 사용합니다. 비디오 DMO는 미디어 샘플의 IMediaSample2 인터페이스를 사용하여 샘플에 인터레이스 플래그를 설정할 수 있습니다. 다음 코드는 미디어 샘플에 대한 포인터를 가져오는 방법을 보여줍니다.

IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;

hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
    hr = pSp->QueryService(
        IID_IMediaSample,  // Service identifier.
        IID_IMediaSample2, // Interface identifier.
        (void**)&pSample2
        );
    if (SUCCEEDED(hr))
    {
        // Set flags (not shown).
        pSample2->Release();
    }
    pSp->Release();
}

샘플별 인터레이스 플래그에 대한 자세한 내용은 AM_SAMPLE2_PROPERTIES 구조를 참조하세요.

품질 제어

DMO가 IDMOQualityControl 인터페이스를 노출하는 경우 필터는 출력 핀에서 IQualityControl::Notify 호출을 DMO에서 IDMOQualityControl::SetNow 호출로 변환합니다. SetNowrtNow 매개 변수는 Quality 구조의 TimeStampLate 멤버의 합계로 계산됩니다.

GraphEdit에서 Fiter 사용

GraphEdit에서 DMO 래퍼 필터는 자체 이름 아래에 표시되지 않습니다. 대신 등록된 각 DMO가 적절한 필터 범주 아래에 나열됩니다. 필터 삽입 대화 상자를 통해 DMO를 추가하면 GraphEdit에서 DMO 래퍼 필터를 만들고 해당 DMO를 사용하도록 구성합니다.

DirectShow 필터

DirectX 미디어 개체