mirror of
https://github.com/samsonjs/media.git
synced 2026-04-12 12:25:47 +00:00
Move max encoded audio rates to format utils
PiperOrigin-RevId: 298290511
This commit is contained in:
parent
2ca363316c
commit
0b946ac317
6 changed files with 59 additions and 19 deletions
|
|
@ -61,6 +61,28 @@ public final class AacUtil {
|
|||
*/
|
||||
public static final int AAC_LD_AUDIO_SAMPLE_COUNT = 512;
|
||||
|
||||
// Maximum bitrates for AAC profiles from the Fraunhofer FDK AAC encoder documentation:
|
||||
// https://cs.android.com/android/platform/superproject/+/android-9.0.0_r8:external/aac/libAACenc/include/aacenc_lib.h;l=718
|
||||
/** Maximum rate for an AAC LC audio stream, in bytes per second. */
|
||||
public static final int AAC_LC_MAX_RATE_BYTES_PER_SECOND = 800 * 1000 / 8;
|
||||
/** Maximum rate for an AAC HE V1 audio stream, in bytes per second. */
|
||||
public static final int AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND = 128 * 1000 / 8;
|
||||
/** Maximum rate for an AAC HE V2 audio stream, in bytes per second. */
|
||||
public static final int AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND = 56 * 1000 / 8;
|
||||
/**
|
||||
* Maximum rate for an AAC XHE audio stream, in bytes per second.
|
||||
*
|
||||
* <p>Fraunhofer documentation says "500 kbit/s and above" for stereo, so we use a rate generously
|
||||
* above the 500 kbit/s level.
|
||||
*/
|
||||
public static final int AAC_XHE_MAX_RATE_BYTES_PER_SECOND = 2048 * 1000 / 8;
|
||||
/**
|
||||
* Maximum rate for an AAC ELD audio stream, in bytes per second.
|
||||
*
|
||||
* <p>Fraunhofer documentation shows AAC-ELD as useful for up to ~ 64 kbit/s so we use this value.
|
||||
*/
|
||||
public static final int AAC_ELD_MAX_RATE_BYTES_PER_SECOND = 64 * 1000 / 8;
|
||||
|
||||
private static final int AUDIO_SPECIFIC_CONFIG_FREQUENCY_INDEX_ARBITRARY = 0xF;
|
||||
private static final int[] AUDIO_SPECIFIC_CONFIG_SAMPLING_RATE_TABLE =
|
||||
new int[] {
|
||||
|
|
|
|||
|
|
@ -99,6 +99,13 @@ public final class Ac3Util {
|
|||
|
||||
}
|
||||
|
||||
/** Maximum rate for an AC-3 audio stream, in bytes per second. */
|
||||
public static final int AC3_MAX_RATE_BYTES_PER_SECOND = 640 * 1000 / 8;
|
||||
/** Maximum rate for an E-AC-3 audio stream, in bytes per second. */
|
||||
public static final int E_AC3_MAX_RATE_BYTES_PER_SECOND = 6144 * 1000 / 8;
|
||||
/** Maximum rate for a TrueHD audio stream, in bytes per second. */
|
||||
public static final int TRUEHD_MAX_RATE_BYTES_PER_SECOND = 24500 * 1000 / 8;
|
||||
|
||||
/**
|
||||
* The number of samples to store in each output chunk when rechunking TrueHD streams. The number
|
||||
* of samples extracted from the container corresponding to one syncframe must be an integer
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@ public final class Ac4Util {
|
|||
public static final int AC40_SYNCWORD = 0xAC40;
|
||||
public static final int AC41_SYNCWORD = 0xAC41;
|
||||
|
||||
/** Maximum rate for an AC-4 audio stream, in bytes per second. */
|
||||
public static final int MAX_RATE_BYTES_PER_SECOND = 2688 * 1000 / 8;
|
||||
|
||||
/** The channel count of AC-4 stream. */
|
||||
// TODO: Parse AC-4 stream channel count.
|
||||
private static final int CHANNEL_COUNT_2 = 2;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,15 @@ import java.util.Arrays;
|
|||
*/
|
||||
public final class DtsUtil {
|
||||
|
||||
/**
|
||||
* Maximum rate for a DTS audio stream, in bytes per second.
|
||||
*
|
||||
* <p>DTS allows an 'open' bitrate, but we assume the maximum listed value: 1536 kbit/s.
|
||||
*/
|
||||
public static final int DTS_MAX_RATE_BYTES_PER_SECOND = 1536 * 1000 / 8;
|
||||
/** Maximum rate for a DTS-HD audio stream, in bytes per second. */
|
||||
public static final int DTS_HD_MAX_RATE_BYTES_PER_SECOND = 18000 * 1000 / 8;
|
||||
|
||||
private static final int SYNC_VALUE_BE = 0x7FFE8001;
|
||||
private static final int SYNC_VALUE_14B_BE = 0x1FFFE800;
|
||||
private static final int SYNC_VALUE_LE = 0xFE7F0180;
|
||||
|
|
|
|||
|
|
@ -209,6 +209,12 @@ public final class MpegAudioUtil {
|
|||
*/
|
||||
public static final int MAX_FRAME_SIZE_BYTES = 4096;
|
||||
|
||||
/**
|
||||
* Maximum rate for an MPEG audio stream corresponding to MPEG-1 layer III (320 kbit/s), in bytes
|
||||
* per second.
|
||||
*/
|
||||
public static final int MAX_RATE_BYTES_PER_SECOND = 320 * 1000 / 8;
|
||||
|
||||
private static final String[] MIME_TYPE_BY_LAYER =
|
||||
new String[] {MimeTypes.AUDIO_MPEG_L1, MimeTypes.AUDIO_MPEG_L2, MimeTypes.AUDIO_MPEG};
|
||||
private static final int[] SAMPLING_RATE_V1 = {44100, 48000, 32000};
|
||||
|
|
|
|||
|
|
@ -1208,37 +1208,30 @@ public final class DefaultAudioSink implements AudioSink {
|
|||
private static int getMaximumEncodedRateBytesPerSecond(@C.Encoding int encoding) {
|
||||
switch (encoding) {
|
||||
case C.ENCODING_MP3:
|
||||
// Maximum bitrate for MPEG-1 layer III: 320 kbit/s.
|
||||
return 320 * 1000 / 8;
|
||||
return MpegAudioUtil.MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AAC_LC:
|
||||
// Maximum bitrates for AAC profiles from the Fraunhofer FDK AAC encoder documentation:
|
||||
// https://cs.android.com/android/platform/superproject/+/android-9.0.0_r8:external/aac/libAACenc/include/aacenc_lib.h;l=718
|
||||
return 800 * 1000 / 8;
|
||||
return AacUtil.AAC_LC_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AAC_HE_V1:
|
||||
return 128 * 1000 / 8;
|
||||
return AacUtil.AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AAC_HE_V2:
|
||||
return 56 * 1000 / 8;
|
||||
return AacUtil.AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AAC_XHE:
|
||||
// Fraunhofer documentation says "500 kbit/s and above" for stereo, so we use a rate
|
||||
// generously above the 500 kbit/s level.
|
||||
return 2048 * 1000 / 8;
|
||||
return AacUtil.AAC_XHE_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AAC_ELD:
|
||||
// Fraunhofer documentation shows AAC-ELD as useful for up to ~ 64 kbit/s.
|
||||
return 64 * 1000 / 8;
|
||||
return AacUtil.AAC_ELD_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AC3:
|
||||
return 640 * 1000 / 8;
|
||||
return Ac3Util.AC3_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_E_AC3:
|
||||
case C.ENCODING_E_AC3_JOC:
|
||||
return 6144 * 1000 / 8;
|
||||
return Ac3Util.E_AC3_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_AC4:
|
||||
return 2688 * 1000 / 8;
|
||||
return Ac4Util.MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_DTS:
|
||||
// DTS allows an 'open' bitrate, but we assume the maximum listed value: 1536 kbit/s.
|
||||
return 1536 * 1000 / 8;
|
||||
return DtsUtil.DTS_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_DTS_HD:
|
||||
return 18000 * 1000 / 8;
|
||||
return DtsUtil.DTS_HD_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_DOLBY_TRUEHD:
|
||||
return 24500 * 1000 / 8;
|
||||
return Ac3Util.TRUEHD_MAX_RATE_BYTES_PER_SECOND;
|
||||
case C.ENCODING_PCM_16BIT:
|
||||
case C.ENCODING_PCM_16BIT_BIG_ENDIAN:
|
||||
case C.ENCODING_PCM_24BIT:
|
||||
|
|
|
|||
Loading…
Reference in a new issue