camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionOpener.java
/**
     * Get the surface from the DeferrableSurfaces.
     *
     * <p>The {@link #startWithDeferrableSurface} method will return a Surface list that
     * is held in the List<DeferrableSurface>. The Opener helps in maintaining the timing to
     * close the returned DeferrableSurface list. Most use case should attempt to use the
     * {@link #startWithDeferrableSurface} method to get the Surface for creating the
     * SynchronizedCaptureSession.
     *
     * @param deferrableSurfaces The deferrable surfaces to open.
     * @param timeout            the timeout to get surfaces from the deferrable surface list.
     * @return the Future which will contain the surface list, Cancellation of this
     * future is a no-op. The returned Surface list can be used to create the
     * SynchronizedCaptureSession.
     * @see #openCaptureSession
     * @see #stop
     */
Get the surface from the DeferrableSurfaces.
The  #startWithDeferrableSurface method will return a Surface list that
is held in the List. The Opener helps in maintaining the timing to
close the returned DeferrableSurface list. Most use case should attempt to use the
#startWithDeferrableSurface method to get the Surface for creating the
SynchronizedCaptureSession.

@param deferrableSurfaces The deferrable surfaces to open.
@param timeout            the timeout to get surfaces from the deferrable surface list.
@return the Future which will contain the surface list, Cancellation of this
future is a no-op. The returned Surface list can be used to create the
SynchronizedCaptureSession.
@see #openCaptureSession
@see #stop
Get the surface from the DeferrableSurfaces . The #startWithDeferrableSurface method will return a Surface list that is held in the List . The Opener helps in maintaining the timing to close the returned DeferrableSurface list . Most use case should attempt to use the #startWithDeferrableSurface method to get the Surface for creating the SynchronizedCaptureSession . @param deferrableSurfaces The deferrable surfaces to open . @param timeout the timeout to get surfaces from the deferrable surface list . @return the Future which will contain the surface list Cancellation of this future is a no - op . The returned Surface list can be used to create the SynchronizedCaptureSession . @see #openCaptureSession @see #stop
@NonNull
    ListenableFuture<List<Surface>> startWithDeferrableSurface(
            @NonNull List<DeferrableSurface> deferrableSurfaces, long timeout) {
        return mImpl.startWithDeferrableSurface(deferrableSurfaces, timeout);
    }
@ NonNull ListenableFuture < List < Surface > > startWithDeferrableSurface ( @ NonNull List < DeferrableSurface > deferrableSurfaces , long timeout ) { return mImpl . startWithDeferrableSurface ( deferrableSurfaces , timeout ) ; }
Get the surface from the DeferrableSurfaces.
Get the surface from the DeferrableSurfaces .