diff --git a/api/current.txt b/api/current.txt index 1bba55b81ba2a..d732472256b00 100644 --- a/api/current.txt +++ b/api/current.txt @@ -14754,18 +14754,16 @@ package android.hardware { field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 - field public static final long USAGE0_CPU_READ = 2L; // 0x2L - field public static final long USAGE0_CPU_READ_OFTEN = 6L; // 0x6L - field public static final long USAGE0_CPU_WRITE = 32L; // 0x20L - field public static final long USAGE0_CPU_WRITE_OFTEN = 96L; // 0x60L - field public static final long USAGE0_GPU_COLOR_OUTPUT = 2048L; // 0x800L - field public static final long USAGE0_GPU_CUBEMAP = 8192L; // 0x2000L - field public static final long USAGE0_GPU_DATA_BUFFER = 16384L; // 0x4000L - field public static final long USAGE0_GPU_SAMPLED_IMAGE = 1024L; // 0x400L - field public static final long USAGE0_GPU_STORAGE_IMAGE = 3072L; // 0xc00L - field public static final long USAGE0_PROTECTED_CONTENT = 262144L; // 0x40000L - field public static final long USAGE0_SENSOR_DIRECT_DATA = 536870912L; // 0x20000000L - field public static final long USAGE0_VIDEO_ENCODE = 2097152L; // 0x200000L + field public static final long USAGE_CPU_READ_OFTEN = 3L; // 0x3L + field public static final long USAGE_CPU_READ_RARELY = 2L; // 0x2L + field public static final long USAGE_CPU_WRITE_OFTEN = 48L; // 0x30L + field public static final long USAGE_CPU_WRITE_RARELY = 32L; // 0x20L + field public static final long USAGE_GPU_COLOR_OUTPUT = 512L; // 0x200L + field public static final long USAGE_GPU_DATA_BUFFER = 16777216L; // 0x1000000L + field public static final long USAGE_GPU_SAMPLED_IMAGE = 256L; // 0x100L + field public static final long USAGE_PROTECTED_CONTENT = 16384L; // 0x4000L + field public static final long USAGE_SENSOR_DIRECT_DATA = 8388608L; // 0x800000L + field public static final long USAGE_VIDEO_ENCODE = 65536L; // 0x10000L } public final class Sensor { diff --git a/api/system-current.txt b/api/system-current.txt index 30a901778c938..f3926dfd18408 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -15532,18 +15532,16 @@ package android.hardware { field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 - field public static final long USAGE0_CPU_READ = 2L; // 0x2L - field public static final long USAGE0_CPU_READ_OFTEN = 6L; // 0x6L - field public static final long USAGE0_CPU_WRITE = 32L; // 0x20L - field public static final long USAGE0_CPU_WRITE_OFTEN = 96L; // 0x60L - field public static final long USAGE0_GPU_COLOR_OUTPUT = 2048L; // 0x800L - field public static final long USAGE0_GPU_CUBEMAP = 8192L; // 0x2000L - field public static final long USAGE0_GPU_DATA_BUFFER = 16384L; // 0x4000L - field public static final long USAGE0_GPU_SAMPLED_IMAGE = 1024L; // 0x400L - field public static final long USAGE0_GPU_STORAGE_IMAGE = 3072L; // 0xc00L - field public static final long USAGE0_PROTECTED_CONTENT = 262144L; // 0x40000L - field public static final long USAGE0_SENSOR_DIRECT_DATA = 536870912L; // 0x20000000L - field public static final long USAGE0_VIDEO_ENCODE = 2097152L; // 0x200000L + field public static final long USAGE_CPU_READ_OFTEN = 3L; // 0x3L + field public static final long USAGE_CPU_READ_RARELY = 2L; // 0x2L + field public static final long USAGE_CPU_WRITE_OFTEN = 48L; // 0x30L + field public static final long USAGE_CPU_WRITE_RARELY = 32L; // 0x20L + field public static final long USAGE_GPU_COLOR_OUTPUT = 512L; // 0x200L + field public static final long USAGE_GPU_DATA_BUFFER = 16777216L; // 0x1000000L + field public static final long USAGE_GPU_SAMPLED_IMAGE = 256L; // 0x100L + field public static final long USAGE_PROTECTED_CONTENT = 16384L; // 0x4000L + field public static final long USAGE_SENSOR_DIRECT_DATA = 8388608L; // 0x800000L + field public static final long USAGE_VIDEO_ENCODE = 65536L; // 0x10000L } public final class Sensor { diff --git a/api/test-current.txt b/api/test-current.txt index 6c1c4d0ab036f..c7a6a2121f7b2 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -14800,18 +14800,16 @@ package android.hardware { field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 - field public static final long USAGE0_CPU_READ = 2L; // 0x2L - field public static final long USAGE0_CPU_READ_OFTEN = 6L; // 0x6L - field public static final long USAGE0_CPU_WRITE = 32L; // 0x20L - field public static final long USAGE0_CPU_WRITE_OFTEN = 96L; // 0x60L - field public static final long USAGE0_GPU_COLOR_OUTPUT = 2048L; // 0x800L - field public static final long USAGE0_GPU_CUBEMAP = 8192L; // 0x2000L - field public static final long USAGE0_GPU_DATA_BUFFER = 16384L; // 0x4000L - field public static final long USAGE0_GPU_SAMPLED_IMAGE = 1024L; // 0x400L - field public static final long USAGE0_GPU_STORAGE_IMAGE = 3072L; // 0xc00L - field public static final long USAGE0_PROTECTED_CONTENT = 262144L; // 0x40000L - field public static final long USAGE0_SENSOR_DIRECT_DATA = 536870912L; // 0x20000000L - field public static final long USAGE0_VIDEO_ENCODE = 2097152L; // 0x200000L + field public static final long USAGE_CPU_READ_OFTEN = 3L; // 0x3L + field public static final long USAGE_CPU_READ_RARELY = 2L; // 0x2L + field public static final long USAGE_CPU_WRITE_OFTEN = 48L; // 0x30L + field public static final long USAGE_CPU_WRITE_RARELY = 32L; // 0x20L + field public static final long USAGE_GPU_COLOR_OUTPUT = 512L; // 0x200L + field public static final long USAGE_GPU_DATA_BUFFER = 16777216L; // 0x1000000L + field public static final long USAGE_GPU_SAMPLED_IMAGE = 256L; // 0x100L + field public static final long USAGE_PROTECTED_CONTENT = 16384L; // 0x4000L + field public static final long USAGE_SENSOR_DIRECT_DATA = 8388608L; // 0x800000L + field public static final long USAGE_VIDEO_ENCODE = 65536L; // 0x10000L } public final class Sensor { diff --git a/core/java/android/hardware/HardwareBuffer.java b/core/java/android/hardware/HardwareBuffer.java index 9d217d3652a0a..7049628b35909 100644 --- a/core/java/android/hardware/HardwareBuffer.java +++ b/core/java/android/hardware/HardwareBuffer.java @@ -70,37 +70,34 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { /** @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(flag = true, value = {USAGE0_CPU_READ, USAGE0_CPU_READ_OFTEN, USAGE0_CPU_WRITE, - USAGE0_CPU_WRITE_OFTEN, USAGE0_GPU_SAMPLED_IMAGE, USAGE0_GPU_COLOR_OUTPUT, - USAGE0_GPU_STORAGE_IMAGE, USAGE0_GPU_CUBEMAP, USAGE0_GPU_DATA_BUFFER, - USAGE0_PROTECTED_CONTENT, USAGE0_SENSOR_DIRECT_DATA, USAGE0_VIDEO_ENCODE}) - public @interface Usage0 {}; + @IntDef(flag = true, value = {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_PROTECTED_CONTENT, USAGE_VIDEO_ENCODE, + USAGE_GPU_DATA_BUFFER, USAGE_SENSOR_DIRECT_DATA}) + public @interface Usage {}; - /** Usage0: the buffer will sometimes be read by the CPU */ - public static final long USAGE0_CPU_READ = (1 << 1); - /** Usage0: the buffer will often be read by the CPU*/ - public static final long USAGE0_CPU_READ_OFTEN = (1 << 2 | USAGE0_CPU_READ); - /** Usage0: the buffer will sometimes be written to by the CPU */ - public static final long USAGE0_CPU_WRITE = (1 << 5); - /** Usage0: the buffer will often be written to by the CPU */ - public static final long USAGE0_CPU_WRITE_OFTEN = (1 << 6 | USAGE0_CPU_WRITE); - /** Usage0: the buffer will be read from by the GPU */ - public static final long USAGE0_GPU_SAMPLED_IMAGE = (1 << 10); - /** Usage0: the buffer will be written to by the GPU */ - public static final long USAGE0_GPU_COLOR_OUTPUT = (1 << 11); - /** Usage0: the buffer will be read from and written to by the GPU */ - public static final long USAGE0_GPU_STORAGE_IMAGE = (USAGE0_GPU_SAMPLED_IMAGE | - USAGE0_GPU_COLOR_OUTPUT); - /** Usage0: the buffer will be used as a cubemap texture */ - public static final long USAGE0_GPU_CUBEMAP = (1 << 13); - /** Usage0: the buffer will be used as a shader storage or uniform buffer object*/ - public static final long USAGE0_GPU_DATA_BUFFER = (1 << 14); - /** Usage0: the buffer must not be used outside of a protected hardware path */ - public static final long USAGE0_PROTECTED_CONTENT = (1 << 18); - /** Usage0: the buffer will be used for sensor direct data */ - public static final long USAGE0_SENSOR_DIRECT_DATA = (1 << 29); - /** Usage0: the buffer will be read by a hardware video encoder */ - public static final long USAGE0_VIDEO_ENCODE = (1 << 21); + /** Usage: The buffer will sometimes be read by the CPU */ + public static final long USAGE_CPU_READ_RARELY = 2; + /** Usage: The buffer will often be read by the CPU */ + public static final long USAGE_CPU_READ_OFTEN = 3; + + /** Usage: The buffer will sometimes be written to by the CPU */ + public static final long USAGE_CPU_WRITE_RARELY = 2 << 4; + /** Usage: The buffer will often be written to by the CPU */ + public static final long USAGE_CPU_WRITE_OFTEN = 3 << 4; + + /** Usage: The buffer will be read from by the GPU */ + public static final long USAGE_GPU_SAMPLED_IMAGE = 1 << 8; + /** Usage: The buffer will be written to by the GPU */ + public static final long USAGE_GPU_COLOR_OUTPUT = 1 << 9; + /** Usage: The buffer must not be used outside of a protected hardware path */ + public static final long USAGE_PROTECTED_CONTENT = 1 << 14; + /** Usage: The buffer will be read by a hardware video encoder */ + public static final long USAGE_VIDEO_ENCODE = 1 << 16; + /** Usage: The buffer will be used for sensor direct data */ + public static final long USAGE_SENSOR_DIRECT_DATA = 1 << 23; + /** Usage: The buffer will be used as a shader storage or uniform buffer object */ + public static final long USAGE_GPU_DATA_BUFFER = 1 << 24; // The approximate size of a native AHardwareBuffer object. private static final long NATIVE_HARDWARE_BUFFER_SIZE = 232; @@ -116,13 +113,11 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { * {@link #RGBX_8888}, {@link #RGB_565}, {@link #RGB_888}, {@link #RGBA_1010102}, {@link #BLOB} * @param layers The number of layers in the buffer * @param usage Flags describing how the buffer will be used, one of - * {@link #USAGE0_CPU_READ}, {@link #USAGE0_CPU_READ_OFTEN}, {@link #USAGE0_CPU_WRITE}, - * {@link #USAGE0_CPU_WRITE_OFTEN}, {@link #USAGE0_GPU_SAMPLED_IMAGE}, - * {@link #USAGE0_GPU_COLOR_OUTPUT},{@link #USAGE0_GPU_STORAGE_IMAGE}, - * {@link #USAGE0_GPU_CUBEMAP}, {@link #USAGE0_GPU_DATA_BUFFER}, - * {@link #USAGE0_PROTECTED_CONTENT}, {@link #USAGE0_SENSOR_DIRECT_DATA}, - * {@link #USAGE0_VIDEO_ENCODE} - * + * {@link #USAGE_CPU_READ_RARELY}, {@link #USAGE_CPU_READ_OFTEN}, + * {@link #USAGE_CPU_WRITE_RARELY}, {@link #USAGE_CPU_WRITE_OFTEN}, + * {@link #USAGE_GPU_SAMPLED_IMAGE}, {@link #USAGE_GPU_COLOR_OUTPUT}, + * {@link #USAGE_GPU_DATA_BUFFER}, {@link #USAGE_PROTECTED_CONTENT}, + * {@link #USAGE_SENSOR_DIRECT_DATA}, {@link #USAGE_VIDEO_ENCODE} * @return 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 @@ -130,7 +125,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { */ @NonNull public static HardwareBuffer create(int width, int height, @Format int format, int layers, - @Usage0 long usage) { + @Usage long usage) { if (!HardwareBuffer.isSupportedFormat(format)) { throw new IllegalArgumentException("Invalid pixel format " + format); } diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 80cbde75efd2b..0dab5d7b14532 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -589,9 +589,9 @@ public class SystemSensorManager extends SensorManager { "Width if HaradwareBuffer must be greater than " + MIN_DIRECT_CHANNEL_BUFFER_SIZE); } - if ((hardwareBuffer.getUsage() & HardwareBuffer.USAGE0_SENSOR_DIRECT_DATA) == 0) { + if ((hardwareBuffer.getUsage() & HardwareBuffer.USAGE_SENSOR_DIRECT_DATA) == 0) { throw new IllegalArgumentException( - "HardwareBuffer must set usage flag USAGE0_SENSOR_DIRECT_DATA"); + "HardwareBuffer must set usage flag USAGE_SENSOR_DIRECT_DATA"); } size = hardwareBuffer.getWidth(); id = nativeCreateDirectChannel( diff --git a/core/jni/android_hardware_HardwareBuffer.cpp b/core/jni/android_hardware_HardwareBuffer.cpp index 4b31c91c708c4..ba23450836610 100644 --- a/core/jni/android_hardware_HardwareBuffer.cpp +++ b/core/jni/android_hardware_HardwareBuffer.cpp @@ -80,14 +80,10 @@ static jlong android_hardware_HardwareBuffer_create(JNIEnv* env, jobject clazz, } return NULL; } - uint64_t producerUsage = 0; - uint64_t consumerUsage = 0; - android_hardware_HardwareBuffer_convertToGrallocUsageBits( - &producerUsage, &consumerUsage, usage, 0); + uint64_t grallocUsage = AHardwareBuffer_convertToGrallocUsageBits(usage); sp buffer = new GraphicBuffer(width, height, pixelFormat, layers, - android_convertGralloc1To0Usage(producerUsage, consumerUsage), - std::string("HardwareBuffer pid [") + std::to_string(getpid()) +"]"); + grallocUsage, std::string("HardwareBuffer pid [") + std::to_string(getpid()) +"]"); status_t error = buffer->initCheck(); if (error < 0) { if (kDebugGraphicBuffer) { @@ -145,11 +141,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); - uint64_t usage0 = 0; - uint64_t usage1 = 0; - android_hardware_HardwareBuffer_convertFromGrallocUsageBits(&usage0, &usage1, - buffer->getUsage(), buffer->getUsage()); - return usage0; + return AHardwareBuffer_convertFromGrallocUsageBits(buffer->getUsage()); } // ---------------------------------------------------------------------------- @@ -221,14 +213,8 @@ uint32_t android_hardware_HardwareBuffer_convertToPixelFormat(uint32_t format) { return AHardwareBuffer_convertToPixelFormat(format); } -void android_hardware_HardwareBuffer_convertToGrallocUsageBits(uint64_t* outProducerUsage, - uint64_t* outConsumerUsage, uint64_t usage0, uint64_t usage1) { - AHardwareBuffer_convertToGrallocUsageBits(outProducerUsage, outConsumerUsage, usage0, usage1); -} - -void android_hardware_HardwareBuffer_convertFromGrallocUsageBits(uint64_t* outUsage0, - uint64_t* outUsage1, uint64_t producerUsage, uint64_t consumerUsage) { - AHardwareBuffer_convertFromGrallocUsageBits(outUsage0, outUsage1, producerUsage, consumerUsage); +uint64_t android_hardware_HardwareBuffer_convertToGrallocUsageBits(uint64_t usage) { + return AHardwareBuffer_convertToGrallocUsageBits(usage); } } // namespace android diff --git a/core/jni/include/android_runtime/android_hardware_HardwareBuffer.h b/core/jni/include/android_runtime/android_hardware_HardwareBuffer.h index 3545c565fb12b..c452b74c802bc 100644 --- a/core/jni/include/android_runtime/android_hardware_HardwareBuffer.h +++ b/core/jni/include/android_runtime/android_hardware_HardwareBuffer.h @@ -32,22 +32,19 @@ extern jobject android_hardware_HardwareBuffer_createFromAHardwareBuffer( JNIEnv* env, AHardwareBuffer* hardwareBuffer); /* Convert from HAL_PIXEL_FORMAT values to AHARDWAREBUFFER_FORMAT values. */ -extern uint32_t android_hardware_HardwareBuffer_convertFromPixelFormat( - uint32_t format); +extern uint32_t android_hardware_HardwareBuffer_convertFromPixelFormat(uint32_t format); /* Convert from AHARDWAREBUFFER_FORMAT values to HAL_PIXEL_FORMAT values. */ -extern uint32_t android_hardware_HardwareBuffer_convertToPixelFormat( - uint32_t format); +extern uint32_t android_hardware_HardwareBuffer_convertToPixelFormat(uint32_t format); /* Convert from AHARDWAREBUFFER_USAGE* flags to to gralloc usage flags. */ -extern void android_hardware_HardwareBuffer_convertToGrallocUsageBits( - uint64_t* outProducerUsage, uint64_t* outConsumerUsage, uint64_t usage0, - uint64_t usage1); +extern uint64_t android_hardware_HardwareBuffer_convertToGrallocUsageBits(uint64_t usage); -/* Convert from gralloc usage flags to to AHARDWAREBUFFER_USAGE0* flags. */ -extern void android_hardware_HardwareBuffer_convertFromGrallocUsageBits( - uint64_t* outUsage0, uint64_t* outUsage1, uint64_t producerUsage, - uint64_t consumerUsage); +inline void android_hardware_HardwareBuffer_convertToGrallocUsageBits( + uint64_t* outProducerUsage, uint64_t* outConsumerUsage, uint64_t usage, uint64_t) { + outProducerUsage[0] = outConsumerUsage[0] = + android_hardware_HardwareBuffer_convertToGrallocUsageBits(usage); +} } // namespace android diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java index 06555c1fa90b6..ccdf5ae7fbf58 100644 --- a/media/java/android/media/ImageReader.java +++ b/media/java/android/media/ImageReader.java @@ -728,15 +728,15 @@ public class ImageReader implements AutoCloseable { if (format == ImageFormat.PRIVATE) { // Usage need to be either USAGE0_GPU_SAMPLED_IMAGE or USAGE0_VIDEO_ENCODE or combined. - boolean isAllowed = (usage == HardwareBuffer.USAGE0_GPU_SAMPLED_IMAGE); - isAllowed = isAllowed || (usage == HardwareBuffer.USAGE0_VIDEO_ENCODE); + boolean isAllowed = (usage == HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE); + isAllowed = isAllowed || (usage == HardwareBuffer.USAGE_VIDEO_ENCODE); isAllowed = isAllowed || (usage == - (HardwareBuffer.USAGE0_VIDEO_ENCODE | HardwareBuffer.USAGE0_GPU_SAMPLED_IMAGE)); + (HardwareBuffer.USAGE_VIDEO_ENCODE | HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE)); return isAllowed; } else { // Usage need to make the buffer CPU readable for explicit format. - return ((usage == HardwareBuffer.USAGE0_CPU_READ) || - (usage == HardwareBuffer.USAGE0_CPU_READ_OFTEN)); + return ((usage == HardwareBuffer.USAGE_CPU_READ_RARELY) || + (usage == HardwareBuffer.USAGE_CPU_READ_OFTEN)); } }