From 88833299364b924205b7d99932d192473a82df16 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Mon, 22 Jan 2018 15:40:38 -0800 Subject: [PATCH] MediaCodec: expose constant quality mode Also fix a bug where the supported bitcontrol mode bitmask is wrong. bug: 63633199 Change-Id: Ib2c21b0d846bcc31f61027d875f801a2282c1101 --- api/current.txt | 2 ++ media/java/android/media/MediaCodecInfo.java | 5 +++-- media/java/android/media/MediaFormat.java | 2 -- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/api/current.txt b/api/current.txt index 49e46f39e96fa..664d7af264101 100644 --- a/api/current.txt +++ b/api/current.txt @@ -22901,6 +22901,7 @@ package android.media { public static final class MediaCodecInfo.EncoderCapabilities { method public android.util.Range getComplexityRange(); + method public android.util.Range getQualityRange(); method public boolean isBitrateModeSupported(int); field public static final int BITRATE_MODE_CBR = 2; // 0x2 field public static final int BITRATE_MODE_CQ = 0; // 0x0 @@ -23216,6 +23217,7 @@ package android.media { field public static final java.lang.String KEY_PRIORITY = "priority"; field public static final java.lang.String KEY_PROFILE = "profile"; field public static final java.lang.String KEY_PUSH_BLANK_BUFFERS_ON_STOP = "push-blank-buffers-on-shutdown"; + field public static final java.lang.String KEY_QUALITY = "quality"; field public static final java.lang.String KEY_REPEAT_PREVIOUS_FRAME_AFTER = "repeat-previous-frame-after"; field public static final java.lang.String KEY_ROTATION = "rotation-degrees"; field public static final java.lang.String KEY_SAMPLE_RATE = "sample-rate"; diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java index f41e33f7c1026..44d909972e37b 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -2639,7 +2639,8 @@ public final class MediaCodecInfo { /** * Returns the supported range of quality values. * - * @hide + * Quality is implementation-specific. As a general rule, a higher quality + * setting results in a better image quality and a lower compression ratio. */ public Range getQualityRange() { return mQualityRange; @@ -2751,7 +2752,7 @@ public final class MediaCodecInfo { } if (info.containsKey("feature-bitrate-modes")) { for (String mode: info.getString("feature-bitrate-modes").split(",")) { - mBitControl |= parseBitrateMode(mode); + mBitControl |= (1 << parseBitrateMode(mode)); } } diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java index c6496ebba8bfc..e9128e4c827d9 100644 --- a/media/java/android/media/MediaFormat.java +++ b/media/java/android/media/MediaFormat.java @@ -601,8 +601,6 @@ public final class MediaFormat { * codec specific, but lower values generally result in more efficient * (smaller-sized) encoding. * - * @hide - * * @see MediaCodecInfo.EncoderCapabilities#getQualityRange() */ public static final String KEY_QUALITY = "quality";