public static abstract class SurfaceRequest.TransformationInfo
extends Object


Transformation associated the preview output.

The SurfaceRequest.TransformationInfo can be used transform the Surface provided via SurfaceRequest.provideSurface(Surface, Executor, Consumer). The info is based on the camera sensor rotation, preview target rotation and the ViewPort associated with the Preview. The application of the info depends on the source of the Surface. For detailed example, please check out the source code of PreviewView in artifact.

The info is also needed to transform coordinates across use cases. In a face detection example, one common scenario is running a face detection algorithm against a ImageAnalysis use case, and highlight the detected face in the preview. Below is a code sample to get the transformation Matrix based on the ImageProxy from ImageAnalysis and the SurfaceRequest.TransformationInfo from Preview:

     // Get rotation transformation.
     val transformation = Matrix()

     // Get rotated crop rect and cropping transformation.
     val rotatedRect = new RectF()
     rotation.mapRect(rotatedRect, RectF(imageProxy.getCropRect()))
     val cropTransformation = Matrix()
          RectF(imageProxy.getCropRect()), rotatedRect, ScaleToFit.FILL)

     // Concatenate the rotation and cropping transformations.


Public methods

abstract Rect getCropRect()

Returns the crop rect rectangle.

abstract int getRotationDegrees()

Returns the rotation needed to transform the output from sensor to the target rotation.

Inherited methods

Public methods


public abstract Rect getCropRect ()

Returns the crop rect rectangle.

The returned value dictates how the Surface provided in SurfaceRequest.provideSurface(Surface, Executor, Consumer) should be displayed. The crop rectangle specifies the region of valid pixels in the buffer, using coordinates from (0, 0) to the (width, height) of SurfaceRequest.getResolution(). The caller should arrange the UI so that only the valid region is visible to app users.

If Preview is configured with a ViewPort, this value is calculated based on the configuration of ViewPort; if not, it returns the full rect of the buffer. For code sample on how to apply the crop rect, please see ViewPort.FIT.


See also:


public abstract int getRotationDegrees ()

Returns the rotation needed to transform the output from sensor to the target rotation.

This is a clockwise rotation in degrees that needs to be applied to the sensor buffer. The rotation will be determined by CameraCharacteristics, Preview.setTargetRotation(int) and Preview.Builder.setTargetRotation(int). This value is useful for transforming coordinates across use cases.

This value is most useful for transforming coordinates across use cases, e.g. in preview, highlighting a pattern detected in image analysis. For correcting the preview itself, usually the source of the Surface handles the rotation without needing this value. For SurfaceView, it automatically corrects the preview to match the display rotation. For TextureView, the only additional rotation needed is the display rotation. For detailed example, please check out the source code of PreviewView in .view artifact.

int The rotation in degrees which will be a value in {0, 90, 180, 270}.