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
8a9a66c2
authored
Nov 24, 2022
by
Ian Baker
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge pull request #10786 from TiVo:p-aacutil-test-impl
PiperOrigin-RevId: 490465182
parents
4d421e7b
0feace5f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
71 additions
and
1 deletions
library/extractor/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java
library/extractor/src/test/java/com/google/android/exoplayer2/audio/AacUtilTest.java
library/extractor/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java
View file @
8a9a66c2
...
...
@@ -330,11 +330,16 @@ public final class AacUtil {
int
samplingFrequency
;
int
frequencyIndex
=
bitArray
.
readBits
(
4
);
if
(
frequencyIndex
==
AUDIO_SPECIFIC_CONFIG_FREQUENCY_INDEX_ARBITRARY
)
{
if
(
bitArray
.
bitsLeft
()
<
24
)
{
throw
ParserException
.
createForMalformedContainer
(
/* message= */
"AAC header insufficient data"
,
/* cause= */
null
);
}
samplingFrequency
=
bitArray
.
readBits
(
24
);
}
else
if
(
frequencyIndex
<
13
)
{
samplingFrequency
=
AUDIO_SPECIFIC_CONFIG_SAMPLING_RATE_TABLE
[
frequencyIndex
];
}
else
{
throw
ParserException
.
createForMalformedContainer
(
/* message= */
null
,
/* cause= */
null
);
throw
ParserException
.
createForMalformedContainer
(
/* message= */
"AAC header wrong Sampling Frequency Index"
,
/* cause= */
null
);
}
return
samplingFrequency
;
}
...
...
library/extractor/src/test/java/com/google/android/exoplayer2/audio/AacUtilTest.java
0 → 100644
View file @
8a9a66c2
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
google
.
android
.
exoplayer2
.
audio
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertThrows
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.ParserException
;
import
com.google.android.exoplayer2.util.Util
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
/** Unit tests for {@link AacUtil}. */
@RunWith
(
AndroidJUnit4
.
class
)
public
final
class
AacUtilTest
{
private
static
final
byte
[]
AAC_48K_2CH_HEADER
=
Util
.
getBytesFromHexString
(
"1190"
);
private
static
final
byte
[]
NOT_ENOUGH_ARBITRARY_SAMPLING_FREQ_BITS_HEADER
=
Util
.
getBytesFromHexString
(
"1790"
);
private
static
final
byte
[]
ARBITRARY_SAMPLING_FREQ_BITS_HEADER
=
Util
.
getBytesFromHexString
(
"1780000790"
);
@Test
public
void
parseAudioSpecificConfig_twoCh48kAac_parsedCorrectly
()
throws
Exception
{
AacUtil
.
Config
aac
=
AacUtil
.
parseAudioSpecificConfig
(
AAC_48K_2CH_HEADER
);
assertThat
(
aac
.
channelCount
).
isEqualTo
(
2
);
assertThat
(
aac
.
sampleRateHz
).
isEqualTo
(
48000
);
assertThat
(
aac
.
codecs
).
isEqualTo
(
"mp4a.40.2"
);
}
@Test
public
void
parseAudioSpecificConfig_arbitrarySamplingFreqHeader_parsedCorrectly
()
throws
Exception
{
AacUtil
.
Config
aac
=
AacUtil
.
parseAudioSpecificConfig
(
ARBITRARY_SAMPLING_FREQ_BITS_HEADER
);
assertThat
(
aac
.
channelCount
).
isEqualTo
(
2
);
assertThat
(
aac
.
sampleRateHz
).
isEqualTo
(
15
);
assertThat
(
aac
.
codecs
).
isEqualTo
(
"mp4a.40.2"
);
}
@Test
public
void
parseAudioSpecificConfig_arbitrarySamplingFreqHeaderNotEnoughBits_throwsParserException
()
{
// ISO 14496-3 1.6.2.1 allows for setting of arbitrary sampling frequency, but if the extra
// frequency bits are missing, make sure the code will throw an exception.
assertThrows
(
ParserException
.
class
,
()
->
AacUtil
.
parseAudioSpecificConfig
(
NOT_ENOUGH_ARBITRARY_SAMPLING_FREQ_BITS_HEADER
));
}
}
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