다음을 통해 공유


IVMRSurfaceAllocator::AllocateSurface 메서드(strmif.h)

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

메서드는 AllocateSurface DirectDraw 표면을 할당합니다.

구문

HRESULT AllocateSurface(
  [in]  DWORD_PTR            dwUserID,
  [in]  VMRALLOCATIONINFO    *lpAllocInfo,
  [in]  DWORD                *lpdwActualBuffers,
  [out] LPDIRECTDRAWSURFACE7 *lplpSurface
);

매개 변수

[in] dwUserID

할당자-발표자의 한 instance 여러 VMR 인스턴스와 함께 사용되는 시나리오에서 사용할 VMR의 이 instance 고유하게 식별하는 애플리케이션 정의 DWORD_PTR 쿠키입니다.

[in] lpAllocInfo

VMRALLOCATIONINFO 구조를 지정합니다. 설명 부분을 참조하세요.

[in] lpdwActualBuffers

[out] 입력에서 이 매개 변수는 원하는 버퍼 수를 요청하는 데 사용됩니다. 출력 시 생성된 실제 버퍼 수를 받습니다.

[out] lplpSurface

Direct3D 표면을 수신하는 포인터의 주소입니다.

반환 값

메서드가 성공하면 S_OK가 반환되고, 그렇지 않으면 오류 코드가 반환됩니다.

반환 코드 설명
E_POINTER
포인터 중 하나가 잘못되었습니다.
E_INVALIDARG
dwFlags에서 AMAP_3D_TARGET AMAP_FORCE_SYSMEM 또는 AMAP_ALLOW_SYSMEM 결합되었습니다.
E_FAIL
lpAllocInfo-lpHdr>로 지정된 BITMAPINFOHEADER 구조체의 하나 이상의 멤버가 잘못되었습니다.

설명

AllocateSurface를 명시적으로 호출하기 전에 클라이언트 애플리케이션은 IVMRSurfaceAllocator::FreeSurface를 호출하여 DirectDraw 디코딩 표면 전면 버퍼가 NULL인지 확인해야 합니다. 애플리케이션이 AllocateSurface를 호출할 때 NULL이 아닌 경우 quartz.dll 디버그 버전으로 인해 어설션이 발생합니다.

사용자 지정 할당자-발표자에서 이 메서드를 구현하는 경우 lpAllocInfo-lpHdr-biBitCount>> 값을 검사해야 합니다. biBitCount가 0이면 현재 디스플레이의 픽셀 깊이로 설정해야 합니다. BiBitCount가 0으로 유지되면 표면 할당이 실패하고 새(기본값) VMR이 만들어집니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 SP1이 설치된 Windows XP[데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 strmif.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

오류 및 성공 코드

IVMRSurfaceAllocator 인터페이스

비디오 혼합 렌더러 사용