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
S_OK
메서드가 성공했습니다.
D3DERR_INVALIDCALL
Direct3D 표면 버퍼의 경우 표면을 잠글 때 오류가 발생했습니다.
MF_E_INVALIDREQUEST
현재 버퍼를 잠글 수 없습니다.

설명

이 메서드는 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를 호출하면 LockLock2D와 동일하게 작동하며 잠금 해제 시 복사 및 복사가 모두 발생합니다. 최상의 성능을 위한 일반적인 지침은 가능하면 IMFMediaBufferIMF2DBuffer 를 사용하지 않고 필요한 최소 잠금 플래그와 함께 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

추가 정보

IMFMediaBuffer

미디어 버퍼