CameraCaptureSession.Prepare(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, фактически отправляются на устройство. Выделение больших буферов может занять некоторое время, что может привести к задержкам при отправке запросов до тех пор, пока достаточные буферы не будут выделены для достижения поведения устойчивого состояния. Такие задержки могут занять больше времени, чем нужно, или вызвать пропуски или заикания в выходных данных предварительной версии.
Метод prepare() можно использовать для выполнения этого предварительного размещения. Он может вызываться только для заданной выходной поверхности перед тем, как Surface будет использоваться в качестве целевого объекта для запроса. Количество выделенных буферов — это сумма количества, необходимого потребителю, предоставляющего выходную поверхность, и максимальное число, необходимое устройству камеры для заполнения конвейера. Так как это может быть больше, чем то, что на самом деле требуется для устойчивой операции, использование подготовки может привести к более высокому потреблению памяти, чем обычное поведение по запросу. Подготовка() также отложит время до первого вывода в заданный Surface, в обмен на более гладкую частоту кадров после завершения выделения.
Например, приложение, которое создает android.media.ImageReader#newInstance ImageReader
аргумент maxImages 10, но одновременно использует только 3 одновременных изображения, как правило, приведет только к выделению этих 3 изображения (а также то, что требуется устройству камеры для плавной работы). Но использование prepare() в ImageReader Surface приведет к выделению всех 10 изображений. Поэтому приложения, использующие этот метод, должны заботиться о том, чтобы запрашивать только количество буферов, необходимых для их приложения.
Если один и тот же выходной Surface используется в последовательных сеансах (без явного закрытия первого сеанса), то его уже выделенные буферы переносятся и если он использовался в качестве целевого объекта запроса на запись в первом сеансе, подготовка не может вызываться во втором сеансе.
После завершения выделения вызовется с помощью Surface, StateCallback#onSurfacePrepared
предоставленного этому методу. Между вызовом подготовки и вызовом onSurfacePrepared surface, предоставленным для подготовки, не следует использовать в качестве целевого объекта CaptureRequest, отправленного в этот сеанс.
Обратите внимание, что если 2 поверхности совместно используют один и тот же поток через OutputConfiguration#enableSurfaceSharing
и OutputConfiguration#addSurface
, подготовка() необходимо вызывать только на одной поверхности и StateCallback#onSurfacePrepared
будет активирована для обеих поверхностей.
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY
устройства не могут заранее выделить выходные буферы; для этих устройств StateCallback#onSurfacePrepared
будет немедленно вызван и не будет выполнено предварительное размещение.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.