Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: media/formats/mp4/aac.cc

Issue 1534273002: Switch to standard integer types in media/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/formats/mp4/aac.h" 5 #include "media/formats/mp4/aac.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/base/bit_reader.h" 10 #include "media/base/bit_reader.h"
11 #include "media/formats/mp4/rcheck.h" 11 #include "media/formats/mp4/rcheck.h"
12 #include "media/formats/mpeg/adts_constants.h" 12 #include "media/formats/mpeg/adts_constants.h"
13 13
14 namespace media { 14 namespace media {
15 namespace mp4 { 15 namespace mp4 {
16 16
17 AAC::AAC() 17 AAC::AAC()
18 : profile_(0), frequency_index_(0), channel_config_(0), frequency_(0), 18 : profile_(0), frequency_index_(0), channel_config_(0), frequency_(0),
19 extension_frequency_(0), channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED) { 19 extension_frequency_(0), channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED) {
20 } 20 }
21 21
22 AAC::~AAC() { 22 AAC::~AAC() {
23 } 23 }
24 24
25 bool AAC::Parse(const std::vector<uint8>& data, 25 bool AAC::Parse(const std::vector<uint8_t>& data,
26 const scoped_refptr<MediaLog>& media_log) { 26 const scoped_refptr<MediaLog>& media_log) {
27 #if defined(OS_ANDROID) 27 #if defined(OS_ANDROID)
28 codec_specific_data_ = data; 28 codec_specific_data_ = data;
29 #endif 29 #endif
30 if (data.empty()) 30 if (data.empty())
31 return false; 31 return false;
32 32
33 BitReader reader(&data[0], data.size()); 33 BitReader reader(&data[0], data.size());
34 uint8 extension_type = 0; 34 uint8_t extension_type = 0;
35 bool ps_present = false; 35 bool ps_present = false;
36 uint8 extension_frequency_index = 0xff; 36 uint8_t extension_frequency_index = 0xff;
37 37
38 frequency_ = 0; 38 frequency_ = 0;
39 extension_frequency_ = 0; 39 extension_frequency_ = 0;
40 40
41 // TODO(msu.koo): Need to consider whether ISO 14496-3:2009 needs 41 // TODO(msu.koo): Need to consider whether ISO 14496-3:2009 needs
42 // to be reflected instead of ISO 14496-3:2005. 42 // to be reflected instead of ISO 14496-3:2005.
43 // https://crbug.com/532281 43 // https://crbug.com/532281
44 44
45 // The following code is written according to ISO 14496-3:2005 Table 1.13 - 45 // The following code is written according to ISO 14496-3:2005 Table 1.13 -
46 // Syntax of AudioSpecificConfig. 46 // Syntax of AudioSpecificConfig.
(...skipping 14 matching lines...) Expand all
61 RCHECK(reader.ReadBits(24, &extension_frequency_)); 61 RCHECK(reader.ReadBits(24, &extension_frequency_));
62 RCHECK(reader.ReadBits(5, &profile_)); 62 RCHECK(reader.ReadBits(5, &profile_));
63 } 63 }
64 64
65 RCHECK(SkipDecoderGASpecificConfig(&reader)); 65 RCHECK(SkipDecoderGASpecificConfig(&reader));
66 RCHECK(SkipErrorSpecificConfig()); 66 RCHECK(SkipErrorSpecificConfig());
67 67
68 // Read extension configuration again 68 // Read extension configuration again
69 // Note: The check for 16 available bits comes from the AAC spec. 69 // Note: The check for 16 available bits comes from the AAC spec.
70 if (extension_type != 5 && reader.bits_available() >= 16) { 70 if (extension_type != 5 && reader.bits_available() >= 16) {
71 uint16 sync_extension_type; 71 uint16_t sync_extension_type;
72 uint8 sbr_present_flag; 72 uint8_t sbr_present_flag;
73 uint8 ps_present_flag; 73 uint8_t ps_present_flag;
74 74
75 if (reader.ReadBits(11, &sync_extension_type) && 75 if (reader.ReadBits(11, &sync_extension_type) &&
76 sync_extension_type == 0x2b7) { 76 sync_extension_type == 0x2b7) {
77 if (reader.ReadBits(5, &extension_type) && extension_type == 5) { 77 if (reader.ReadBits(5, &extension_type) && extension_type == 5) {
78 RCHECK(reader.ReadBits(1, &sbr_present_flag)); 78 RCHECK(reader.ReadBits(1, &sbr_present_flag));
79 79
80 if (sbr_present_flag) { 80 if (sbr_present_flag) {
81 RCHECK(reader.ReadBits(4, &extension_frequency_index)); 81 RCHECK(reader.ReadBits(4, &extension_frequency_index));
82 82
83 if (extension_frequency_index == 0xf) 83 if (extension_frequency_index == 0xf)
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 ChannelLayout AAC::GetChannelLayout(bool sbr_in_mimetype) const { 171 ChannelLayout AAC::GetChannelLayout(bool sbr_in_mimetype) const {
172 // Check for implicit signalling of HE-AAC and indicate stereo output 172 // Check for implicit signalling of HE-AAC and indicate stereo output
173 // if the mono channel configuration is signalled. 173 // if the mono channel configuration is signalled.
174 // See ISO 14496-3:2005 Section 1.6.5.3 for details about this special casing. 174 // See ISO 14496-3:2005 Section 1.6.5.3 for details about this special casing.
175 if (sbr_in_mimetype && channel_config_ == 1) 175 if (sbr_in_mimetype && channel_config_ == 1)
176 return CHANNEL_LAYOUT_STEREO; 176 return CHANNEL_LAYOUT_STEREO;
177 177
178 return channel_layout_; 178 return channel_layout_;
179 } 179 }
180 180
181 bool AAC::ConvertEsdsToADTS(std::vector<uint8>* buffer) const { 181 bool AAC::ConvertEsdsToADTS(std::vector<uint8_t>* buffer) const {
182 size_t size = buffer->size() + kADTSHeaderMinSize; 182 size_t size = buffer->size() + kADTSHeaderMinSize;
183 183
184 DCHECK(profile_ >= 1 && profile_ <= 4 && frequency_index_ != 0xf && 184 DCHECK(profile_ >= 1 && profile_ <= 4 && frequency_index_ != 0xf &&
185 channel_config_ <= 7); 185 channel_config_ <= 7);
186 186
187 // ADTS header uses 13 bits for packet size. 187 // ADTS header uses 13 bits for packet size.
188 if (size >= (1 << 13)) 188 if (size >= (1 << 13))
189 return false; 189 return false;
190 190
191 std::vector<uint8>& adts = *buffer; 191 std::vector<uint8_t>& adts = *buffer;
192 192
193 adts.insert(buffer->begin(), kADTSHeaderMinSize, 0); 193 adts.insert(buffer->begin(), kADTSHeaderMinSize, 0);
194 adts[0] = 0xff; 194 adts[0] = 0xff;
195 adts[1] = 0xf1; 195 adts[1] = 0xf1;
196 adts[2] = ((profile_ - 1) << 6) + (frequency_index_ << 2) + 196 adts[2] = ((profile_ - 1) << 6) + (frequency_index_ << 2) +
197 (channel_config_ >> 2); 197 (channel_config_ >> 2);
198 adts[3] = static_cast<uint8>(((channel_config_ & 0x3) << 6) + (size >> 11)); 198 adts[3] = static_cast<uint8_t>(((channel_config_ & 0x3) << 6) + (size >> 11));
199 adts[4] = static_cast<uint8>((size & 0x7ff) >> 3); 199 adts[4] = static_cast<uint8_t>((size & 0x7ff) >> 3);
200 adts[5] = ((size & 7) << 5) + 0x1f; 200 adts[5] = ((size & 7) << 5) + 0x1f;
201 adts[6] = 0xfc; 201 adts[6] = 0xfc;
202 202
203 return true; 203 return true;
204 } 204 }
205 205
206 // Currently this function only support GASpecificConfig defined in 206 // Currently this function only support GASpecificConfig defined in
207 // ISO 14496-3:2005 Table 4.1 - Syntax of GASpecificConfig() 207 // ISO 14496-3:2005 Table 4.1 - Syntax of GASpecificConfig()
208 bool AAC::SkipDecoderGASpecificConfig(BitReader* bit_reader) const { 208 bool AAC::SkipDecoderGASpecificConfig(BitReader* bit_reader) const {
209 switch (profile_) { 209 switch (profile_) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 default: 243 default:
244 break; 244 break;
245 } 245 }
246 246
247 return true; 247 return true;
248 } 248 }
249 249
250 // The following code is written according to ISO 14496-3:2005 Table 4.1 - 250 // The following code is written according to ISO 14496-3:2005 Table 4.1 -
251 // GASpecificConfig. 251 // GASpecificConfig.
252 bool AAC::SkipGASpecificConfig(BitReader* bit_reader) const { 252 bool AAC::SkipGASpecificConfig(BitReader* bit_reader) const {
253 uint8 extension_flag = 0; 253 uint8_t extension_flag = 0;
254 uint8 depends_on_core_coder; 254 uint8_t depends_on_core_coder;
255 uint16 dummy; 255 uint16_t dummy;
256 256
257 RCHECK(bit_reader->ReadBits(1, &dummy)); // frameLengthFlag 257 RCHECK(bit_reader->ReadBits(1, &dummy)); // frameLengthFlag
258 RCHECK(bit_reader->ReadBits(1, &depends_on_core_coder)); 258 RCHECK(bit_reader->ReadBits(1, &depends_on_core_coder));
259 if (depends_on_core_coder == 1) 259 if (depends_on_core_coder == 1)
260 RCHECK(bit_reader->ReadBits(14, &dummy)); // coreCoderDelay 260 RCHECK(bit_reader->ReadBits(14, &dummy)); // coreCoderDelay
261 261
262 RCHECK(bit_reader->ReadBits(1, &extension_flag)); 262 RCHECK(bit_reader->ReadBits(1, &extension_flag));
263 RCHECK(channel_config_ != 0); 263 RCHECK(channel_config_ != 0);
264 264
265 if (profile_ == 6 || profile_ == 20) 265 if (profile_ == 6 || profile_ == 20)
(...skipping 11 matching lines...) Expand all
277 277
278 RCHECK(bit_reader->ReadBits(1, &dummy)); // extensionFlag3 278 RCHECK(bit_reader->ReadBits(1, &dummy)); // extensionFlag3
279 } 279 }
280 280
281 return true; 281 return true;
282 } 282 }
283 283
284 } // namespace mp4 284 } // namespace mp4
285 285
286 } // namespace media 286 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698