다음을 통해 공유


CameraCaptureSession.Prepare(Surface) 메서드

정의

출력 Surface에 대한 모든 버퍼를 미리 할당합니다.

[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

매개 변수

surface
Surface

버퍼를 미리 할당해야 하는 출력 Surface입니다. 이 세션을 만드는 데 사용되는 출력 Surface 중 하나여야 합니다.

특성

설명

출력 Surface에 대한 모든 버퍼를 미리 할당합니다.

일반적으로 지정된 출력 Surface에 대한 이미지 버퍼는 시작 대기 시간 및 메모리 오버헤드를 최소화하기 위해 주문형으로 할당됩니다.

그러나 경우에 따라 Surface를 대상으로 하는 요청이 실제로 디바이스에 제출되기 전에 버퍼를 할당하는 것이 바람직할 수 있습니다. 큰 버퍼는 할당하는 데 다소 시간이 걸릴 수 있으므로 안정적인 상태 동작에 도달하기 위해 충분한 버퍼가 할당될 때까지 요청 제출이 지연될 수 있습니다. 이러한 지연으로 인해 버스트가 원하는 것보다 오래 걸리거나 미리 보기 출력에서 건너뛰거나 더듬거릴 수 있습니다.

prepare() 메서드를 사용하여 이 사전 할당을 수행할 수 있습니다. Surface가 요청의 대상으로 사용되기 전에 지정된 출력 Surface에 대해서만 호출할 수 있습니다. 할당된 버퍼 수는 출력 Surface를 제공하는 소비자가 필요로 하는 개수의 합계와 카메라 디바이스가 파이프라인을 채우는 데 필요한 최대 수입니다. 이는 안정 상태 작업에 실제로 필요한 것보다 많은 수일 수 있으므로 준비를 사용하면 일반적인 주문형 동작 결과보다 메모리 사용량이 더 높을 수 있습니다. 또한 준비()는 할당이 완료되면 더 부드러운 프레임 속도를 제공하는 대가로 지정된 Surface에 대한 첫 번째 출력 시간을 지연합니다.

예를 들어 maxImages 인수가 10인 애플리케이션 android.media.ImageReader#newInstance ImageReader 은 한 번에 3개의 동시 이미지만 사용하므로 일반적으로 이러한 3개의 이미지만 할당됩니다(원활한 작업을 위해 카메라 디바이스에 필요한 이미지 추가). 그러나 ImageReader Surface에서 prepare()를 사용하면 10개 이미지가 모두 할당됩니다. 따라서 이 방법을 사용하는 애플리케이션은 애플리케이션에 실제로 필요한 버퍼의 수만 요청하는 데 주의해야 합니다.

첫 번째 세션을 명시적으로 닫지 않고 연속 세션에서 동일한 출력 Surface를 사용하는 경우 이미 할당된 버퍼가 이월되고 첫 번째 세션에서 캡처 요청의 대상으로 사용된 경우 두 번째 세션에서 준비 작업을 호출할 수 없습니다.

할당이 완료되면 StateCallback#onSurfacePrepared 이 메서드에 제공된 Surface를 사용하여 호출됩니다. 준비 호출과 onSurfacePrepared 호출 사이에 준비하기 위해 제공된 Surface는 이 세션에 제출된 CaptureRequest의 대상으로 사용해서는 안 됩니다.

2개의 표면이 동일한 스트림을 OutputConfiguration#addSurface통해 OutputConfiguration#enableSurfaceSharing 공유하는 경우, prepare()는 한 표면에서만 호출되어야 하며 StateCallback#onSurfacePrepared 두 표면 모두에 대해 트리거됩니다.

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY 디바이스는 출력 버퍼를 미리 할당할 수 없습니다. 해당 디바이스 StateCallback#onSurfacePrepared 의 경우 즉시 호출되며 사전 할당이 수행되지 않습니다.

에 대한 android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface)Java 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

적용 대상