IMFMediaBuffer::Metode kunci (mfobjects.h)

Memberi pemanggil akses ke memori di buffer, untuk membaca atau menulis

Sintaks

HRESULT Lock(
  [out] BYTE  **ppbBuffer,
  [out] DWORD *pcbMaxLength,
  [out] DWORD *pcbCurrentLength
);

Parameter

[out] ppbBuffer

Menerima penunjuk ke awal buffer.

[out] pcbMaxLength

Menerima jumlah maksimum data yang dapat ditulis ke buffer. Parameter ini bisa NULL. Nilai yang sama dikembalikan oleh metode IMFMediaBuffer::GetMaxLength .

[out] pcbCurrentLength

Menerima panjang data yang valid dalam buffer, dalam byte. Parameter ini bisa NULL. Nilai yang sama dikembalikan oleh metode IMFMediaBuffer::GetCurrentLength .

Nilai kembali

Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil.
D3DERR_INVALIDCALL
Untuk buffer permukaan Direct3D, terjadi kesalahan saat mengunci permukaan.
MF_E_INVALIDREQUEST
Buffer tidak dapat dikunci saat ini.

Keterangan

Metode ini memberi pemanggil akses ke seluruh buffer, hingga ukuran maksimum yang dikembalikan dalam parameter pcbMaxLength . Nilai yang dikembalikan dalam pcbCurrentLength adalah ukuran data valid apa pun yang sudah ada di buffer, yang mungkin kurang dari ukuran buffer total.

Pointer yang dikembalikan dalam ppbBuffer dijamin valid, dan dapat diakses dengan aman di seluruh buffer selama kunci ditahan. Ketika Anda selesai mengakses buffer, panggil IMFMediaBuffer::Unlock untuk membuka kunci buffer. Anda harus memanggil Buka kunci sekali untuk setiap panggilan ke Kunci. Setelah Anda membuka kunci buffer, pointer yang dikembalikan dalam ppbBuffer tidak lagi valid, dan tidak boleh digunakan. Umumnya, yang terbaik adalah memanggil Kunci hanya ketika Anda perlu mengakses memori buffer, dan tidak lebih awal.

Mengunci buffer tidak mencegah utas lain memanggil Kunci, jadi Anda tidak boleh mengandalkan metode ini untuk menyinkronkan utas.

Metode ini dapat mengalokasikan memori, tetapi tidak mentransfer kepemilikan memori ke pemanggil. Jangan melepaskan atau membebaskan memori; buffer media akan membebaskan memori ketika buffer media dihancurkan.

Jika Anda mengubah konten buffer, perbarui panjang saat ini dengan memanggil IMFMediaBuffer::SetCurrentLength.

Metode ini dapat mengalokasikan beberapa memori secara internal, jadi jika buffer mendukung antarmuka IMF2DBuffer , Anda harus menggunakan metode IMF2DBuffer::Lock2D untuk mengunci buffer sebagai gantinya. Untuk buffer 2-D, metode Lock2DSize bisa lebih efisien daripada metode Lock , tergantung pada nilai MF2DBuffer_LockFlags yang Anda tentukan. Memanggil Lock2DSize dengan MF2DBuffer_LockFlags_Read tidak akan menimbulkan salinan kembali ketika buffer tidak terkunci dan memanggilnya dengan MF2DBuffer_LockFlags_Write tidak akan dikenakan salinan dari buffer internal. Memanggil Lock2DSize dengan LockFlags_ReadWrite berprilaku sama seperti Lock dan Lock2D dan akan menimbulkan salinan dari dan menyalin kembali saat dibuka kuncinya. Panduan umum untuk performa terbaik adalah menghindari penggunaan IMFMediaBuffer dan IMF2DBuffer jika memungkinkan dan sebaliknya menggunakan IMF2DBuffer2 dengan bendera kunci minimum yang diperlukan. Perhatikan bahwa jika buffer dikunci menggunakan Lock2D, metode Lock mungkin mengembalikan MF_E_INVALIDREQUEST.

Antarmuka ini tersedia pada platform berikut jika komponen yang dapat didistribusikan ulang Windows Media Format 11 SDK diinstal:

  • Windows XP dengan Paket Layanan 2 (SP2) dan yang lebih baru.
  • Windows XP Media Center Edition 2005 dengan KB900325 (Windows XP Media Center Edition 2005) dan KB925766 (Rollup Pembaruan Oktober 2006 untuk Windows XP Media Center Edition) terinstal.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header mfobjects.h (termasuk Mfidl.h)
Pustaka Mfuuid.lib

Lihat juga

IMFMediaBuffer

Buffer Media