| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/formats/webm/webm_cluster_parser.h" | 5 #include "media/formats/webm/webm_cluster_parser.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/sys_byteorder.h" | 10 #include "base/sys_byteorder.h" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 switch (id) { | 184 switch (id) { |
| 185 case kWebMIdTimecode: | 185 case kWebMIdTimecode: |
| 186 dst = &cluster_timecode_; | 186 dst = &cluster_timecode_; |
| 187 break; | 187 break; |
| 188 case kWebMIdBlockDuration: | 188 case kWebMIdBlockDuration: |
| 189 dst = &block_duration_; | 189 dst = &block_duration_; |
| 190 break; | 190 break; |
| 191 case kWebMIdBlockAddID: | 191 case kWebMIdBlockAddID: |
| 192 dst = &block_add_id_; | 192 dst = &block_add_id_; |
| 193 break; | 193 break; |
| 194 case kWebMIdDiscardPadding: | |
| 195 if (discard_padding_set_) | |
| 196 return false; | |
| 197 discard_padding_set_ = true; | |
| 198 discard_padding_ = val; | |
| 199 return true; | |
| 200 default: | 194 default: |
| 201 return true; | 195 return true; |
| 202 } | 196 } |
| 203 if (*dst != -1) | 197 if (*dst != -1) |
| 204 return false; | 198 return false; |
| 205 *dst = val; | 199 *dst = val; |
| 206 return true; | 200 return true; |
| 207 } | 201 } |
| 208 | 202 |
| 209 bool WebMClusterParser::ParseBlock(bool is_simple_block, const uint8* buf, | 203 bool WebMClusterParser::ParseBlock(bool is_simple_block, const uint8* buf, |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 // First 8 bytes of side_data in DecoderBuffer is the BlockAddID | 265 // First 8 bytes of side_data in DecoderBuffer is the BlockAddID |
| 272 // element's value in Big Endian format. This is done to mimic ffmpeg | 266 // element's value in Big Endian format. This is done to mimic ffmpeg |
| 273 // demuxer's behavior. | 267 // demuxer's behavior. |
| 274 block_additional_data_size_ = size + sizeof(block_add_id); | 268 block_additional_data_size_ = size + sizeof(block_add_id); |
| 275 block_additional_data_.reset(new uint8[block_additional_data_size_]); | 269 block_additional_data_.reset(new uint8[block_additional_data_size_]); |
| 276 memcpy(block_additional_data_.get(), &block_add_id, | 270 memcpy(block_additional_data_.get(), &block_add_id, |
| 277 sizeof(block_add_id)); | 271 sizeof(block_add_id)); |
| 278 memcpy(block_additional_data_.get() + 8, data, size); | 272 memcpy(block_additional_data_.get() + 8, data, size); |
| 279 return true; | 273 return true; |
| 280 } | 274 } |
| 275 case kWebMIdDiscardPadding: { |
| 276 if (discard_padding_set_ || size <= 0 || size > 8) |
| 277 return false; |
| 278 discard_padding_set_ = true; |
| 281 | 279 |
| 280 // Read in the big-endian integer. |
| 281 discard_padding_ = static_cast<int8>(data[0]); |
| 282 for (int i = 1; i < size; ++i) |
| 283 discard_padding_ = (discard_padding_ << 8) | data[i]; |
| 284 |
| 285 return true; |
| 286 } |
| 282 default: | 287 default: |
| 283 return true; | 288 return true; |
| 284 } | 289 } |
| 285 } | 290 } |
| 286 | 291 |
| 287 bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, | 292 bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, |
| 288 int timecode, | 293 int timecode, |
| 289 int block_duration, | 294 int block_duration, |
| 290 int flags, | 295 int flags, |
| 291 const uint8* data, int size, | 296 const uint8* data, int size, |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 WebMClusterParser::FindTextTrack(int track_num) { | 579 WebMClusterParser::FindTextTrack(int track_num) { |
| 575 const TextTrackMap::iterator it = text_track_map_.find(track_num); | 580 const TextTrackMap::iterator it = text_track_map_.find(track_num); |
| 576 | 581 |
| 577 if (it == text_track_map_.end()) | 582 if (it == text_track_map_.end()) |
| 578 return NULL; | 583 return NULL; |
| 579 | 584 |
| 580 return &it->second; | 585 return &it->second; |
| 581 } | 586 } |
| 582 | 587 |
| 583 } // namespace media | 588 } // namespace media |
| OLD | NEW |