summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Extractor.cpp
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2014-05-16 12:22:35 -0700
committerRachad Alao <rachad@google.com>2014-09-06 00:27:16 +0000
commit45452ffeb3827dd3c955aca1b4ab3522b70cf8cc (patch)
treecbfb08cb7d1daa496fc9cf2e090842ddae697d74 /media/libstagefright/MPEG4Extractor.cpp
parent767fc12e58422eef14aa40a5e7ffefd0b3949b82 (diff)
downloadframeworks_av-45452ffeb3827dd3c955aca1b4ab3522b70cf8cc.zip
frameworks_av-45452ffeb3827dd3c955aca1b4ab3522b70cf8cc.tar.gz
frameworks_av-45452ffeb3827dd3c955aca1b4ab3522b70cf8cc.tar.bz2
DO NOT MERGE - MPEG4Extractor: parse csd correctly; workaround malformed csd
Bug: 14895152 Change-Id: Ibfee9e176459099507589c26a5eca6c61caabd1c (cherry picked from commit bc413f6ad0023f7ad451a0129a07fc31dbc65665)
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-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);