HardwareBuffer API cleanups am: 8d49e953eb
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2333066 Change-Id: Ia53d6944fd17274d74d2e70fa3b10289aea36e5d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -16888,6 +16888,7 @@ package android.hardware {
|
||||
method public int describeContents();
|
||||
method public int getFormat();
|
||||
method public int getHeight();
|
||||
method public long getId();
|
||||
method public int getLayers();
|
||||
method public long getUsage();
|
||||
method public int getWidth();
|
||||
|
||||
@@ -188,9 +188,6 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
public static HardwareBuffer create(
|
||||
@IntRange(from = 1) int width, @IntRange(from = 1) int height,
|
||||
@Format int format, @IntRange(from = 1) int layers, @Usage long usage) {
|
||||
if (!HardwareBuffer.isSupportedFormat(format)) {
|
||||
throw new IllegalArgumentException("Invalid pixel format " + format);
|
||||
}
|
||||
if (width <= 0) {
|
||||
throw new IllegalArgumentException("Invalid width " + width);
|
||||
}
|
||||
@@ -226,9 +223,6 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
*/
|
||||
public static boolean isSupported(@IntRange(from = 1) int width, @IntRange(from = 1) int height,
|
||||
@Format int format, @IntRange(from = 1) int layers, @Usage long usage) {
|
||||
if (!HardwareBuffer.isSupportedFormat(format)) {
|
||||
throw new IllegalArgumentException("Invalid pixel format " + format);
|
||||
}
|
||||
if (width <= 0) {
|
||||
throw new IllegalArgumentException("Invalid width " + width);
|
||||
}
|
||||
@@ -286,10 +280,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
* Returns the width of this buffer in pixels.
|
||||
*/
|
||||
public int getWidth() {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its width "
|
||||
+ "cannot be obtained.");
|
||||
}
|
||||
checkClosed("width");
|
||||
return nGetWidth(mNativeObject);
|
||||
}
|
||||
|
||||
@@ -297,10 +288,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
* Returns the height of this buffer in pixels.
|
||||
*/
|
||||
public int getHeight() {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its height "
|
||||
+ "cannot be obtained.");
|
||||
}
|
||||
checkClosed("height");
|
||||
return nGetHeight(mNativeObject);
|
||||
}
|
||||
|
||||
@@ -309,10 +297,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
*/
|
||||
@Format
|
||||
public int getFormat() {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its format "
|
||||
+ "cannot be obtained.");
|
||||
}
|
||||
checkClosed("format");
|
||||
return nGetFormat(mNativeObject);
|
||||
}
|
||||
|
||||
@@ -320,10 +305,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
* Returns the number of layers in this buffer.
|
||||
*/
|
||||
public int getLayers() {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its layer "
|
||||
+ "count cannot be obtained.");
|
||||
}
|
||||
checkClosed("layer count");
|
||||
return nGetLayers(mNativeObject);
|
||||
}
|
||||
|
||||
@@ -331,13 +313,26 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
* Returns the usage flags of the usage hints set on this buffer.
|
||||
*/
|
||||
public long getUsage() {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its usage "
|
||||
+ "cannot be obtained.");
|
||||
}
|
||||
checkClosed("usage");
|
||||
return nGetUsage(mNativeObject);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the system-wide unique id for this buffer
|
||||
*
|
||||
*/
|
||||
public long getId() {
|
||||
checkClosed("id");
|
||||
return nGetId(mNativeObject);
|
||||
}
|
||||
|
||||
private void checkClosed(String name) {
|
||||
if (isClosed()) {
|
||||
throw new IllegalStateException("This HardwareBuffer has been closed and its "
|
||||
+ name + " cannot be obtained.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys this buffer immediately. Calling this method frees up any
|
||||
* underlying native resources. After calling this method, this buffer
|
||||
@@ -407,36 +402,6 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates whether a particular format is supported by HardwareBuffer.
|
||||
*
|
||||
* @param format The format to validate.
|
||||
*
|
||||
* @return True if <code>format</code> is a supported format. false otherwise.
|
||||
* See {@link #create(int, int, int, int, long)}.
|
||||
*/
|
||||
private static boolean isSupportedFormat(@Format int format) {
|
||||
switch(format) {
|
||||
case RGBA_8888:
|
||||
case RGBA_FP16:
|
||||
case RGBA_1010102:
|
||||
case RGBX_8888:
|
||||
case RGB_565:
|
||||
case RGB_888:
|
||||
case BLOB:
|
||||
case YCBCR_420_888:
|
||||
case D_16:
|
||||
case D_24:
|
||||
case DS_24UI8:
|
||||
case D_FP32:
|
||||
case DS_FP32UI8:
|
||||
case S_UI8:
|
||||
case YCBCR_P010:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static native long nCreateHardwareBuffer(int width, int height, int format, int layers,
|
||||
long usage);
|
||||
private static native long nCreateFromGraphicBuffer(GraphicBuffer graphicBuffer);
|
||||
@@ -457,4 +422,6 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable {
|
||||
long usage);
|
||||
@CriticalNative
|
||||
private static native long nEstimateSize(long nativeObject);
|
||||
@CriticalNative
|
||||
private static native long nGetId(long nativeObject);
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ static jint android_hardware_HardwareBuffer_getLayers(JNIEnv* env,
|
||||
static jlong android_hardware_HardwareBuffer_getUsage(JNIEnv* env,
|
||||
jobject clazz, jlong nativeObject) {
|
||||
GraphicBuffer* buffer = GraphicBufferWrapper_to_GraphicBuffer(nativeObject);
|
||||
return AHardwareBuffer_convertFromGrallocUsageBits(buffer->getUsage());
|
||||
return static_cast<jlong>(AHardwareBuffer_convertFromGrallocUsageBits(buffer->getUsage()));
|
||||
}
|
||||
|
||||
static jlong android_hardware_HardwareBuffer_estimateSize(jlong nativeObject) {
|
||||
@@ -177,7 +177,12 @@ static jlong android_hardware_HardwareBuffer_estimateSize(jlong nativeObject) {
|
||||
|
||||
const uint32_t bufferStride =
|
||||
buffer->getStride() > 0 ? buffer->getStride() : buffer->getWidth();
|
||||
return static_cast<jlong>(buffer->getHeight() * bufferStride * bpp);
|
||||
return static_cast<jlong>(static_cast<uint64_t>(buffer->getHeight() * bufferStride * bpp));
|
||||
}
|
||||
|
||||
static jlong android_hardware_HardwareBuffer_getId(jlong nativeObject) {
|
||||
GraphicBuffer* buffer = GraphicBufferWrapper_to_GraphicBuffer(nativeObject);
|
||||
return static_cast<jlong>(buffer->getId());
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -223,16 +228,6 @@ AHardwareBuffer* android_hardware_HardwareBuffer_getNativeHardwareBuffer(
|
||||
}
|
||||
}
|
||||
|
||||
GraphicBuffer* android_hardware_HardwareBuffer_getNativeGraphicBuffer(
|
||||
JNIEnv* env, jobject hardwareBufferObj) {
|
||||
if (env->IsInstanceOf(hardwareBufferObj, gHardwareBufferClassInfo.clazz)) {
|
||||
return GraphicBufferWrapper_to_GraphicBuffer(
|
||||
env->GetLongField(hardwareBufferObj, gHardwareBufferClassInfo.mNativeObject));
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
jobject android_hardware_HardwareBuffer_createFromAHardwareBuffer(
|
||||
JNIEnv* env, AHardwareBuffer* hardwareBuffer) {
|
||||
GraphicBuffer* buffer = AHardwareBuffer_to_GraphicBuffer(hardwareBuffer);
|
||||
@@ -295,6 +290,7 @@ static const JNINativeMethod gMethods[] = {
|
||||
|
||||
// --------------- @CriticalNative ----------------------
|
||||
{ "nEstimateSize", "(J)J", (void*) android_hardware_HardwareBuffer_estimateSize },
|
||||
{ "nGetId", "(J)J", (void*) android_hardware_HardwareBuffer_getId },
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
||||
@@ -28,10 +28,6 @@ namespace android {
|
||||
extern AHardwareBuffer* android_hardware_HardwareBuffer_getNativeHardwareBuffer(
|
||||
JNIEnv* env, jobject hardwareBufferObj);
|
||||
|
||||
/* Gets the underlying GraphicBuffer for a HardwareBuffer. */
|
||||
extern GraphicBuffer* android_hardware_HardwareBuffer_getNativeGraphicBuffer(
|
||||
JNIEnv* env, jobject hardwareBufferObj);
|
||||
|
||||
/* Returns a HardwareBuffer wrapper for the underlying AHardwareBuffer. */
|
||||
extern jobject android_hardware_HardwareBuffer_createFromAHardwareBuffer(
|
||||
JNIEnv* env, AHardwareBuffer* hardwareBuffer);
|
||||
|
||||
Reference in New Issue
Block a user