diff --git a/api/current.txt b/api/current.txt index 2670279ae917b..591eeb3ffac49 100644 --- a/api/current.txt +++ b/api/current.txt @@ -16805,6 +16805,7 @@ package android.hardware { 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 + field public static final int YCBCR_420_888 = 35; // 0x23 } public final class Sensor { @@ -25205,6 +25206,7 @@ package android.media { method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int); method @Nullable public android.media.Image getOutputImage(int); method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int); + method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; method public void queueSecureInputBuffer(int, int, @NonNull android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException; method public void release(); @@ -25305,17 +25307,7 @@ package android.media { method public void set(int, int); } - public static final class MediaCodec.GraphicBlock { - method protected void finalize(); - method public static boolean isCodecCopyFreeCompatible(@NonNull String[]); - method public boolean isMappable(); - method @NonNull public android.media.Image map(); - method @NonNull public static android.media.MediaCodec.GraphicBlock obtain(int, int, int, long, @NonNull String[]); - method public void recycle(); - } - public class MediaCodec.IncompatibleWithBlockModelException extends java.lang.RuntimeException { - ctor public MediaCodec.IncompatibleWithBlockModelException(); } public static final class MediaCodec.LinearBlock { @@ -25345,12 +25337,12 @@ package android.media { } public static final class MediaCodec.OutputFrame { + method @NonNull public java.util.Set getChangedKeys(); method public int getFlags(); method @NonNull public android.media.MediaFormat getFormat(); - method @Nullable public android.media.MediaCodec.GraphicBlock getGraphicBlock(); + method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer(); method @Nullable public android.media.MediaCodec.LinearBlock getLinearBlock(); method public long getPresentationTimeUs(); - method public void retrieveChangedKeys(@NonNull java.util.Set); } public final class MediaCodec.QueueRequest { @@ -25358,7 +25350,7 @@ package android.media { method @NonNull public android.media.MediaCodec.QueueRequest setByteBufferParameter(@NonNull String, @NonNull java.nio.ByteBuffer); method @NonNull public android.media.MediaCodec.QueueRequest setFlags(int); method @NonNull public android.media.MediaCodec.QueueRequest setFloatParameter(@NonNull String, float); - method @NonNull public android.media.MediaCodec.QueueRequest setGraphicBlock(@NonNull android.media.MediaCodec.GraphicBlock); + method @NonNull public android.media.MediaCodec.QueueRequest setHardwareBuffer(@NonNull android.hardware.HardwareBuffer); method @NonNull public android.media.MediaCodec.QueueRequest setIntegerParameter(@NonNull String, int); method @NonNull public android.media.MediaCodec.QueueRequest setLinearBlock(@NonNull android.media.MediaCodec.LinearBlock, int, int, @Nullable android.media.MediaCodec.CryptoInfo); method @NonNull public android.media.MediaCodec.QueueRequest setLongParameter(@NonNull String, long); diff --git a/core/java/android/hardware/HardwareBuffer.java b/core/java/android/hardware/HardwareBuffer.java index e97a5b9e89ea0..dd3493063e287 100644 --- a/core/java/android/hardware/HardwareBuffer.java +++ b/core/java/android/hardware/HardwareBuffer.java @@ -46,7 +46,7 @@ import java.lang.annotation.RetentionPolicy; public final class HardwareBuffer implements Parcelable, AutoCloseable { /** @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(prefix = { "RGB", "BLOB", "D_", "DS_", "S_" }, value = { + @IntDef(prefix = { "RGB", "BLOB", "YCBCR_", "D_", "DS_", "S_" }, value = { RGBA_8888, RGBA_FP16, RGBA_1010102, @@ -54,6 +54,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { RGB_888, RGB_565, BLOB, + YCBCR_420_888, D_16, D_24, DS_24UI8, @@ -79,6 +80,8 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { public static final int RGBA_1010102 = 0x2b; /** Format: opaque format used for raw data transfer; must have a height of 1 */ public static final int BLOB = 0x21; + /** Format: Planar YCbCr 420; must have an even width and height */ + public static final int YCBCR_420_888 = 0x23; /** Format: 16 bits depth */ public static final int D_16 = 0x30; /** Format: 24 bits depth */ @@ -396,6 +399,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { case RGB_565: case RGB_888: case BLOB: + case YCBCR_420_888: case D_16: case D_24: case DS_24UI8: diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index f800f9ee91c9a..c0461bc598ed2 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -42,7 +42,9 @@ import java.nio.ByteOrder; import java.nio.ReadOnlyBufferException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.BlockingQueue; @@ -1957,7 +1959,7 @@ final public class MediaCodec { /** * If this codec is to be used with {@link LinearBlock} and/or {@link - * GraphicBlock}, pass this flag. + * HardwareBuffer}, pass this flag. *

* When this flag is set, the following APIs throw {@link IncompatibleWithBlockModelException}. *