Index: media/base/buffer_queue.cc |
=================================================================== |
--- media/base/buffer_queue.cc (revision 22189) |
+++ media/base/buffer_queue.cc (working copy) |
@@ -10,7 +10,8 @@ |
BufferQueue::BufferQueue() |
: data_offset_(0), |
- size_in_bytes_(0) { |
+ size_in_bytes_(0), |
+ most_recent_time_() { |
} |
BufferQueue::~BufferQueue() { |
@@ -33,8 +34,21 @@ |
if (front_remaining > bytes_to_be_consumed) { |
data_offset_ += bytes_to_be_consumed; |
bytes_to_be_consumed = 0; |
+ // Garbage values are unavoidable, so this check will remain. |
+ if (queue_.front()->GetTimestamp().InMicroseconds() > 0) { |
+ int64 offset = (queue_.front()->GetDuration().InMicroseconds() * |
+ data_offset_) / queue_.front()->GetDataSize(); |
+ |
+ most_recent_time_ = queue_.front()->GetTimestamp() + |
+ base::TimeDelta::FromMicroseconds(offset); |
+ } |
} else { |
data_offset_ = 0; |
+ // Garbage values are unavoidable, so this check will remain. |
+ if (queue_.front()->GetTimestamp().InMicroseconds() > 0) { |
+ most_recent_time_ = queue_.front()->GetTimestamp() + |
+ queue_.front()->GetDuration(); |
+ } |
queue_.pop_front(); |
bytes_to_be_consumed -= front_remaining; |
} |
@@ -76,22 +90,22 @@ |
} |
void BufferQueue::Enqueue(Buffer* buffer_in) { |
+ if (queue_.empty() && buffer_in->GetTimestamp().InMicroseconds() > 0) { |
+ most_recent_time_ = buffer_in->GetTimestamp(); |
+ } |
queue_.push_back(buffer_in); |
size_in_bytes_ += buffer_in->GetDataSize(); |
} |
-base::TimeDelta BufferQueue::GetTime(double bytes_to_sec) { |
- double bytes_to_usec = bytes_to_sec * base::Time::kMicrosecondsPerSecond; |
- |
- return queue_.front()->GetTimestamp() + |
- base::TimeDelta::FromMicroseconds(static_cast<int64>( |
- data_offset_ * bytes_to_usec)); |
+base::TimeDelta BufferQueue::GetTime() { |
+ return most_recent_time_; |
} |
void BufferQueue::Clear() { |
queue_.clear(); |
size_in_bytes_ = 0; |
data_offset_ = 0; |
+ most_recent_time_ = base::TimeDelta(); |
} |
bool BufferQueue::IsEmpty() { |