IMF2DBuffer::Lock2D 메서드(mfobjects.h)

호출자에게 버퍼의 메모리에 대한 액세스 권한을 부여합니다.

구문

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

매개 변수

[out] ppbScanline0

이미지에서 픽셀 맨 위 행의 첫 번째 바이트에 대한 포인터를 받습니다. 이미지가 뷰어에 표시될 때 맨 위 행이 맨 위 행으로 정의되며 메모리의 첫 번째 행이 아닐 수 있습니다.

[out] plPitch

표면 보폭(바이트)을 받습니다. 보폭은 음수일 수 있으며 이는 이미지가 메모리의 아래쪽에서 위로 방향을 지정했음을 나타냅니다.

반환 값

이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.

반환 코드 Description
S_OK
메서드가 성공했습니다.
D3DERR_INVALIDCALL
Direct3D 표면을 잠글 수 없습니다.
MF_E_INVALIDREQUEST
현재 버퍼를 잠글 수 없습니다.

설명

p가 픽셀 행의 첫 번째 바이트에 대한 포인터인 경우 p + (*plPitch)는 다음 픽셀 행의 첫 번째 바이트를 가리킵니다. 버퍼는 각 픽셀 행 뒤의 안쪽 여백을 포함할 수 있으므로 보폭이 이미지 너비(바이트)보다 넓을 수 있습니다. 읽기 액세스 가능하거나 쓰기에 액세스할 수 없으므로 패딩 바이트용으로 예약된 메모리에 액세스하지 마세요. 자세한 내용은 Image Stride를 참조하세요.

pbScanline0에서 반환된 포인터는 호출자가 잠금을 보유하는 한 유효한 상태로 유지됩니다. 메모리 액세스가 완료되면 IMF2DBuffer::Unlock2D 를 호출하여 버퍼의 잠금을 해제합니다. Lock2D를 호출할 때마다 Unlock2D한 번 호출해야 합니다. 버퍼의 잠금을 해제한 후 pbScanline0 에서 반환된 포인터는 더 이상 유효하지 않으므로 사용하면 안 됩니다. 일반적으로 이전이 아닌 버퍼 메모리에 액세스해야 하는 경우에만 Lock2D 를 호출하는 것이 가장 좋습니다.

IMFMediaBuffer::GetCurrentLengthIMFMediaBuffer::GetMaxLength 메서드에서 반환하는 값은 Lock2D 메서드에서 반환되는 버퍼에 적용되지 않습니다. 같은 이유로 Lock2D 메서드에서 반환된 버퍼의 데이터를 조작한 후에 IMFMediaBuffer::SetCurrentLength를 호출할 필요가 없습니다.

Lock2D 잠금이 유지되는 동안 IMFMediaBuffer::Lock 메서드가 실패하고 그 반대의 경우도 마찬가지입니다. 애플리케이션은 한 번에 이러한 메서드 중 하나만 사용해야 합니다.

기본 버퍼가 Direct3D 표면인 경우 표면을 잠글 수 없는 경우 메서드가 실패합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 mfobjects.h(Mfidl.h 포함)
라이브러리 Mfuuid.lib

추가 정보

IMF2DBuffer

미디어 버퍼

압축되지 않은 비디오 버퍼