IMFMediaBuffer::Lock 메서드(mfobjects.h)
호출자에게 읽기 또는 쓰기를 위해 버퍼의 메모리에 대한 액세스 권한을 부여합니다.
구문
HRESULT Lock(
[out] BYTE **ppbBuffer,
[out] DWORD *pcbMaxLength,
[out] DWORD *pcbCurrentLength
);
매개 변수
[out] ppbBuffer
버퍼의 시작 부분에 대한 포인터를 받습니다.
[out] pcbMaxLength
버퍼에 쓸 수 있는 최대 데이터 양을 받습니다. 이 매개 변수는 NULL일 수 있습니다. 동일한 값은 IMFMediaBuffer::GetMaxLength 메서드에서 반환됩니다.
[out] pcbCurrentLength
버퍼에 있는 유효한 데이터의 길이(바이트)를 받습니다. 이 매개 변수는 NULL일 수 있습니다. 동일한 값은 IMFMediaBuffer::GetCurrentLength 메서드에서 반환됩니다.
반환 값
이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.
반환 코드 | Description |
---|---|
|
메서드가 성공했습니다. |
|
Direct3D 표면 버퍼의 경우 표면을 잠글 때 오류가 발생했습니다. |
|
현재 버퍼를 잠글 수 없습니다. |
설명
이 메서드는 pcbMaxLength 매개 변수에 반환된 최대 크기까지 호출자에게 전체 버퍼에 대한 액세스 권한을 부여합니다. pcbCurrentLength에 반환된 값은 버퍼에 이미 있는 유효한 데이터의 크기로, 전체 버퍼 크기보다 작을 수 있습니다.
ppbBuffer에 반환된 포인터는 유효한 것으로 보장되며 잠금이 유지되는 한 전체 버퍼에서 안전하게 액세스할 수 있습니다. 버퍼에 대한 액세스가 완료되면 IMFMediaBuffer::Unlock 를 호출하여 버퍼의 잠금을 해제합니다. 잠금을 호출할 때마다 잠금 해제를 한 번 호출해야 합니다. 버퍼의 잠금을 해제하면 ppbBuffer 에서 반환된 포인터가 더 이상 유효하지 않으므로 사용하면 안 됩니다. 일반적으로 버퍼 메모리에 액세스해야 하는 경우에만 잠금 을 호출하는 것이 가장 좋습니다.
버퍼를 잠그면 다른 스레드가 Lock을 호출할 수 없으므로 이 메서드를 사용하여 스레드를 동기화하면 안 됩니다.
이 메서드는 메모리를 할당할 수 있지만 호출자에게 메모리 소유권을 전송하지는 않습니다. 메모리를 해제하거나 해제하지 마세요. 미디어 버퍼는 미디어 버퍼가 제거될 때 메모리를 해제합니다.
버퍼의 내용을 수정하는 경우 IMFMediaBuffer::SetCurrentLength를 호출하여 현재 길이를 업데이트합니다.
이 메서드는 내부적으로 일부 메모리를 할당할 수 있으므로 버퍼가 IMF2DBuffer 인터페이스를 지원하는 경우 대신 IMF2DBuffer::Lock2D 메서드를 사용하여 버퍼를 잠가야 합니다. 2차원 버퍼의 경우 Lock2DSize 메서드는 지정한 MF2DBuffer_LockFlags 값에 따라 Lock 메서드보다 더 효율적일 수 있습니다. MF2DBuffer_LockFlags_ReadLock2DSize를 호출하면 버퍼가 잠금 해제되고 MF2DBuffer_LockFlags_Write 호출하면 내부 버퍼의 복사본이 발생하지 않습니다. LockFlags_ReadWriteLock2DSize를 호출하면 Lock 및 Lock2D와 동일하게 작동하며 잠금 해제 시 복사 및 복사가 모두 발생합니다. 최상의 성능을 위한 일반적인 지침은 가능하면 IMFMediaBuffer 및 IMF2DBuffer 를 사용하지 않고 필요한 최소 잠금 플래그와 함께 IMF2DBuffer2 를 사용하는 것입니다. Lock2D를 사용하여 버퍼가 잠긴 경우 Lock 메서드는 MF_E_INVALIDREQUEST 반환할 수 있습니다.
이 인터페이스는 Windows Media Format 11 SDK 재배포 가능 구성 요소가 설치된 경우 다음 플랫폼에서 사용할 수 있습니다.
- WINDOWS XP SP2(서비스 팩 2) 이상
- KB900325(Windows XP Media Center Edition 2005) 및 KB925766(Windows XP Media Center Edition용 2006년 10월 업데이트 롤업)이 설치된 Windows XP Media Center Edition 2005.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | mfobjects.h(Mfidl.h 포함) |
라이브러리 | Mfuuid.lib |