# FakeImagePlane

Artifact: [androidx.camera:camera-common-testing](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/common/testing/FakeImagePlane.kt+class:androidx.camera.common.testing.FakeImagePlane) Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

*** ** * ** ***


```
public final class FakeImagePlane implements ImagePlane
```

<br />

*** ** * ** ***

Fake implementation of `https://developer.android.com/reference/androidx/camera/common/ImagePlane` for testing classes that consume camera image planes.

This class provides lazy buffer allocation and multiple construction paradigms to support both standalone dimension-based allocation and slicing from a shared contiguous parent buffer.

## Usage Examples

### 1. Standalone Allocation by Dimensions

Allocates a direct `https://developer.android.com/reference/java/nio/ByteBuffer.html` of size `rowStride * rowCount` when accessed.

```
val plane = FakeImagePlane(rowStride = 640, rowCount = 480)
assertThat(plane.buffer.capacity()).isEqualTo(640 * 480)
```

### 2. Custom Strides and Sub-sampling

Useful for mocking interleaved UV planes where pixel stride is 2.

```
val uvPlane = FakeImagePlane(rowStride = 640, rowCount = 240, pixelStride = 2)
```

### 3. Backing by an Existing Buffer Slice

Avoids extra allocations by wrapping an existing buffer window (e.g. from a contiguous NV12 buffer). Ensure the slice maintains native byte ordering (`order(ByteOrder.nativeOrder())`).

```
val slice = parentBuffer.slice().order(ByteOrder.nativeOrder())
val plane = FakeImagePlane(rowStride = 640, pixelStride = 1, buffer = slice)
assertThat(plane.buffer).isSameInstanceAs(slice)
```

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#FakeImagePlane(kotlin.Int,kotlin.Int,kotlin.Int,java.nio.ByteBuffer)( int rowStride, int rowCount, int pixelStride, https://developer.android.com/reference/java/nio/ByteBuffer.html buffer )` |

| ### Public methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/nio/ByteBuffer.html` | `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#getBuffer()()` A `https://developer.android.com/reference/java/nio/ByteBuffer.html` containing the image data for this plane. |
| `int` | `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#getPixelStride()()` The distance between adjacent pixel samples in bytes. |
| `int` | `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#getRowStride()()` The row stride of the plane in bytes. |
| `T` | `<T extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#unwrapAs(java.lang.Class)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> type)` Unwraps this fake image plane to its underlying implementation types. |

## Public constructors

### FakeImagePlane

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
public FakeImagePlane(
    int rowStride,
    int rowCount,
    int pixelStride,
    ByteBuffer buffer
)
```

| Parameters |
|---|---|
| `int rowStride` | The row stride of the plane in bytes. |
| `int rowCount` | The height of the plane in rows. Used for lazy buffer allocation if `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#(kotlin.Int,kotlin.Int,kotlin.Int,java.nio.ByteBuffer)` is null. Defaults to 1 (convenient for single-row compressed formats like JPEG). |
| `int pixelStride` | The distance between adjacent pixel samples in bytes. Defaults to 1. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | An optional pre-allocated `https://developer.android.com/reference/java/nio/ByteBuffer.html` to back this plane. If null, a direct `https://developer.android.com/reference/java/nio/ByteBuffer.html` of size `rowStride * rowCount` is allocated lazily using `https://developer.android.com/reference/androidx/camera/common/testing/FakeByteBuffers#allocateNative(kotlin.Int)` upon first access. |

## Public methods

### getBuffer

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
public @NonNull ByteBuffer getBuffer()
```

A `https://developer.android.com/reference/java/nio/ByteBuffer.html` containing the image data for this plane.

If a custom `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#buffer()` was passed to the constructor, it is returned directly. Otherwise, a direct `https://developer.android.com/reference/java/nio/ByteBuffer.html` with native byte order and capacity equal to `rowStride * rowCount` is allocated lazily upon first access.

### getPixelStride

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
public int getPixelStride()
```

The distance between adjacent pixel samples in bytes. Defaults to 1.

### getRowStride

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
public int getRowStride()
```

The row stride of the plane in bytes.

### unwrapAs

Added in [1.7.0-rc02](https://developer.android.com/jetpack/androidx/releases/camera#1.7.0-rc02)

```
public T <T extends Object> unwrapAs(@NonNull Class<@NonNull T> type)
```

Unwraps this fake image plane to its underlying implementation types.

This implementation supports unwrapping to:

- `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane` (returns `this`)

- `https://developer.android.com/reference/java/nio/ByteBuffer.html` (returns the backing `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#buffer()`)

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> type` | The class representing the type to unwrap to. |

| Returns |
|---|---|
| `T` | The unwrapped object instance of type `https://developer.android.com/reference/androidx/camera/common/testing/FakeImagePlane#unwrapAs(java.lang.Class)`, or `null` if the requested type is not supported. |