| 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/cluster_builder.h" | 5 #include "media/formats/webm/cluster_builder.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/formats/webm/webm_constants.h" |
| 9 | 10 |
| 10 namespace media { | 11 namespace media { |
| 11 | 12 |
| 12 static const uint8 kClusterHeader[] = { | 13 static const uint8 kClusterHeader[] = { |
| 13 0x1F, 0x43, 0xB6, 0x75, // CLUSTER ID | 14 0x1F, 0x43, 0xB6, 0x75, // CLUSTER ID |
| 14 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // cluster(size = 0) | 15 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // cluster(size = 0) |
| 15 0xE7, // Timecode ID | 16 0xE7, // Timecode ID |
| 16 0x88, // timecode(size=8) | 17 0x88, // timecode(size=8) |
| 17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // timecode value | 18 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // timecode value |
| 18 }; | 19 }; |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 scoped_ptr<Cluster> ClusterBuilder::Finish() { | 174 scoped_ptr<Cluster> ClusterBuilder::Finish() { |
| 174 DCHECK_NE(cluster_timecode_, -1); | 175 DCHECK_NE(cluster_timecode_, -1); |
| 175 | 176 |
| 176 UpdateUInt64(kClusterSizeOffset, bytes_used_ - (kClusterSizeOffset + 8)); | 177 UpdateUInt64(kClusterSizeOffset, bytes_used_ - (kClusterSizeOffset + 8)); |
| 177 | 178 |
| 178 scoped_ptr<Cluster> ret(new Cluster(buffer_.Pass(), bytes_used_)); | 179 scoped_ptr<Cluster> ret(new Cluster(buffer_.Pass(), bytes_used_)); |
| 179 Reset(); | 180 Reset(); |
| 180 return ret.Pass(); | 181 return ret.Pass(); |
| 181 } | 182 } |
| 182 | 183 |
| 184 scoped_ptr<Cluster> ClusterBuilder::FinishWithUnknownSize() { |
| 185 DCHECK_NE(cluster_timecode_, -1); |
| 186 |
| 187 UpdateUInt64(kClusterSizeOffset, kWebMUnknownSize); |
| 188 |
| 189 scoped_ptr<Cluster> ret(new Cluster(buffer_.Pass(), bytes_used_)); |
| 190 Reset(); |
| 191 return ret.Pass(); |
| 192 } |
| 193 |
| 183 void ClusterBuilder::Reset() { | 194 void ClusterBuilder::Reset() { |
| 184 buffer_size_ = kInitialBufferSize; | 195 buffer_size_ = kInitialBufferSize; |
| 185 buffer_.reset(new uint8[buffer_size_]); | 196 buffer_.reset(new uint8[buffer_size_]); |
| 186 memcpy(buffer_.get(), kClusterHeader, sizeof(kClusterHeader)); | 197 memcpy(buffer_.get(), kClusterHeader, sizeof(kClusterHeader)); |
| 187 bytes_used_ = sizeof(kClusterHeader); | 198 bytes_used_ = sizeof(kClusterHeader); |
| 188 cluster_timecode_ = -1; | 199 cluster_timecode_ = -1; |
| 189 } | 200 } |
| 190 | 201 |
| 191 void ClusterBuilder::ExtendBuffer(int bytes_needed) { | 202 void ClusterBuilder::ExtendBuffer(int bytes_needed) { |
| 192 int new_buffer_size = 2 * buffer_size_; | 203 int new_buffer_size = 2 * buffer_size_; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 206 uint8* buf = buffer_.get() + offset; | 217 uint8* buf = buffer_.get() + offset; |
| 207 | 218 |
| 208 // Fill the last 7 bytes of size field in big-endian order. | 219 // Fill the last 7 bytes of size field in big-endian order. |
| 209 for (int i = 7; i > 0; i--) { | 220 for (int i = 7; i > 0; i--) { |
| 210 buf[i] = value & 0xff; | 221 buf[i] = value & 0xff; |
| 211 value >>= 8; | 222 value >>= 8; |
| 212 } | 223 } |
| 213 } | 224 } |
| 214 | 225 |
| 215 } // namespace media | 226 } // namespace media |
| OLD | NEW |