Chromium Code Reviews| Index: media/base/audio_buffer.cc |
| diff --git a/media/base/audio_buffer.cc b/media/base/audio_buffer.cc |
| index 4b972b90a1abda47c363b0cd46c7c8362ca60ee2..25e8dbe1a1b77a42fef7211dae2710a78c08b486 100644 |
| --- a/media/base/audio_buffer.cc |
| +++ b/media/base/audio_buffer.cc |
| @@ -11,6 +11,11 @@ |
| namespace media { |
| +static base::TimeDelta CalculateDuration(int frames, double sample_rate) { |
| + return base::TimeDelta::FromMicroseconds( |
| + frames * base::Time::kMicrosecondsPerSecond / sample_rate); |
| +} |
| + |
| AudioBuffer::AudioBuffer(SampleFormat sample_format, |
| ChannelLayout channel_layout, |
| int channel_count, |
| @@ -18,8 +23,7 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
| int frame_count, |
| bool create_buffer, |
| const uint8* const* data, |
| - const base::TimeDelta timestamp, |
| - const base::TimeDelta duration) |
| + const base::TimeDelta timestamp) |
| : sample_format_(sample_format), |
| channel_layout_(channel_layout), |
| channel_count_(channel_count), |
| @@ -28,7 +32,7 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
| trim_start_(0), |
| end_of_stream_(!create_buffer && data == NULL && frame_count == 0), |
| timestamp_(timestamp), |
| - duration_(duration) { |
| + duration_(CalculateDuration(adjusted_frame_count_, sample_rate_)) { |
|
jrummell
2014/05/01 20:26:26
nit: Would it be better to compute the duration on
DaleCurtis
2014/05/01 20:33:18
It's cheap to calculate and I don't want to have t
|
| CHECK_GE(channel_count_, 0); |
| CHECK_LE(channel_count_, limits::kMaxChannels); |
| CHECK_GE(frame_count, 0); |
| @@ -91,8 +95,7 @@ scoped_refptr<AudioBuffer> AudioBuffer::CopyFrom( |
| int sample_rate, |
| int frame_count, |
| const uint8* const* data, |
| - const base::TimeDelta timestamp, |
| - const base::TimeDelta duration) { |
| + const base::TimeDelta timestamp) { |
| // If you hit this CHECK you likely have a bug in a demuxer. Go fix it. |
| CHECK_GT(frame_count, 0); // Otherwise looks like an EOF buffer. |
| CHECK(data[0]); |
| @@ -103,8 +106,7 @@ scoped_refptr<AudioBuffer> AudioBuffer::CopyFrom( |
| frame_count, |
| true, |
| data, |
| - timestamp, |
| - duration)); |
| + timestamp)); |
| } |
| // static |
| @@ -122,7 +124,6 @@ scoped_refptr<AudioBuffer> AudioBuffer::CreateBuffer( |
| frame_count, |
| true, |
| NULL, |
| - kNoTimestamp(), |
| kNoTimestamp())); |
| } |
| @@ -132,8 +133,7 @@ scoped_refptr<AudioBuffer> AudioBuffer::CreateEmptyBuffer( |
| int channel_count, |
| int sample_rate, |
| int frame_count, |
| - const base::TimeDelta timestamp, |
| - const base::TimeDelta duration) { |
| + const base::TimeDelta timestamp) { |
| CHECK_GT(frame_count, 0); // Otherwise looks like an EOF buffer. |
| // Since data == NULL, format doesn't matter. |
| return make_scoped_refptr(new AudioBuffer(kSampleFormatF32, |
| @@ -143,8 +143,7 @@ scoped_refptr<AudioBuffer> AudioBuffer::CreateEmptyBuffer( |
| frame_count, |
| false, |
| NULL, |
| - timestamp, |
| - duration)); |
| + timestamp)); |
| } |
| // static |
| @@ -156,7 +155,6 @@ scoped_refptr<AudioBuffer> AudioBuffer::CreateEOSBuffer() { |
| 0, |
| false, |
| NULL, |
| - kNoTimestamp(), |
| kNoTimestamp())); |
| } |
| @@ -246,33 +244,23 @@ void AudioBuffer::TrimStart(int frames_to_trim) { |
| CHECK_GE(frames_to_trim, 0); |
| CHECK_LE(frames_to_trim, adjusted_frame_count_); |
| - // Adjust timestamp_ and duration_ to reflect the smaller number of frames. |
| - double offset = static_cast<double>(duration_.InMicroseconds()) * |
| - frames_to_trim / adjusted_frame_count_; |
| - base::TimeDelta offset_as_time = |
| - base::TimeDelta::FromMicroseconds(static_cast<int64>(offset)); |
| - timestamp_ += offset_as_time; |
| - duration_ -= offset_as_time; |
| - |
| - // Finally adjust the number of frames in this buffer and where the start |
| - // really is. |
| + // Adjust the number of frames in this buffer and where the start really is. |
| adjusted_frame_count_ -= frames_to_trim; |
| trim_start_ += frames_to_trim; |
| + |
| + // Adjust timestamp_ and duration_ to reflect the smaller number of frames. |
| + const base::TimeDelta old_duration = duration_; |
| + duration_ = CalculateDuration(adjusted_frame_count_, sample_rate_); |
| + timestamp_ += old_duration - duration_; |
| } |
| void AudioBuffer::TrimEnd(int frames_to_trim) { |
| CHECK_GE(frames_to_trim, 0); |
| CHECK_LE(frames_to_trim, adjusted_frame_count_); |
| - // Adjust duration_ only to reflect the smaller number of frames. |
| - double offset = static_cast<double>(duration_.InMicroseconds()) * |
| - frames_to_trim / adjusted_frame_count_; |
| - base::TimeDelta offset_as_time = |
| - base::TimeDelta::FromMicroseconds(static_cast<int64>(offset)); |
| - duration_ -= offset_as_time; |
| - |
| - // Finally adjust the number of frames in this buffer. |
| + // Adjust the number of frames and duration for this buffer. |
| adjusted_frame_count_ -= frames_to_trim; |
| + duration_ = CalculateDuration(adjusted_frame_count_, sample_rate_); |
| } |
| } // namespace media |