Home | History | Annotate | Download | only in mp4
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "media/mp4/aac.h"
      6 
      7 #include <algorithm>
      8 
      9 #include "base/logging.h"
     10 #include "media/base/bit_reader.h"
     11 #include "media/mp4/rcheck.h"
     12 
     13 // The following conversion table is extracted from ISO 14496 Part 3 -
     14 // Table 1.16 - Sampling Frequency Index.
     15 static const int kFrequencyMap[] = {
     16   96000, 88200, 64000, 48000, 44100, 32000, 24000,
     17   22050, 16000, 12000, 11025, 8000, 7350
     18 };
     19 
     20 namespace media {
     21 
     22 static ChannelLayout ConvertChannelConfigToLayout(uint8 channel_config) {
     23   switch (channel_config) {
     24     case 1:
     25       return CHANNEL_LAYOUT_MONO;
     26     case 2:
     27       return CHANNEL_LAYOUT_STEREO;
     28     case 3:
     29       return CHANNEL_LAYOUT_SURROUND;
     30     case 4:
     31       return CHANNEL_LAYOUT_4_0;
     32     case 5:
     33       return CHANNEL_LAYOUT_5_0;
     34     case 6:
     35       return CHANNEL_LAYOUT_5_1;
     36     case 8:
     37       return CHANNEL_LAYOUT_7_1;
     38     default:
     39       break;
     40   }
     41 
     42   return CHANNEL_LAYOUT_UNSUPPORTED;
     43 }
     44 
     45 namespace mp4 {
     46 
     47 AAC::AAC()
     48     : profile_(0), frequency_index_(0), channel_config_(0), frequency_(0),
     49       extension_frequency_(0), channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED) {
     50 }
     51 
     52 AAC::~AAC() {
     53 }
     54 
     55 bool AAC::Parse(const std::vector<uint8>& data) {
     56 #if defined(OS_ANDROID)
     57   codec_specific_data_ = data;
     58 #endif
     59   if (data.empty())
     60     return false;
     61 
     62   BitReader reader(&data[0], data.size());
     63   uint8 extension_type = 0;
     64   bool ps_present = false;
     65   uint8 extension_frequency_index = 0xff;
     66 
     67   frequency_ = 0;
     68   extension_frequency_ = 0;
     69 
     70   // The following code is written according to ISO 14496 Part 3 Table 1.13 -
     71   // Syntax of AudioSpecificConfig.
     72 
     73   // Read base configuration
     74   RCHECK(reader.ReadBits(5, &profile_));
     75   RCHECK(reader.ReadBits(4, &frequency_index_));
     76   if (frequency_index_ == 0xf)
     77     RCHECK(reader.ReadBits(24, &frequency_));
     78   RCHECK(reader.ReadBits(4, &channel_config_));
     79 
     80   // Read extension configuration.
     81   if (profile_ == 5 || profile_ == 29) {
     82     ps_present = (profile_ == 29);
     83     extension_type = 5;
     84     RCHECK(reader.ReadBits(4, &extension_frequency_index));
     85     if (extension_frequency_index == 0xf)
     86       RCHECK(reader.ReadBits(24, &extension_frequency_));
     87     RCHECK(reader.ReadBits(5, &profile_));
     88   }
     89 
     90   RCHECK(SkipDecoderGASpecificConfig(&reader));
     91   RCHECK(SkipErrorSpecificConfig());
     92 
     93   // Read extension configuration again
     94   // Note: The check for 16 available bits comes from the AAC spec.
     95   if (extension_type != 5 && reader.bits_available() >= 16) {
     96     uint16 sync_extension_type;
     97     uint8 sbr_present_flag;
     98     uint8 ps_present_flag;
     99 
    100     if (reader.ReadBits(11, &sync_extension_type) &&
    101         sync_extension_type == 0x2b7) {
    102       if (reader.ReadBits(5, &extension_type) && extension_type == 5) {
    103         RCHECK(reader.ReadBits(1, &sbr_present_flag));
    104 
    105         if (sbr_present_flag) {
    106           RCHECK(reader.ReadBits(4, &extension_frequency_index));
    107 
    108           if (extension_frequency_index == 0xf)
    109             RCHECK(reader.ReadBits(24, &extension_frequency_));
    110 
    111           // Note: The check for 12 available bits comes from the AAC spec.
    112           if (reader.bits_available() >= 12) {
    113             RCHECK(reader.ReadBits(11, &sync_extension_type));
    114             if (sync_extension_type == 0x548) {
    115               RCHECK(reader.ReadBits(1, &ps_present_flag));
    116               ps_present = ps_present_flag != 0;
    117             }
    118           }
    119         }
    120       }
    121     }
    122   }
    123 
    124   if (frequency_ == 0) {
    125     RCHECK(frequency_index_ < arraysize(kFrequencyMap));
    126     frequency_ = kFrequencyMap[frequency_index_];
    127   }
    128 
    129   if (extension_frequency_ == 0 && extension_frequency_index != 0xff) {
    130     RCHECK(extension_frequency_index < arraysize(kFrequencyMap));
    131     extension_frequency_ = kFrequencyMap[extension_frequency_index];
    132   }
    133 
    134   // When Parametric Stereo is on, mono will be played as stereo.
    135   if (ps_present && channel_config_ == 1)
    136     channel_layout_ = CHANNEL_LAYOUT_STEREO;
    137   else
    138     channel_layout_ = ConvertChannelConfigToLayout(channel_config_);
    139 
    140   return frequency_ != 0 && channel_layout_ != CHANNEL_LAYOUT_UNSUPPORTED &&
    141       profile_ >= 1 && profile_ <= 4 && frequency_index_ != 0xf &&
    142       channel_config_ <= 7;
    143 }
    144 
    145 int AAC::GetOutputSamplesPerSecond(bool sbr_in_mimetype) const {
    146   if (extension_frequency_ > 0)
    147     return extension_frequency_;
    148 
    149   if (!sbr_in_mimetype)
    150     return frequency_;
    151 
    152   // The following code is written according to ISO 14496 Part 3 Table 1.11 and
    153   // Table 1.22. (Table 1.11 refers to the capping to 48000, Table 1.22 refers
    154   // to SBR doubling the AAC sample rate.)
    155   // TODO(acolwell) : Extend sample rate cap to 96kHz for Level 5 content.
    156   DCHECK_GT(frequency_, 0);
    157   return std::min(2 * frequency_, 48000);
    158 }
    159 
    160 ChannelLayout AAC::GetChannelLayout(bool sbr_in_mimetype) const {
    161   // Check for implicit signalling of HE-AAC and indicate stereo output
    162   // if the mono channel configuration is signalled.
    163   // See ISO-14496-3 Section 1.6.6.1.2 for details about this special casing.
    164   if (sbr_in_mimetype && channel_config_ == 1)
    165     return CHANNEL_LAYOUT_STEREO;
    166 
    167   return channel_layout_;
    168 }
    169 
    170 bool AAC::ConvertEsdsToADTS(std::vector<uint8>* buffer) const {
    171   size_t size = buffer->size() + kADTSHeaderSize;
    172 
    173   DCHECK(profile_ >= 1 && profile_ <= 4 && frequency_index_ != 0xf &&
    174          channel_config_ <= 7);
    175 
    176   // ADTS header uses 13 bits for packet size.
    177   if (size >= (1 << 13))
    178     return false;
    179 
    180   std::vector<uint8>& adts = *buffer;
    181 
    182   adts.insert(buffer->begin(), kADTSHeaderSize, 0);
    183   adts[0] = 0xff;
    184   adts[1] = 0xf1;
    185   adts[2] = ((profile_ - 1) << 6) + (frequency_index_ << 2) +
    186       (channel_config_ >> 2);
    187   adts[3] = ((channel_config_ & 0x3) << 6) + (size >> 11);
    188   adts[4] = (size & 0x7ff) >> 3;
    189   adts[5] = ((size & 7) << 5) + 0x1f;
    190   adts[6] = 0xfc;
    191 
    192   return true;
    193 }
    194 
    195 // Currently this function only support GASpecificConfig defined in
    196 // ISO 14496 Part 3 Table 4.1 - Syntax of GASpecificConfig()
    197 bool AAC::SkipDecoderGASpecificConfig(BitReader* bit_reader) const {
    198   switch (profile_) {
    199     case 1:
    200     case 2:
    201     case 3:
    202     case 4:
    203     case 6:
    204     case 7:
    205     case 17:
    206     case 19:
    207     case 20:
    208     case 21:
    209     case 22:
    210     case 23:
    211       return SkipGASpecificConfig(bit_reader);
    212     default:
    213       break;
    214   }
    215 
    216   return false;
    217 }
    218 
    219 bool AAC::SkipErrorSpecificConfig() const {
    220   switch (profile_) {
    221     case 17:
    222     case 19:
    223     case 20:
    224     case 21:
    225     case 22:
    226     case 23:
    227     case 24:
    228     case 25:
    229     case 26:
    230     case 27:
    231       return false;
    232     default:
    233       break;
    234   }
    235 
    236   return true;
    237 }
    238 
    239 // The following code is written according to ISO 14496 part 3 Table 4.1 -
    240 // GASpecificConfig.
    241 bool AAC::SkipGASpecificConfig(BitReader* bit_reader) const {
    242   uint8 extension_flag = 0;
    243   uint8 depends_on_core_coder;
    244   uint16 dummy;
    245 
    246   RCHECK(bit_reader->ReadBits(1, &dummy));  // frameLengthFlag
    247   RCHECK(bit_reader->ReadBits(1, &depends_on_core_coder));
    248   if (depends_on_core_coder == 1)
    249     RCHECK(bit_reader->ReadBits(14, &dummy));  // coreCoderDelay
    250 
    251   RCHECK(bit_reader->ReadBits(1, &extension_flag));
    252   RCHECK(channel_config_ != 0);
    253 
    254   if (profile_ == 6 || profile_ == 20)
    255     RCHECK(bit_reader->ReadBits(3, &dummy));  // layerNr
    256 
    257   if (extension_flag) {
    258     if (profile_ == 22) {
    259       RCHECK(bit_reader->ReadBits(5, &dummy));  // numOfSubFrame
    260       RCHECK(bit_reader->ReadBits(11, &dummy));  // layer_length
    261     }
    262 
    263     if (profile_ == 17 || profile_ == 19 || profile_ == 20 || profile_ == 23) {
    264       RCHECK(bit_reader->ReadBits(3, &dummy));  // resilience flags
    265     }
    266 
    267     RCHECK(bit_reader->ReadBits(1, &dummy));  // extensionFlag3
    268   }
    269 
    270   return true;
    271 }
    272 
    273 }  // namespace mp4
    274 
    275 }  // namespace media
    276