IMF2DBuffer::Lock2D 메서드(mfobjects.h)
호출자에게 버퍼의 메모리에 대한 액세스 권한을 부여합니다.
구문
HRESULT Lock2D(
[out] BYTE **ppbScanline0,
[out] LONG *plPitch
);
매개 변수
[out] ppbScanline0
이미지에서 픽셀 맨 위 행의 첫 번째 바이트에 대한 포인터를 받습니다. 이미지가 뷰어에 표시될 때 맨 위 행이 맨 위 행으로 정의되며 메모리의 첫 번째 행이 아닐 수 있습니다.
[out] plPitch
표면 보폭(바이트)을 받습니다. 보폭은 음수일 수 있으며 이는 이미지가 메모리의 아래쪽에서 위로 방향을 지정했음을 나타냅니다.
반환 값
이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.
반환 코드 | Description |
---|---|
|
메서드가 성공했습니다. |
|
Direct3D 표면을 잠글 수 없습니다. |
|
현재 버퍼를 잠글 수 없습니다. |
설명
p가 픽셀 행의 첫 번째 바이트에 대한 포인터인 경우 p + (*plPitch)는 다음 픽셀 행의 첫 번째 바이트를 가리킵니다. 버퍼는 각 픽셀 행 뒤의 안쪽 여백을 포함할 수 있으므로 보폭이 이미지 너비(바이트)보다 넓을 수 있습니다. 읽기 액세스 가능하거나 쓰기에 액세스할 수 없으므로 패딩 바이트용으로 예약된 메모리에 액세스하지 마세요. 자세한 내용은 Image Stride를 참조하세요.
pbScanline0에서 반환된 포인터는 호출자가 잠금을 보유하는 한 유효한 상태로 유지됩니다. 메모리 액세스가 완료되면 IMF2DBuffer::Unlock2D 를 호출하여 버퍼의 잠금을 해제합니다. Lock2D를 호출할 때마다 Unlock2D를 한 번 호출해야 합니다. 버퍼의 잠금을 해제한 후 pbScanline0 에서 반환된 포인터는 더 이상 유효하지 않으므로 사용하면 안 됩니다. 일반적으로 이전이 아닌 버퍼 메모리에 액세스해야 하는 경우에만 Lock2D 를 호출하는 것이 가장 좋습니다.
IMFMediaBuffer::GetCurrentLength 및 IMFMediaBuffer::GetMaxLength 메서드에서 반환하는 값은 Lock2D 메서드에서 반환되는 버퍼에 적용되지 않습니다. 같은 이유로 Lock2D 메서드에서 반환된 버퍼의 데이터를 조작한 후에 IMFMediaBuffer::SetCurrentLength를 호출할 필요가 없습니다.
Lock2D 잠금이 유지되는 동안 IMFMediaBuffer::Lock 메서드가 실패하고 그 반대의 경우도 마찬가지입니다. 애플리케이션은 한 번에 이러한 메서드 중 하나만 사용해야 합니다.
기본 버퍼가 Direct3D 표면인 경우 표면을 잠글 수 없는 경우 메서드가 실패합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | mfobjects.h(Mfidl.h 포함) |
라이브러리 | Mfuuid.lib |