DirectShow DirectShow 레퍼런스 인터페이스 IVMRSurfaceAllocator AllocateSurface [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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 가 생성 된다.
참조