diff options
| -rw-r--r-- | api/current.txt | 2 | ||||
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | api/test-current.txt | 2 | ||||
| -rw-r--r-- | media/java/android/media/MediaCodecInfo.java | 11 | ||||
| -rw-r--r-- | media/java/android/media/MediaFormat.java | 17 |
5 files changed, 32 insertions, 2 deletions
diff --git a/api/current.txt b/api/current.txt index 35f724e91b8e..a10c510bd463 100644 --- a/api/current.txt +++ b/api/current.txt @@ -20083,6 +20083,7 @@ package android.media { field public static final deprecated int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00 field public static final deprecated int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100 field public static final java.lang.String FEATURE_AdaptivePlayback = "adaptive-playback"; + field public static final java.lang.String FEATURE_IntraRefresh = "intra-refresh"; field public static final java.lang.String FEATURE_SecurePlayback = "secure-playback"; field public static final java.lang.String FEATURE_TunneledPlayback = "tunneled-playback"; field public int[] colorFormats; @@ -20471,6 +20472,7 @@ package android.media { field public static final java.lang.String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level"; field public static final java.lang.String KEY_FRAME_RATE = "frame-rate"; field public static final java.lang.String KEY_HEIGHT = "height"; + field public static final java.lang.String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period"; field public static final java.lang.String KEY_IS_ADTS = "is-adts"; field public static final java.lang.String KEY_IS_AUTOSELECT = "is-autoselect"; field public static final java.lang.String KEY_IS_DEFAULT = "is-default"; diff --git a/api/system-current.txt b/api/system-current.txt index c9e6880a305f..8e247ade27d8 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -21433,6 +21433,7 @@ package android.media { field public static final deprecated int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00 field public static final deprecated int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100 field public static final java.lang.String FEATURE_AdaptivePlayback = "adaptive-playback"; + field public static final java.lang.String FEATURE_IntraRefresh = "intra-refresh"; field public static final java.lang.String FEATURE_SecurePlayback = "secure-playback"; field public static final java.lang.String FEATURE_TunneledPlayback = "tunneled-playback"; field public int[] colorFormats; @@ -21821,6 +21822,7 @@ package android.media { field public static final java.lang.String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level"; field public static final java.lang.String KEY_FRAME_RATE = "frame-rate"; field public static final java.lang.String KEY_HEIGHT = "height"; + field public static final java.lang.String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period"; field public static final java.lang.String KEY_IS_ADTS = "is-adts"; field public static final java.lang.String KEY_IS_AUTOSELECT = "is-autoselect"; field public static final java.lang.String KEY_IS_DEFAULT = "is-default"; diff --git a/api/test-current.txt b/api/test-current.txt index 66ee426de9dc..25b72c012f16 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -20091,6 +20091,7 @@ package android.media { field public static final deprecated int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00 field public static final deprecated int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100 field public static final java.lang.String FEATURE_AdaptivePlayback = "adaptive-playback"; + field public static final java.lang.String FEATURE_IntraRefresh = "intra-refresh"; field public static final java.lang.String FEATURE_SecurePlayback = "secure-playback"; field public static final java.lang.String FEATURE_TunneledPlayback = "tunneled-playback"; field public int[] colorFormats; @@ -20479,6 +20480,7 @@ package android.media { field public static final java.lang.String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level"; field public static final java.lang.String KEY_FRAME_RATE = "frame-rate"; field public static final java.lang.String KEY_HEIGHT = "height"; + field public static final java.lang.String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period"; field public static final java.lang.String KEY_IS_ADTS = "is-adts"; field public static final java.lang.String KEY_IS_AUTOSELECT = "is-autoselect"; field public static final java.lang.String KEY_IS_DEFAULT = "is-default"; diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java index f3baa5e8513b..331fde136599 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -460,6 +460,11 @@ public final class MediaCodecInfo { public static final String FEATURE_TunneledPlayback = "tunneled-playback"; /** + * <b>video encoder only</b>: codec supports intra refresh. + */ + public static final String FEATURE_IntraRefresh = "intra-refresh"; + + /** * Query codec feature capabilities. * <p> * These features are supported to be used by the codec. These @@ -486,6 +491,10 @@ public final class MediaCodecInfo { new Feature(FEATURE_TunneledPlayback, (1 << 2), false), }; + private static final Feature[] encoderFeatures = { + new Feature(FEATURE_IntraRefresh, (1 << 0), false), + }; + /** @hide */ public String[] validFeatures() { Feature[] features = getValidFeatures(); @@ -500,7 +509,7 @@ public final class MediaCodecInfo { if (!isEncoder()) { return decoderFeatures; } - return new Feature[] {}; + return encoderFeatures; } private boolean checkFeature(String name, int flags) { diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java index abdf220dc573..930d8b89610e 100644 --- a/media/java/android/media/MediaFormat.java +++ b/media/java/android/media/MediaFormat.java @@ -44,7 +44,8 @@ import java.util.Map; * for encoders, readable in the output format of decoders</b></td></tr> * <tr><td>{@link #KEY_FRAME_RATE}</td><td>Integer or Float</td><td><b>encoder-only</b></td></tr> * <tr><td>{@link #KEY_CAPTURE_RATE}</td><td>Integer</td><td></td></tr> -* <tr><td>{@link #KEY_I_FRAME_INTERVAL}</td><td>Integer</td><td><b>encoder-only</b></td></tr> + * <tr><td>{@link #KEY_I_FRAME_INTERVAL}</td><td>Integer</td><td><b>encoder-only</b></td></tr> + * <tr><td>{@link #KEY_INTRA_REFRESH_PERIOD}</td><td>Integer</td><td><b>encoder-only</b>, optional</td></tr> * <tr><td>{@link #KEY_MAX_WIDTH}</td><td>Integer</td><td><b>decoder-only</b>, optional, max-resolution width</td></tr> * <tr><td>{@link #KEY_MAX_HEIGHT}</td><td>Integer</td><td><b>decoder-only</b>, optional, max-resolution height</td></tr> * <tr><td>{@link #KEY_REPEAT_PREVIOUS_FRAME_AFTER}</td><td>Long</td><td><b>video encoder in surface-mode only</b></td></tr> @@ -218,6 +219,20 @@ public final class MediaFormat { public static final String KEY_I_FRAME_INTERVAL = "i-frame-interval"; /** + * An optional key describing the period of intra refresh in frames. This is an + * optional parameter that applies only to video encoders. If encoder supports it + * ({@link MediaCodecInfo.CodecCapabilities#FEATURE_IntraRefresh}), the whole + * frame is completely refreshed after the specified period. Also for each frame, + * a fix subset of macroblocks must be intra coded which leads to more constant bitrate + * than inserting a key frame. This key is recommended for video streaming applications + * as it provides low-delay and good error-resilience. This key is ignored if the + * video encoder does not support the intra refresh feature. Use the output format to + * verify that this feature was enabled. + * The associated value is an integer. + */ + public static final String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period"; + + /** * A key describing the temporal layering schema. This is an optional parameter * that applies only to video encoders. Use {@link MediaCodec#getInputFormat} * after {@link MediaCodec#configure configure} to query if the encoder supports |