Skip to content

Most visited

Recently visited

navigation

HardwareBuffer

public final class HardwareBuffer
extends Object implements Parcelable, AutoCloseable

java.lang.Object
   ↳ android.hardware.HardwareBuffer


HardwareBuffer wraps a native AHardwareBuffer object, which is a low-level object representing a memory buffer accessible by various hardware units. HardwareBuffer allows sharing buffers across different application processes. In particular, HardwareBuffers may be mappable to memory accessibly to various hardware systems, such as the GPU, a sensor or context hub, or other auxiliary processing units. For more information, see the NDK documentation for AHardwareBuffer.

Summary

Constants

int BLOB

Format: opaque format used for raw data transfer; must have a height of 1

int RGBA_1010102

Format: 10 bits each red, green, blue, 2 bits alpha

int RGBA_8888

Format: 8 bits each red, green, blue, alpha

int RGBA_FP16

Format: 16 bits each red, green, blue, alpha

int RGBX_8888

Format: 8 bits each red, green, blue, alpha, alpha is always 0xFF

int RGB_565

Format: 5 bits each red and blue, 6 bits green, no alpha

int RGB_888

Format: 8 bits each red, green, blue, no alpha

long USAGE_CPU_READ_OFTEN

Usage: The buffer will often be read by the CPU

long USAGE_CPU_READ_RARELY

Usage: The buffer will sometimes be read by the CPU

long USAGE_CPU_WRITE_OFTEN

Usage: The buffer will often be written to by the CPU

long USAGE_CPU_WRITE_RARELY

Usage: The buffer will sometimes be written to by the CPU

long USAGE_GPU_COLOR_OUTPUT

Usage: The buffer will be written to by the GPU

long USAGE_GPU_DATA_BUFFER

Usage: The buffer will be used as a shader storage or uniform buffer object

long USAGE_GPU_SAMPLED_IMAGE

Usage: The buffer will be read from by the GPU

long USAGE_PROTECTED_CONTENT

Usage: The buffer must not be used outside of a protected hardware path

long USAGE_SENSOR_DIRECT_DATA

Usage: The buffer will be used for sensor direct data

long USAGE_VIDEO_ENCODE

Usage: The buffer will be read by a hardware video encoder

Inherited constants

From interface android.os.Parcelable

Fields

public static final Creator<HardwareBuffer> CREATOR

Public methods

void close()

Destroys this buffer immediately.

static HardwareBuffer create(int width, int height, int format, int layers, long usage)

Creates a new HardwareBuffer instance.

int describeContents()

Describe the kinds of special objects contained in this Parcelable instance's marshaled representation.

int getFormat()

Returns the format of this buffer, one of RGBA_8888, RGBA_FP16, RGBX_8888, RGB_565, RGB_888, RGBA_1010102, BLOB.

int getHeight()

Returns the height of this buffer in pixels.

int getLayers()

Returns the number of layers in this buffer.

long getUsage()

Returns the usage flags of the usage hints set on this buffer.

int getWidth()

Returns the width of this buffer in pixels.

boolean isClosed()

Indicates whether this buffer has been closed.

void writeToParcel(Parcel dest, int flags)

Flatten this object in to a Parcel.

Protected methods

void finalize()

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

Inherited methods

From class java.lang.Object
From interface android.os.Parcelable
From interface java.lang.AutoCloseable

Constants

BLOB

added in API level 26
int BLOB

Format: opaque format used for raw data transfer; must have a height of 1

Constant Value: 33 (0x00000021)

RGBA_1010102

added in API level 26
int RGBA_1010102

Format: 10 bits each red, green, blue, 2 bits alpha

Constant Value: 43 (0x0000002b)

RGBA_8888

added in API level 26
int RGBA_8888

Format: 8 bits each red, green, blue, alpha

Constant Value: 1 (0x00000001)

RGBA_FP16

added in API level 26
int RGBA_FP16

Format: 16 bits each red, green, blue, alpha

Constant Value: 22 (0x00000016)

RGBX_8888

added in API level 26
int RGBX_8888

Format: 8 bits each red, green, blue, alpha, alpha is always 0xFF

Constant Value: 2 (0x00000002)

RGB_565

added in API level 26
int RGB_565

Format: 5 bits each red and blue, 6 bits green, no alpha

Constant Value: 4 (0x00000004)

RGB_888

added in API level 26
int RGB_888

Format: 8 bits each red, green, blue, no alpha

Constant Value: 3 (0x00000003)

USAGE_CPU_READ_OFTEN

added in API level 26
long USAGE_CPU_READ_OFTEN

Usage: The buffer will often be read by the CPU

Constant Value: 3 (0x0000000000000003)

USAGE_CPU_READ_RARELY

added in API level 26
long USAGE_CPU_READ_RARELY

Usage: The buffer will sometimes be read by the CPU

Constant Value: 2 (0x0000000000000002)

USAGE_CPU_WRITE_OFTEN

added in API level 26
long USAGE_CPU_WRITE_OFTEN

Usage: The buffer will often be written to by the CPU

Constant Value: 48 (0x0000000000000030)

USAGE_CPU_WRITE_RARELY

added in API level 26
long USAGE_CPU_WRITE_RARELY

Usage: The buffer will sometimes be written to by the CPU

Constant Value: 32 (0x0000000000000020)

USAGE_GPU_COLOR_OUTPUT

added in API level 26
long USAGE_GPU_COLOR_OUTPUT

Usage: The buffer will be written to by the GPU

Constant Value: 512 (0x0000000000000200)

USAGE_GPU_DATA_BUFFER

added in API level 26
long USAGE_GPU_DATA_BUFFER

Usage: The buffer will be used as a shader storage or uniform buffer object

Constant Value: 16777216 (0x0000000001000000)

USAGE_GPU_SAMPLED_IMAGE

added in API level 26
long USAGE_GPU_SAMPLED_IMAGE

Usage: The buffer will be read from by the GPU

Constant Value: 256 (0x0000000000000100)

USAGE_PROTECTED_CONTENT

added in API level 26
long USAGE_PROTECTED_CONTENT

Usage: The buffer must not be used outside of a protected hardware path

Constant Value: 16384 (0x0000000000004000)

USAGE_SENSOR_DIRECT_DATA

added in API level 26
long USAGE_SENSOR_DIRECT_DATA

Usage: The buffer will be used for sensor direct data

Constant Value: 8388608 (0x0000000000800000)

USAGE_VIDEO_ENCODE

added in API level 26
long USAGE_VIDEO_ENCODE

Usage: The buffer will be read by a hardware video encoder

Constant Value: 65536 (0x0000000000010000)

Fields

CREATOR

added in API level 26
Creator<HardwareBuffer> CREATOR

Public methods

close

added in API level 26
void close ()

Destroys this buffer immediately. Calling this method frees up any underlying native resources. After calling this method, this buffer must not be used in any way.

See also:

create

added in API level 26
HardwareBuffer create (int width, 
                int height, 
                int format, 
                int layers, 
                long usage)

Creates a new HardwareBuffer instance.

Calling this method will throw an IllegalStateException if format is not a supported Format type.

Parameters
width int: The width in pixels of the buffer

height int: The height in pixels of the buffer

format int: The format of each pixel, one of RGBA_8888, RGBA_FP16, RGBX_8888, RGB_565, RGB_888, RGBA_1010102, BLOB

layers int: The number of layers in the buffer

usage long: Flags describing how the buffer will be used, one of USAGE_CPU_READ_RARELY, USAGE_CPU_READ_OFTEN, USAGE_CPU_WRITE_RARELY, USAGE_CPU_WRITE_OFTEN, USAGE_GPU_SAMPLED_IMAGE, USAGE_GPU_COLOR_OUTPUT, USAGE_GPU_DATA_BUFFER, USAGE_PROTECTED_CONTENT, USAGE_SENSOR_DIRECT_DATA, USAGE_VIDEO_ENCODE

Returns
HardwareBuffer A HardwareBuffer instance if successful, or throws an IllegalArgumentException if the dimensions passed are invalid (either zero, negative, or too large to allocate), if the format is not supported, if the requested number of layers is less than one or not supported, or if the passed usage flags are not a supported set.

This value will never be null.

describeContents

added in API level 26
int describeContents ()

Describe the kinds of special objects contained in this Parcelable instance's marshaled representation. For example, if the object will include a file descriptor in the output of writeToParcel(Parcel, int), the return value of this method must include the CONTENTS_FILE_DESCRIPTOR bit.

Returns
int a bitmask indicating the set of special object types marshaled by this Parcelable object instance.

getFormat

added in API level 26
int getFormat ()

Returns the format of this buffer, one of RGBA_8888, RGBA_FP16, RGBX_8888, RGB_565, RGB_888, RGBA_1010102, BLOB.

Returns
int

getHeight

added in API level 26
int getHeight ()

Returns the height of this buffer in pixels.

Returns
int

getLayers

added in API level 26
int getLayers ()

Returns the number of layers in this buffer.

Returns
int

getUsage

added in API level 26
long getUsage ()

Returns the usage flags of the usage hints set on this buffer.

Returns
long

getWidth

added in API level 26
int getWidth ()

Returns the width of this buffer in pixels.

Returns
int

isClosed

added in API level 26
boolean isClosed ()

Indicates whether this buffer has been closed. A closed buffer cannot be used in any way: the buffer cannot be written to a parcel, etc.

Returns
boolean True if this HardwareBuffer is in a closed state, false otherwise.

See also:

writeToParcel

added in API level 26
void writeToParcel (Parcel dest, 
                int flags)

Flatten this object in to a Parcel.

Calling this method will throw an IllegalStateException if close() has been previously called.

Parameters
dest Parcel: The Parcel in which the object should be written.

flags int: Additional flags about how the object should be written. May be 0 or PARCELABLE_WRITE_RETURN_VALUE.

Protected methods

finalize

added in API level 26
void finalize ()

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup.

The general contract of finalize is that it is invoked if and when the Java™ virtual machine has determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, except as a result of an action taken by the finalization of some other object or class which is ready to be finalized. The finalize method may take any action, including making this object available again to other threads; the usual purpose of finalize, however, is to perform cleanup actions before the object is irrevocably discarded. For example, the finalize method for an object that represents an input/output connection might perform explicit I/O transactions to break the connection before the object is permanently discarded.

The finalize method of class Object performs no special action; it simply returns normally. Subclasses of Object may override this definition.

The Java programming language does not guarantee which thread will invoke the finalize method for any given object. It is guaranteed, however, that the thread that invokes finalize will not be holding any user-visible synchronization locks when finalize is invoked. If an uncaught exception is thrown by the finalize method, the exception is ignored and finalization of that object terminates.

After the finalize method has been invoked for an object, no further action is taken until the Java virtual machine has again determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, including possible actions by other objects or classes which are ready to be finalized, at which point the object may be discarded.

The finalize method is never invoked more than once by a Java virtual machine for any given object.

Any exception thrown by the finalize method causes the finalization of this object to be halted, but is otherwise ignored.

Throws
Throwable
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)