Index: media/base/audio_splicer.cc |
=================================================================== |
--- media/base/audio_splicer.cc (revision 284451) |
+++ media/base/audio_splicer.cc (working copy) |
@@ -16,12 +16,6 @@ |
namespace media { |
-// Largest gap or overlap allowed by this class. Anything |
-// larger than this will trigger an error. |
-// This is an arbitrary value, but the initial selection of 50ms |
-// roughly represents the duration of 2 compressed AAC or MP3 frames. |
-static const int kMaxTimeDeltaInMilliseconds = 50; |
- |
// Minimum gap size needed before the splicer will take action to |
// fill a gap. This avoids periodically inserting and then dropping samples |
// when the buffer timestamps are slightly off because of timestamp rounding |
@@ -143,7 +137,8 @@ |
output_timestamp_helper_.GetTimestamp(); |
const base::TimeDelta delta = timestamp - expected_timestamp; |
- if (std::abs(delta.InMilliseconds()) > kMaxTimeDeltaInMilliseconds) { |
+ if (std::abs(delta.InMilliseconds()) > |
+ AudioSplicer::kMaxTimeDeltaInMilliseconds) { |
DVLOG(1) << "Timestamp delta too large: " << delta.InMicroseconds() << "us"; |
return false; |
} |
@@ -310,7 +305,12 @@ |
if (pre_splice_sanitizer_->GetFrameCount() <= |
output_ts_helper.GetFramesToTarget(splice_timestamp_)) { |
CHECK(pre_splice_sanitizer_->DrainInto(output_sanitizer_.get())); |
- CHECK(post_splice_sanitizer_->DrainInto(output_sanitizer_.get())); |
+ |
+ // If the file contains incorrectly muxed timestamps, there may be huge gaps |
+ // between the demuxed and decoded timestamps. |
+ if (!post_splice_sanitizer_->DrainInto(output_sanitizer_.get())) |
+ return false; |
+ |
reset_splice_timestamps(); |
return true; |
} |