Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
0b946ac3
authored
Mar 02, 2020
by
andrewlewis
Committed by
Oliver Woodman
Mar 10, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Move max encoded audio rates to format utils
PiperOrigin-RevId: 298290511
parent
2ca36331
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
59 additions
and
19 deletions
library/common/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java
library/common/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java
library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java
library/common/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java
library/common/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
library/common/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java
View file @
0b946ac3
...
@@ -61,6 +61,28 @@ public final class AacUtil {
...
@@ -61,6 +61,28 @@ public final class AacUtil {
*/
*/
public
static
final
int
AAC_LD_AUDIO_SAMPLE_COUNT
=
512
;
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_FREQUENCY_INDEX_ARBITRARY
=
0xF
;
private
static
final
int
[]
AUDIO_SPECIFIC_CONFIG_SAMPLING_RATE_TABLE
=
private
static
final
int
[]
AUDIO_SPECIFIC_CONFIG_SAMPLING_RATE_TABLE
=
new
int
[]
{
new
int
[]
{
...
...
library/common/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java
View file @
0b946ac3
...
@@ -99,6 +99,13 @@ public final class Ac3Util {
...
@@ -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
* 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
* of samples extracted from the container corresponding to one syncframe must be an integer
...
...
library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java
View file @
0b946ac3
...
@@ -54,6 +54,9 @@ public final class Ac4Util {
...
@@ -54,6 +54,9 @@ public final class Ac4Util {
public
static
final
int
AC40_SYNCWORD
=
0xAC40
;
public
static
final
int
AC40_SYNCWORD
=
0xAC40
;
public
static
final
int
AC41_SYNCWORD
=
0xAC41
;
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. */
/** The channel count of AC-4 stream. */
// TODO: Parse AC-4 stream channel count.
// TODO: Parse AC-4 stream channel count.
private
static
final
int
CHANNEL_COUNT_2
=
2
;
private
static
final
int
CHANNEL_COUNT_2
=
2
;
...
...
library/common/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java
View file @
0b946ac3
...
@@ -28,6 +28,15 @@ import java.util.Arrays;
...
@@ -28,6 +28,15 @@ import java.util.Arrays;
*/
*/
public
final
class
DtsUtil
{
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_BE
=
0x7FFE8001
;
private
static
final
int
SYNC_VALUE_14B_BE
=
0x1FFFE800
;
private
static
final
int
SYNC_VALUE_14B_BE
=
0x1FFFE800
;
private
static
final
int
SYNC_VALUE_LE
=
0xFE7F0180
;
private
static
final
int
SYNC_VALUE_LE
=
0xFE7F0180
;
...
...
library/common/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java
View file @
0b946ac3
...
@@ -209,6 +209,12 @@ public final class MpegAudioUtil {
...
@@ -209,6 +209,12 @@ public final class MpegAudioUtil {
*/
*/
public
static
final
int
MAX_FRAME_SIZE_BYTES
=
4096
;
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
=
private
static
final
String
[]
MIME_TYPE_BY_LAYER
=
new
String
[]
{
MimeTypes
.
AUDIO_MPEG_L1
,
MimeTypes
.
AUDIO_MPEG_L2
,
MimeTypes
.
AUDIO_MPEG
};
new
String
[]
{
MimeTypes
.
AUDIO_MPEG_L1
,
MimeTypes
.
AUDIO_MPEG_L2
,
MimeTypes
.
AUDIO_MPEG
};
private
static
final
int
[]
SAMPLING_RATE_V1
=
{
44100
,
48000
,
32000
};
private
static
final
int
[]
SAMPLING_RATE_V1
=
{
44100
,
48000
,
32000
};
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
View file @
0b946ac3
...
@@ -1208,37 +1208,30 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1208,37 +1208,30 @@ public final class DefaultAudioSink implements AudioSink {
private
static
int
getMaximumEncodedRateBytesPerSecond
(
@C
.
Encoding
int
encoding
)
{
private
static
int
getMaximumEncodedRateBytesPerSecond
(
@C
.
Encoding
int
encoding
)
{
switch
(
encoding
)
{
switch
(
encoding
)
{
case
C
.
ENCODING_MP3
:
case
C
.
ENCODING_MP3
:
// Maximum bitrate for MPEG-1 layer III: 320 kbit/s.
return
MpegAudioUtil
.
MAX_RATE_BYTES_PER_SECOND
;
return
320
*
1000
/
8
;
case
C
.
ENCODING_AAC_LC
:
case
C
.
ENCODING_AAC_LC
:
// Maximum bitrates for AAC profiles from the Fraunhofer FDK AAC encoder documentation:
return
AacUtil
.
AAC_LC_MAX_RATE_BYTES_PER_SECOND
;
// 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
;
case
C
.
ENCODING_AAC_HE_V1
:
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
:
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
:
case
C
.
ENCODING_AAC_XHE
:
// Fraunhofer documentation says "500 kbit/s and above" for stereo, so we use a rate
return
AacUtil
.
AAC_XHE_MAX_RATE_BYTES_PER_SECOND
;
// generously above the 500 kbit/s level.
return
2048
*
1000
/
8
;
case
C
.
ENCODING_AAC_ELD
:
case
C
.
ENCODING_AAC_ELD
:
// Fraunhofer documentation shows AAC-ELD as useful for up to ~ 64 kbit/s.
return
AacUtil
.
AAC_ELD_MAX_RATE_BYTES_PER_SECOND
;
return
64
*
1000
/
8
;
case
C
.
ENCODING_AC3
:
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
:
case
C
.
ENCODING_E_AC3_JOC
:
case
C
.
ENCODING_E_AC3_JOC
:
return
6144
*
1000
/
8
;
return
Ac3Util
.
E_AC3_MAX_RATE_BYTES_PER_SECOND
;
case
C
.
ENCODING_AC4
:
case
C
.
ENCODING_AC4
:
return
2688
*
1000
/
8
;
return
Ac4Util
.
MAX_RATE_BYTES_PER_SECOND
;
case
C
.
ENCODING_DTS
:
case
C
.
ENCODING_DTS
:
// DTS allows an 'open' bitrate, but we assume the maximum listed value: 1536 kbit/s.
return
DtsUtil
.
DTS_MAX_RATE_BYTES_PER_SECOND
;
return
1536
*
1000
/
8
;
case
C
.
ENCODING_DTS_HD
:
case
C
.
ENCODING_DTS_HD
:
return
18000
*
1000
/
8
;
return
DtsUtil
.
DTS_HD_MAX_RATE_BYTES_PER_SECOND
;
case
C
.
ENCODING_DOLBY_TRUEHD
:
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
:
case
C
.
ENCODING_PCM_16BIT_BIG_ENDIAN
:
case
C
.
ENCODING_PCM_16BIT_BIG_ENDIAN
:
case
C
.
ENCODING_PCM_24BIT
:
case
C
.
ENCODING_PCM_24BIT
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment