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

Unified Diff: media/formats/mp2t/es_parser_adts.cc

Issue 2378443002: Fix MSE ADTS parsing on Android. (Closed)
Patch Set: Address comments. Created 4 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/formats/mp2t/es_parser_adts.h ('k') | media/formats/mpeg/adts_header_parser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/formats/mp2t/es_parser_adts.cc
diff --git a/media/formats/mp2t/es_parser_adts.cc b/media/formats/mp2t/es_parser_adts.cc
index 78bb5ffebedf245aaa01f5aac2eff7f305dab80c..3a31f1eb199296496e41f26f2fc145ce54d0d218 100644
--- a/media/formats/mp2t/es_parser_adts.cc
+++ b/media/formats/mp2t/es_parser_adts.cc
@@ -13,12 +13,12 @@
#include "media/base/audio_timestamp_helper.h"
#include "media/base/bit_reader.h"
#include "media/base/channel_layout.h"
+#include "media/base/media_util.h"
#include "media/base/stream_parser_buffer.h"
#include "media/base/timestamp_constants.h"
#include "media/formats/common/offset_byte_queue.h"
#include "media/formats/mp2t/mp2t_common.h"
#include "media/formats/mpeg/adts_constants.h"
-#include "media/formats/mpeg/adts_header_parser.h"
namespace media {
@@ -123,7 +123,7 @@ bool EsParserAdts::ParseFromEsQueue() {
while (LookForAdtsFrame(&adts_frame)) {
// Update the audio configuration if needed.
DCHECK_GE(adts_frame.size, kADTSHeaderMinSize);
- if (!UpdateAudioConfiguration(adts_frame.data))
+ if (!UpdateAudioConfiguration(adts_frame.data, adts_frame.size))
return false;
// Get the PTS & the duration of this access unit.
@@ -173,12 +173,28 @@ void EsParserAdts::ResetInternal() {
last_audio_decoder_config_ = AudioDecoderConfig();
}
-bool EsParserAdts::UpdateAudioConfiguration(const uint8_t* adts_header) {
- AudioDecoderConfig audio_decoder_config;
- size_t orig_sample_rate = 0;
- if (!ParseAdtsHeader(adts_header, sbr_in_mimetype_, &audio_decoder_config,
- &orig_sample_rate))
+bool EsParserAdts::UpdateAudioConfiguration(const uint8_t* adts_header,
+ int size) {
+ int orig_sample_rate;
+ ChannelLayout channel_layout;
+ std::vector<uint8_t> extra_data;
+ if (adts_parser_.ParseFrameHeader(adts_header, size, nullptr,
+ &orig_sample_rate, &channel_layout, nullptr,
+ nullptr, &extra_data) <= 0) {
return false;
+ }
+
+ // The following code is written according to ISO 14496 Part 3 Table 1.11 and
+ // Table 1.22. (Table 1.11 refers to the capping to 48000, Table 1.22 refers
+ // to SBR doubling the AAC sample rate.)
+ // TODO(damienv) : Extend sample rate cap to 96kHz for Level 5 content.
+ const int extended_samples_per_second =
+ sbr_in_mimetype_ ? std::min(2 * orig_sample_rate, 48000)
+ : orig_sample_rate;
+
+ AudioDecoderConfig audio_decoder_config(
+ kCodecAAC, kSampleFormatS16, channel_layout, extended_samples_per_second,
+ extra_data, Unencrypted());
if (!audio_decoder_config.Matches(last_audio_decoder_config_)) {
DVLOG(1) << "Sampling frequency: "
@@ -188,9 +204,8 @@ bool EsParserAdts::UpdateAudioConfiguration(const uint8_t* adts_header) {
<< ChannelLayoutToString(audio_decoder_config.channel_layout());
// For AAC audio with SBR (Spectral Band Replication) the sampling rate is
- // doubled in ParseAdtsHeader above, but AudioTimestampHelper should still
- // use the original sample rate to compute audio timestamps and durations
- // correctly.
+ // doubled above, but AudioTimestampHelper should still use the original
+ // sample rate to compute audio timestamps and durations correctly.
// Reset the timestamp helper to use a new time scale.
if (audio_timestamp_helper_ &&
« no previous file with comments | « media/formats/mp2t/es_parser_adts.h ('k') | media/formats/mpeg/adts_header_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698