Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b23d4567 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Definitions for IAMF profiles and MIME

Add IAMF MIME type.
Add IAMF profile constants for the combinations of specified
 codecs (Opus, AAC, FLAC, PCM) and feature sets (simple, base,
 base-enhanced).
Fix MediaCodecInfo.java static import order.

Flag: android.media.audio.iamf_definitions_api
Bug: 337522902
Test: compile
Change-Id: I43a5a168f2110f5e4e243e75d46287c0735498f7
parent 8a7945fa
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -23348,6 +23348,18 @@ package android.media {
    field public static final int HEVCProfileMain10HDR10 = 4096; // 0x1000
    field public static final int HEVCProfileMain10HDR10Plus = 8192; // 0x2000
    field public static final int HEVCProfileMainStill = 4; // 0x4
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseAac = 16908290; // 0x1020002
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseEnhancedAac = 17039362; // 0x1040002
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseEnhancedFlac = 17039364; // 0x1040004
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseEnhancedOpus = 17039361; // 0x1040001
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseEnhancedPcm = 17039368; // 0x1040008
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseFlac = 16908292; // 0x1020004
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBaseOpus = 16908289; // 0x1020001
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileBasePcm = 16908296; // 0x1020008
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileSimpleAac = 16842754; // 0x1010002
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileSimpleFlac = 16842756; // 0x1010004
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileSimpleOpus = 16842753; // 0x1010001
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final int IAMFProfileSimplePcm = 16842760; // 0x1010008
    field public static final int MPEG2LevelH14 = 2; // 0x2
    field public static final int MPEG2LevelHL = 3; // 0x3
    field public static final int MPEG2LevelHP = 4; // 0x4
@@ -24046,6 +24058,7 @@ package android.media {
    field public static final String MIMETYPE_AUDIO_FLAC = "audio/flac";
    field public static final String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw";
    field public static final String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw";
    field @FlaggedApi("android.media.audio.iamf_definitions_api") public static final String MIMETYPE_AUDIO_IAMF = "audio/iamf";
    field public static final String MIMETYPE_AUDIO_IEC61937 = "audio/x-iec61937";
    field public static final String MIMETYPE_AUDIO_MPEG = "audio/mpeg";
    field public static final String MIMETYPE_AUDIO_MPEGH_BL_L3 = "audio/mhm1.03";
+136 −2
Original line number Diff line number Diff line
@@ -16,14 +16,15 @@

package android.media;

import static android.media.Utils.intersectSortedDistinctRanges;
import static android.media.Utils.sortDistinctRanges;
import static android.media.audio.Flags.FLAG_IAMF_DEFINITIONS_API;
import static android.media.codec.Flags.FLAG_DYNAMIC_COLOR_ASPECTS;
import static android.media.codec.Flags.FLAG_HLG_EDITING;
import static android.media.codec.Flags.FLAG_IN_PROCESS_SW_AUDIO_CODEC;
import static android.media.codec.Flags.FLAG_NULL_OUTPUT_SURFACE;
import static android.media.codec.Flags.FLAG_REGION_OF_INTEREST;
import static android.media.codec.Flags.FLAG_APV_SUPPORT;
import static android.media.Utils.intersectSortedDistinctRanges;
import static android.media.Utils.sortDistinctRanges;
import static android.media.MediaCodec.GetFlag;

import android.annotation.FlaggedApi;
@@ -4756,6 +4757,139 @@ public final class MediaCodecInfo {
        @FlaggedApi(FLAG_APV_SUPPORT)
        public static final int APVLevel71Band3 = 0x200008;

        // IAMF profiles are defined as the combination of the (listed from LSB to MSB):
        //  - audio codec (2 bytes)
        //  - profile (1 byte, offset 16)
        //  - specification version (1 byte, offset 24)
        private static final int IAMF_CODEC_OPUS = 0x1;
        private static final int IAMF_CODEC_AAC  = 0x1 << 1;
        private static final int IAMF_CODEC_FLAC = 0x1 << 2;
        private static final int IAMF_CODEC_PCM  = 0x1 << 3;
        private static final int IAMF_PROFILE_SIMPLE        = 0x1 << 16;
        private static final int IAMF_PROFILE_BASE          = 0x1 << 17;
        private static final int IAMF_PROFILE_BASE_ENHANCED = 0x1 << 18;
        private static final int IAMF_v1 = 0x1 << 24;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-simple">simple profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in OPUS.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileSimpleOpus =
                IAMF_v1 + IAMF_PROFILE_SIMPLE + IAMF_CODEC_OPUS;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-simple">simple profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in AAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileSimpleAac =
                IAMF_v1 + IAMF_PROFILE_SIMPLE + IAMF_CODEC_AAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-simple">simple profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in FLAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileSimpleFlac =
                IAMF_v1 + IAMF_PROFILE_SIMPLE + IAMF_CODEC_FLAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-simple">simple profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in PCM.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileSimplePcm =
                IAMF_v1 + IAMF_PROFILE_SIMPLE + IAMF_CODEC_PCM;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base">base profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in OPUS.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseOpus =
                IAMF_v1 + IAMF_PROFILE_BASE + IAMF_CODEC_OPUS;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base">base profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in AAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseAac =
                IAMF_v1 + IAMF_PROFILE_BASE + IAMF_CODEC_AAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base">base profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in FLAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseFlac =
                IAMF_v1 + IAMF_PROFILE_BASE + IAMF_CODEC_FLAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base">base profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in PCM.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBasePcm =
                IAMF_v1 + IAMF_PROFILE_BASE + IAMF_CODEC_PCM;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base-enhanced">base-enhanced profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in OPUS.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseEnhancedOpus =
                IAMF_v1 + IAMF_PROFILE_BASE_ENHANCED + IAMF_CODEC_OPUS;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base-enhanced">base-enhanced profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in AAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseEnhancedAac =
                IAMF_v1 + IAMF_PROFILE_BASE_ENHANCED + IAMF_CODEC_AAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base-enhanced">base-enhanced profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in FLAC.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseEnhancedFlac =
                IAMF_v1 + IAMF_PROFILE_BASE_ENHANCED + IAMF_CODEC_FLAC;
        /**
         * IAMF profile using the
         * <a href="https://aomediacodec.github.io/iamf/#profiles-base-enhanced">base-enhanced profile</a>
         * with audio streams <a href="https://aomediacodec.github.io/iamf/#codec_id">encoded</a>
         * in PCM.
         */
        @SuppressLint("AllUpper")
        @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
        public static final int IAMFProfileBaseEnhancedPcm =
                IAMF_v1 + IAMF_PROFILE_BASE_ENHANCED + IAMF_CODEC_PCM;

        /**
         * The profile of the media content. Depending on the type of media this can be
         * one of the profile values defined in this class.
+7 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.media;


import static android.media.audio.Flags.FLAG_IAMF_DEFINITIONS_API;
import static android.media.codec.Flags.FLAG_IN_PROCESS_SW_AUDIO_CODEC;
import static android.media.codec.Flags.FLAG_NUM_INPUT_SLOTS;
import static android.media.codec.Flags.FLAG_REGION_OF_INTEREST;
@@ -262,6 +264,11 @@ public final class MediaFormat {
     * MIME type for the IEC61937 audio stream encapsulation. This type isn't defined by IANA.
     */
    public static final String MIMETYPE_AUDIO_IEC61937 = "audio/x-iec61937";
    /**
     * MIME type for IAMF audio stream
     */
    @FlaggedApi(FLAG_IAMF_DEFINITIONS_API)
    public static final String MIMETYPE_AUDIO_IAMF = "audio/iamf";

    /**
     * MIME type for HEIF still image data encoded in HEVC.