Bagikan melalui


CameraCaptureSession.Prepare(Surface) Metode

Definisi

Pra-alokasikan semua buffer untuk Surface output.

[Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)]
public abstract void Prepare (Android.Views.Surface surface);
[<Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)>]
abstract member Prepare : Android.Views.Surface -> unit

Parameter

surface
Surface

output Surface tempat buffer harus dialokasikan sebelumnya. Harus salah satu surface output yang digunakan untuk membuat sesi ini.

Atribut

Keterangan

Pra-alokasikan semua buffer untuk Surface output.

Biasanya, buffer gambar untuk Surface output tertentu dialokasikan sesuai permintaan, untuk meminimalkan latensi startup dan overhead memori.

Namun, dalam beberapa kasus, mungkin diinginkan agar buffer dialokasikan sebelum permintaan apa pun yang menargetkan Surface benar-benar dikirimkan ke perangkat. Buffer besar mungkin membutuhkan waktu untuk dialokasikan, yang dapat mengakibatkan keterlambatan pengiriman permintaan sampai buffer yang cukup dialokasikan untuk mencapai perilaku status stabil. Penundaan tersebut dapat menyebabkan ledakan memakan waktu lebih lama dari yang diinginkan, atau menyebabkan melompati atau gagap dalam output pratinjau.

Metode prepare() dapat digunakan untuk melakukan preallokasi ini. Ini hanya dapat dipanggil untuk surface output tertentu sebelum Surface digunakan sebagai target untuk permintaan. Jumlah buffer yang dialokasikan adalah jumlah jumlah yang diperlukan oleh konsumen yang menyediakan Surface output, dan jumlah maksimum yang diperlukan oleh perangkat kamera untuk mengisi alurnya. Karena ini mungkin jumlah yang lebih besar daripada yang sebenarnya diperlukan untuk operasi status stabil, menggunakan persiapan dapat mengakibatkan konsumsi memori yang lebih tinggi daripada hasil perilaku sesuai permintaan normal. Prepare() juga akan menunda waktu ke output pertama ke Surface tertentu, dengan imbalan kecepatan bingkai yang lebih halus setelah alokasi selesai.

Misalnya, aplikasi yang membuat android.media.ImageReader#newInstance ImageReader dengan argumen maxImages 10, tetapi hanya menggunakan 3 Gambar simultan sekaligus biasanya hanya akan menyebabkan 3 gambar tersebut dialokasikan (ditambah apa yang diperlukan oleh perangkat kamera untuk operasi yang lancar). Tetapi menggunakan prepare() pada ImageReader Surface akan mengakibatkan semua 10 Gambar dialokasikan. Jadi aplikasi yang menggunakan metode ini harus berhati-hati untuk meminta hanya jumlah buffer yang sebenarnya diperlukan untuk aplikasi mereka.

Jika Surface output yang sama digunakan dalam sesi berturut-turut (tanpa menutup sesi pertama secara eksplisit), maka buffer yang sudah dialokasikan dibawa, dan jika digunakan sebagai target permintaan pengambilan di sesi pertama, persiapan tidak dapat dipanggil di sesi kedua.

Setelah alokasi selesai, StateCallback#onSurfacePrepared akan dipanggil dengan Surface yang disediakan untuk metode ini. Antara panggilan persiapan dan panggilan onSurfacePrepared, Surface yang disediakan untuk mempersiapkan tidak boleh digunakan sebagai target CaptureRequest yang dikirimkan ke sesi ini.

Perhatikan bahwa jika 2 permukaan berbagi aliran yang sama melalui OutputConfiguration#enableSurfaceSharing dan OutputConfiguration#addSurface, prepare() hanya perlu dipanggil pada satu permukaan, dan StateCallback#onSurfacePrepared akan dipicu untuk kedua permukaan.

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY perangkat tidak dapat mengalokasikan buffer output sebelumnya; untuk perangkat tersebut, StateCallback#onSurfacePrepared akan segera dipanggil, dan tidak ada pra-alokasi yang dilakukan.

Dokumentasi Java untuk android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface).

Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.

Berlaku untuk