DirectShow DirectShow 레퍼런스 인터페이스 IVMRSurfaceAllocator AllocateSurface   [목차열람] [주소복사] [슬롯비우기]
IVMRSurfaceAllocator::AllocateSurface
 
Microsoft DirectX 9.0

IVMRSurfaceAllocator::AllocateSurface

AllocateSurface 메서드는, DirectDraw 표면을 할당한다.

구문

HRESULT AllocateSurface(
  DWORD_PTR  dwUserID,
  VMRALLOCATIONINFO*  lpAllocInfo,
  DWORD* lpdwActualBuffers,
  LPDIRECTDRAWSURFACE7*  lplpSurface
);

파라미터

dwUserID

[in] 얼로케이터 프리젠터의 1 개의 인스턴스가 복수의 VMR 인스턴스로 사용되는 경우에 사용하는, VMR 의 이 인스턴스를 일의에 식별하는 애플리케이션이 정의한 DWORD_PTR 쿠키.

lpAllocInfo

[in] VMRALLOCATIONINFO 구조체를 지정한다. 「주의」를 참조할것.

lpdwActualBuffers

[in] [out] 입력으로는, 이 파라미터를 사용해 필요한 버퍼수를 요구한다. 출력으로는, 생성 된 실제의 버퍼수를 받는다.

lplpSurface

[out] Direct3D 표면을 받는 포인터의 주소.

반환값

메서드가 성공하면 S_OK 를 돌려준다. 실패 하면 에러 코드를 돌려준다.

에러 코드 설명
E_POINTER 포인터의 1 개가 무효이다.
E_INVALIDARG dwFlags 로, AMAP_3D_TARGET 가 AMAP_FORCE_SYSMEM 또는 AMAP_ALLOW_SYSMEM 와 결합하고 있었다.
E_FAIL lpAllocInfo->lpHdr 로 지정된 BITMAPINFOHEADER 구조체의 적어도 1 개의 멤버가 올바르지 않다.

주의

AllocateSurface 를 명시적으로 호출하기 전에, 클라이언트 애플리케이션은 IVMRSurfaceAllocator::FreeSurface 를 호출해, DirectDraw 의 디코딩 표면용 프론트 버퍼를 반드시 NULL 로 해 두는 것. 애플리케이션이 AllocateSurface 를 호출할 때에 NULL 가 아닌 경우는, 디버그 버전의 quartz.dll 가 Assert를 일으킨다.

커스텀얼로케이터 프리젠터로 이 메서드를 처리 하는 경우는,lpAllocInfo->lpHdr->biBitCount 의 값을 조사할 필요가 있다. biBitCount 가 제로의 경우는, 현재의 디스플레이의 픽셀수를 설정하는 것. BiBitCount 를 제로대로 하면, 표면 할당이 실패해, 새로운 (디폴트의) VMR 가 생성 된다.

참조

↑TOP