Chromium Code Reviews| Index: media/webm/webm_cluster_parser.cc |
| diff --git a/media/webm/webm_cluster_parser.cc b/media/webm/webm_cluster_parser.cc |
| index 9991d6b4d15a3fec60a407d84e59a1417b50dafc..1778a3ae267dd8bc358181d512c7b331dccc01eb 100644 |
| --- a/media/webm/webm_cluster_parser.cc |
| +++ b/media/webm/webm_cluster_parser.cc |
| @@ -64,6 +64,7 @@ WebMClusterParser::WebMClusterParser( |
| block_duration_(-1), |
| block_add_id_(-1), |
| block_additional_data_size_(-1), |
| + discard_padding_(-1), |
| cluster_timecode_(-1), |
| cluster_start_time_(kNoTimestamp()), |
| cluster_ended_(false), |
| @@ -137,6 +138,8 @@ WebMParserClient* WebMClusterParser::OnListStart(int id) { |
| block_data_.reset(); |
| block_data_size_ = -1; |
| block_duration_ = -1; |
| + discard_padding_ = -1; |
| + discard_padding_set_ = false; |
| } else if (id == kWebMIdBlockAdditions) { |
| block_add_id_ = -1; |
| block_additional_data_.reset(); |
| @@ -158,13 +161,16 @@ bool WebMClusterParser::OnListEnd(int id) { |
| bool result = ParseBlock(false, block_data_.get(), block_data_size_, |
| block_additional_data_.get(), |
| - block_additional_data_size_, block_duration_); |
| + block_additional_data_size_, block_duration_, |
| + discard_padding_); |
| block_data_.reset(); |
| block_data_size_ = -1; |
| block_duration_ = -1; |
| block_add_id_ = -1; |
| block_additional_data_.reset(); |
| block_additional_data_size_ = -1; |
| + discard_padding_ = discard_padding_set_ ? discard_padding_ : 0; |
|
acolwell GONE FROM CHROMIUM
2013/09/04 20:08:43
nit: Sorry if I wasn't clear. I meant to place thi
vignesh
2013/09/04 20:27:46
Done.
|
| + discard_padding_set_ = false; |
| return result; |
| } |
| @@ -180,6 +186,12 @@ bool WebMClusterParser::OnUInt(int id, int64 val) { |
| case kWebMIdBlockAddID: |
| dst = &block_add_id_; |
| break; |
| + case kWebMIdDiscardPadding: |
| + if (discard_padding_set_) |
| + return false; |
| + discard_padding_set_ = true; |
| + discard_padding_ = val; |
| + return true; |
| default: |
| return true; |
| } |
| @@ -191,7 +203,8 @@ bool WebMClusterParser::OnUInt(int id, int64 val) { |
| bool WebMClusterParser::ParseBlock(bool is_simple_block, const uint8* buf, |
| int size, const uint8* additional, |
| - int additional_size, int duration) { |
| + int additional_size, int duration, |
| + int64 discard_padding) { |
| if (size < 4) |
| return false; |
| @@ -219,13 +232,14 @@ bool WebMClusterParser::ParseBlock(bool is_simple_block, const uint8* buf, |
| const uint8* frame_data = buf + 4; |
| int frame_size = size - (frame_data - buf); |
| return OnBlock(is_simple_block, track_num, timecode, duration, flags, |
| - frame_data, frame_size, additional, additional_size); |
| + frame_data, frame_size, additional, additional_size, |
| + discard_padding); |
| } |
| bool WebMClusterParser::OnBinary(int id, const uint8* data, int size) { |
| switch (id) { |
| case kWebMIdSimpleBlock: |
| - return ParseBlock(true, data, size, NULL, -1, -1); |
| + return ParseBlock(true, data, size, NULL, -1, -1, -1); |
| case kWebMIdBlock: |
| if (block_data_) { |
| @@ -270,7 +284,8 @@ bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, |
| int block_duration, |
| int flags, |
| const uint8* data, int size, |
| - const uint8* additional, int additional_size) { |
| + const uint8* additional, int additional_size, |
| + int64 discard_padding) { |
| DCHECK_GE(size, 0); |
| if (cluster_timecode_ == -1) { |
| MEDIA_LOG(log_cb_) << "Got a block before cluster timecode."; |
| @@ -350,6 +365,11 @@ bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, |
| block_duration * timecode_multiplier_)); |
| } |
| + if (discard_padding != 0) { |
| + buffer->set_discard_padding(base::TimeDelta::FromMicroseconds( |
| + discard_padding / 1000)); |
| + } |
| + |
| return track->AddBuffer(buffer); |
| } |