DirectX Media Object DMO 의 사용법 DirectShow 에서의 DMO 의 사용법   [목차열람] [주소복사] [슬롯비우기]
DirectShow 에서의 DMO 의 사용법
 
Microsoft DirectX 9.0

DirectShow 에서의 DMO 의 사용법

DirectShow 를 이용하는 애플리케이션은, DMO 래퍼 필터를 통해, 필터 그래프내의 DMO 를 사용할 수 있다. 이 필터는, DMO 를 집성 해, DMO 와의 데이터의 수수나 IMediaBuffer 개체의 할당 등, DMO 를 사용할 때의 모든 세세한 작업을 처리한다.

DMO 는 필터에 의해 집성 되기 (위해)때문에, 애플리케이션은 DMO 가 공개하는 모든 COM 인터페이스를 필터에 문의할 수가 있다. 다만, 애플리케이션은, DMO 에서의 모든 스트리밍 조작의 실행을, 필터에 맡기지 않으면 안 된다. 예를 들어, 미디어 타입의 설정, 버퍼의 처리, DMO 의 플래시, DMO 의 잠금, 품질 컨트롤을 유효하게 할까 무효로 하는지, 또는 비디오 최적화의 설정을 실시해선 안 된다.

사용하는 특정의 DMO 의 클래스 식별자 (CLSID)를 알 수 있고 있으면, 이하와 같이 해, 그 DMO 로 DMO 래퍼 필터를 초기화할 수 있다.

  1. CoCreateInstance 를 호출해, DMO 래퍼 필터를 생성 한다.
  2. DMO 래퍼 필터에 IDMOWrapperFilter 인터페이스를 문의한다.
  3. IDMOWrapperFilter::Init 메서드를 호출한다. DMO 의 CLSID 및 DMO 의 카테고리의 GUID 를 지정한다. DMO 카테고리의 일람에 대해서는, 「DMO 의 GUID 」를 참조할것.

다음 코드는, 이상의 순서를 나타낸 것이다.

// DMO 래퍼 필터를 생성 한다.
IBaseFilter *pFilter;
HRESULT hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL, 
    CLSCTX_INPROC_SERVER, IID_IBaseFilter, 
    reinterpret_cast<void**>(&pFilter));

if (SUCCEEDED(hr)) 
{
    // IDMOWrapperFilter 를 문의한다.
    IDMOWrapperFilter *pDmoWrapper;
    hr = pFilter->QueryInterface(IID_IDMOWrapperFilter, 
        reinterpret_cast<void**>(&pDmoWrapper));

    if (SUCCEEDED(hr)) 
    {     
        // 필터를 초기화한다.
        hr = pDmoWrapper->Init(CLSID_MyDMO, DMOCATEGORY_VIDEO_EFFECT); 
        pDmoWrapper->Release();

        if (SUCCEEDED(hr)) 
        {
            // 그래프에 필터를 추가한다.
            hr = pGraph->AddFilter(pFilter, L"My DMO");
        }
    }
    pFilter->Release();
}

DMOEnum 함수는, 레지스트리내의 DMO 를 열거한다. 이 함수는, DirectShow 필터에 사용되는 카테고리 GUID 와는 다른 카테고리 GUID 군을 사용한다.

DMO 에서의 시스템 장치 열거자의 사용법

DMO 를 직접 생성 하는 대신에, 시스템 장치 열거자를 사용할 수 있다. 시스템 장치 열거자는,DMOEnum 메서드에 의해 지원 되는 모든 DMO 카테고리를 열거할 수 있다. 시스템 장치 열거자는, 일부의 DirectShow 필터 카테고리를 열거할 경우에 DMO 도 열거한다. 다음의 표는, DMO 의 카테고리와 DirectShow 의 카테고리의 맵핑을 나타낸 것이다.

DMO 의 카테고리 DirectShow 에서의 동등의 카테고리
DMOCATEGORY_AUDIO_ENCODER CLSID_AudioCompressorCategory
DMOCATEGORY_AUDIO_DECODER CLSID_LegacyAmFilterCategory
DMOCATEGORY_VIDEO_ENCODER CLSID_VideoCompressorCategory
DMOCATEGORY_VIDEO_DECODER CLSID_LegacyAmFilterCategory

시스템 장치 열거자는, 모니카개체의 리스트를 돌려준다. 모니카가 DMO 를 나타내고 있는 경우,IMoniker::BindToObject 메서드는 DMO 래퍼 필터를 자동적으로 생성 해, 그 DMO 로 초기화한다. 따라서, DMO 가 포함되어 있다고 하는 사실은, 애플리케이션으로부터는 인식되지 않는다. 시스템 장치 열거자의 사용법의 더 자세한 정보는, DirectShow 의 메뉴얼의 주제 「시스템 장치 열거자의 사용」을 참조할것.

제한 사항

DirectShow 로 DMO 를 사용하려면 , 몇개의 제한 사항이 있다.

↑TOP