DirectX Media Object DMO 의 생성 DMO 의 등록   [목차열람] [주소복사] [슬롯비우기]
DMO 의 등록
 
Microsoft DirectX 9.0

DMO 의 등록

클라이언트가 DMO 를 사용하려면 , CLSID 가 사용자의 시스템에 등록되지 않으면 안 된다. 이 처리는, DLL 의 DllRegisterServer 함수를 사용해 실시한다. Active Template Library (ATL)를 사용하고 있는 경우는, ATL 위저드가 이 함수를 자동적으로 생성한다.

또, 생성 한 DMO 를, DMO 의 표준 카테고리에 등록할 수도 있다. 이것에 의해, 클라이언트는 DMOEnum 함수를 사용해 그 DMO 를 발견할 수 있게 된다. 카테고리는 GUID 에 의해 정의되어 「DMO 의 GUID 」의 주제에 일람이 나타나고 있다.

카테고리에의 DMO 의 등록은 실시하지 않아도 좋다. 등록하려면 ,DMORegister 함수를 호출해, DMO 의 프렌들리명, CLSID, 카테고리를 지정한다. 옵션으로서 DMO 가 지원 하는 미디어 타입세트를 등록할 수도 있다. 더 자세한 정보는, 「DMO 의 미디어 타입」을 참조할것.

다음 예는 PCM 오디오의 입력과 출력을 지원 하는 오디오 이펙트 DMO 를 등록하는 방법을 나타내고 있다. 이 경우, 입력 타입과 출력 타입은 같다.

STDAPI DllRegisterServer(void)
{
    // PCM 오디오 이펙트 DMO 로서 DMO 를 등록한다.
    DMO_PARTIAL_MEDIATYPE mt;
    mt.type    = MEDIATYPE_Audio;
    mt.subtype = MEDIASUBTYPE_PCM;
    HRESULT hr = DMORegister(
        L"MyDMO",                  // 프렌들리명
        CLSID_MyDMO,               // CLSID
        DMOCATEGORY_AUDIO_EFFECT,  // 카테고리
        0,                         // 플래그
        1,                         // 입력 타입의 수
        &mt,                       // 입력 타입의 배열
        1,                         // 출력 타입의 수
        &mt);                      // 출력 타입의 배열

    if (FAILED(hr)) return hr;

    // typelib 없음으로 개체를 등록한다.
    return _Module.RegisterServer(FALSE);
}

이 예에서는, ATL 를 사용해 프로젝트가 생성 된 것으로 한다. 함수의 마지막 행에서는, 표준 ATL 메서드를 호출해, COM 서버를 등록하고 있다. ATL 를 사용하지 않는 경우, 함수는 다른 것이 된다.

DMO 의 등록의 해제

DllUnregisterServer 함수에서는,DllRegisterServer 함수로 생성 한 모든 레지스트리 엔트리를 삭제해야 한다. DMO 의 등록시에 DMORegister 를 호출하는 경우는, DMO 의 등록을 해제할 경우에도, 같은 카테고리로 DMOUnregister 를 호출할 필요가 있다.

다음의 예에서는, 전의 예로 생성 한 레지스트리 엔트리를 삭제하고 있다.

STDAPI DllUnregisterServer(void)
{
    DMOUnregister(CLSID_MyDMO, DMOCATEGORY_AUDIO_EFFECT);
    return _Module.UnregisterServer(TRUE);
}

DirectShow 의 메리트값

필터 그래프를 생성 하기 위해서, DirectShow 는 DMO 에 디폴트의 메리트값을 할당한다. 이 값을 오버라이드(override) 하려면 , HKEY_CLASSES_ROOT\CLSID 내의 DMO 의 레지스트리 키에, 레지스트리 엔트리를 추가한다. 메리트를 지정하는 값을 가지는 Merit 라는 이름의 DWORD 값을 인클루드 한다.

↑TOP