OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/webm/webm_cluster_parser.h" | 5 #include "media/webm/webm_cluster_parser.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "media/base/data_buffer.h" | 8 #include "media/base/data_buffer.h" |
9 #include "media/base/decrypt_config.h" | 9 #include "media/base/decrypt_config.h" |
10 #include "media/webm/webm_constants.h" | 10 #include "media/webm/webm_constants.h" |
11 | 11 |
12 namespace media { | 12 namespace media { |
13 | 13 |
14 WebMClusterParser::WebMClusterParser(int64 timecode_scale, | 14 WebMClusterParser::WebMClusterParser(int64 timecode_scale, |
15 int audio_track_num, | 15 int audio_track_num, |
16 int video_track_num, | 16 int video_track_num, |
17 const uint8* video_encryption_key_id, | 17 const uint8* video_encryption_key_id, |
18 int video_encryption_key_id_size) | 18 int video_encryption_key_id_size) |
19 : timecode_multiplier_(timecode_scale / 1000.0), | 19 : timecode_multiplier_(timecode_scale / 1000.0), |
20 video_encryption_key_id_size_(video_encryption_key_id_size), | 20 video_encryption_key_id_size_(video_encryption_key_id_size), |
21 parser_(kWebMIdCluster, this), | 21 parser_(kWebMIdCluster, this), |
22 last_block_timecode_(-1), | 22 last_block_timecode_(-1), |
23 block_data_size_(-1), | 23 block_data_size_(-1), |
24 block_duration_(-1), | 24 block_duration_(-1), |
25 cluster_timecode_(-1), | 25 cluster_timecode_(-1), |
26 cluster_start_time_(kNoTimestamp()), | 26 cluster_start_time_(kNoTimestamp()), |
27 cluster_ended_(false), | |
27 audio_(audio_track_num), | 28 audio_(audio_track_num), |
28 video_(video_track_num) { | 29 video_(video_track_num) { |
29 CHECK_GE(video_encryption_key_id_size, 0); | 30 CHECK_GE(video_encryption_key_id_size, 0); |
30 if (video_encryption_key_id_size > 0) { | 31 if (video_encryption_key_id_size > 0) { |
31 video_encryption_key_id_.reset(new uint8[video_encryption_key_id_size]); | 32 video_encryption_key_id_.reset(new uint8[video_encryption_key_id_size]); |
32 memcpy(video_encryption_key_id_.get(), video_encryption_key_id, | 33 memcpy(video_encryption_key_id_.get(), video_encryption_key_id, |
33 video_encryption_key_id_size); | 34 video_encryption_key_id_size); |
34 } | 35 } |
35 } | 36 } |
36 | 37 |
37 WebMClusterParser::~WebMClusterParser() {} | 38 WebMClusterParser::~WebMClusterParser() {} |
38 | 39 |
39 void WebMClusterParser::Reset() { | 40 void WebMClusterParser::Reset() { |
40 last_block_timecode_ = -1; | 41 last_block_timecode_ = -1; |
41 cluster_timecode_ = -1; | 42 cluster_timecode_ = -1; |
42 cluster_start_time_ = kNoTimestamp(); | 43 cluster_start_time_ = kNoTimestamp(); |
acolwell GONE FROM CHROMIUM
2012/07/20 18:21:01
cluster_ended_ = false
vrk (LEFT CHROMIUM)
2012/07/25 17:16:48
Done.
| |
43 parser_.Reset(); | 44 parser_.Reset(); |
44 audio_.Reset(); | 45 audio_.Reset(); |
45 video_.Reset(); | 46 video_.Reset(); |
46 } | 47 } |
47 | 48 |
48 int WebMClusterParser::Parse(const uint8* buf, int size) { | 49 int WebMClusterParser::Parse(const uint8* buf, int size) { |
49 audio_.Reset(); | 50 audio_.Reset(); |
50 video_.Reset(); | 51 video_.Reset(); |
51 | 52 |
52 int result = parser_.Parse(buf, size); | 53 int result = parser_.Parse(buf, size); |
53 | 54 |
54 if (result <= 0) | 55 if (result <= 0) { |
56 cluster_ended_ = false; | |
55 return result; | 57 return result; |
58 } | |
56 | 59 |
57 if (parser_.IsParsingComplete()) { | 60 cluster_ended_ = parser_.IsParsingComplete(); |
61 if (cluster_ended_) { | |
58 // If there were no buffers in this cluster, set the cluster start time to | 62 // If there were no buffers in this cluster, set the cluster start time to |
59 // be the |cluster_timecode_|. | 63 // be the |cluster_timecode_|. |
60 if (cluster_start_time_ == kNoTimestamp()) { | 64 if (cluster_start_time_ == kNoTimestamp()) { |
61 DCHECK_GT(cluster_timecode_, -1); | 65 DCHECK_GT(cluster_timecode_, -1); |
62 cluster_start_time_ = base::TimeDelta::FromMicroseconds( | 66 cluster_start_time_ = base::TimeDelta::FromMicroseconds( |
63 cluster_timecode_ * timecode_multiplier_); | 67 cluster_timecode_ * timecode_multiplier_); |
64 } | 68 } |
65 | 69 |
66 // Reset the parser if we're done parsing so that | 70 // Reset the parser if we're done parsing so that |
67 // it is ready to accept another cluster on the next | 71 // it is ready to accept another cluster on the next |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
239 | 243 |
240 buffers_.push_back(buffer); | 244 buffers_.push_back(buffer); |
241 return true; | 245 return true; |
242 } | 246 } |
243 | 247 |
244 void WebMClusterParser::Track::Reset() { | 248 void WebMClusterParser::Track::Reset() { |
245 buffers_.clear(); | 249 buffers_.clear(); |
246 } | 250 } |
247 | 251 |
248 } // namespace media | 252 } // namespace media |
OLD | NEW |