summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2014-09-06 00:49:52 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-09-06 00:49:53 +0000
commitea477effb909089401f6d1ec40fd495757d75021 (patch)
tree2b1e979cc43de55aa95fd8055b98bb5b6fe738bf /media
parent2adb3f32d152c567a3538a709c47d9bd6cf05bc4 (diff)
parent45452ffeb3827dd3c955aca1b4ab3522b70cf8cc (diff)
downloadframeworks_av-ea477effb909089401f6d1ec40fd495757d75021.zip
frameworks_av-ea477effb909089401f6d1ec40fd495757d75021.tar.gz
frameworks_av-ea477effb909089401f6d1ec40fd495757d75021.tar.bz2
Merge "DO NOT MERGE - MPEG4Extractor: parse csd correctly; workaround malformed csd" into lmp-dev
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 0064293..1729f93 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -2810,7 +2810,6 @@ status_t MPEG4Extractor::updateAudioTrackInfoFromESDS_MPEG4Audio(
{
if (objectType == AOT_SBR || objectType == AOT_PS) {
- const int32_t extensionSamplingFrequency = br.getBits(4);
objectType = br.getBits(5);
if (objectType == AOT_ESCAPE) {
@@ -2828,9 +2827,30 @@ status_t MPEG4Extractor::updateAudioTrackInfoFromESDS_MPEG4Audio(
const int32_t coreCoderDelay = br.getBits(14);
}
- const int32_t extensionFlag = br.getBits(1);
+ int32_t extensionFlag = -1;
+ if (br.numBitsLeft() > 0) {
+ extensionFlag = br.getBits(1);
+ } else {
+ switch (objectType) {
+ // 14496-3 4.5.1.1 extensionFlag
+ case AOT_AAC_LC:
+ extensionFlag = 0;
+ break;
+ case AOT_ER_AAC_LC:
+ case AOT_ER_AAC_SCAL:
+ case AOT_ER_BSAC:
+ case AOT_ER_AAC_LD:
+ extensionFlag = 1;
+ break;
+ default:
+ TRESPASS();
+ break;
+ }
+ ALOGW("csd missing extension flag; assuming %d for object type %u.",
+ extensionFlag, objectType);
+ }
- if (numChannels == 0 ) {
+ if (numChannels == 0) {
int32_t channelsEffectiveNum = 0;
int32_t channelsNum = 0;
const int32_t ElementInstanceTag = br.getBits(4);