Index: media/webm/webm_stream_parser.cc |
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc |
index 602d22787c341b9603d49f317345678dc5f78320..5af622b8239325aafce1719438edfe4e1f381980 100644 |
--- a/media/webm/webm_stream_parser.cc |
+++ b/media/webm/webm_stream_parser.cc |
@@ -264,6 +264,14 @@ bool WebMStreamParser::Parse(const uint8* buf, int size) { |
return true; |
} |
+void WebMStreamParser::SetTimestampOffset(base::TimeDelta offset) { |
+ timestamp_offset_ = offset; |
+} |
+ |
+void WebMStreamParser::ClearTimestampOffset() { |
+ SetTimestampOffset(base::TimeDelta()); |
+} |
+ |
void WebMStreamParser::ChangeState(State new_state) { |
DVLOG(1) << "ChangeState() : " << state_ << " -> " << new_state; |
state_ = new_state; |
@@ -385,9 +393,14 @@ int WebMStreamParser::ParseCluster(const uint8* data, int size) { |
if (result <= 0) |
return result; |
- if (id == kWebMIdCluster) |
+ if (id == kWebMIdCluster) { |
waiting_for_buffers_ = true; |
+ // Wait until the beginning of a new cluster to set the buffer timestamp |
+ // offset. |
+ cluster_parser_->SetTimestampOffset(timestamp_offset_); |
+ } |
+ |
if (id == kWebMIdCues) { |
if (size < (result + element_size)) { |
// We don't have the whole element yet. Signal we need more data. |