OutputConfiguration.EnableSurfaceSharing Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Enable multiple surfaces sharing the same OutputConfiguration
[Android.Runtime.Register("enableSurfaceSharing", "()V", "", ApiSince=26)]
public void EnableSurfaceSharing ();
[<Android.Runtime.Register("enableSurfaceSharing", "()V", "", ApiSince=26)>]
member this.EnableSurfaceSharing : unit -> unit
- Attributes
Remarks
Enable multiple surfaces sharing the same OutputConfiguration
For advanced use cases, a camera application may require more streams than the combination guaranteed by CameraDevice#createCaptureSession
. In this case, more than one compatible surface can be attached to an OutputConfiguration so that they map to one camera stream, and the outputs share memory buffers when possible. Due to buffer sharing clients should be careful when adding surface outputs that modify their input data. If such case exists, camera clients should have an additional mechanism to synchronize read and write access between individual consumers.
Two surfaces are compatible in the below cases:
<li> Surfaces with the same size, format, dataSpace, and Surface source class. In this case, CameraDevice#createCaptureSessionByOutputConfigurations
is guaranteed to succeed.
<li> Surfaces with the same size, format, and dataSpace, but different Surface source classes that are generally not compatible. However, on some devices, the underlying camera device is able to use the same buffer layout for both surfaces. The only way to discover if this is the case is to create a capture session with that output configuration. For example, if the camera device uses the same private buffer format between a SurfaceView/SurfaceTexture and a MediaRecorder/MediaCodec, CameraDevice#createCaptureSessionByOutputConfigurations
will succeed. Otherwise, it fails with CameraCaptureSession.StateCallback#onConfigureFailed
. </ol>
To enable surface sharing, this function must be called before CameraDevice#createCaptureSessionByOutputConfigurations
or CameraDevice#createReprocessableCaptureSessionByConfigurations
. Calling this function after CameraDevice#createCaptureSessionByOutputConfigurations
has no effect.
Up to #getMaxSharedSurfaceCount
surfaces can be shared for an OutputConfiguration. The supported surfaces for sharing must be of type SurfaceTexture, SurfaceView, MediaRecorder, MediaCodec, or implementation defined ImageReader.
This function must not be called from OutputConfigurations created by #createInstancesForMultiResolutionOutput
.
Java documentation for android.hardware.camera2.params.OutputConfiguration.enableSurfaceSharing()
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.