Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: media/formats/webm/cluster_builder.cc

Issue 1874413003: Convert media/formats to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <memory>
7 #include <utility> 8 #include <utility>
8 9
9 #include "base/logging.h" 10 #include "base/logging.h"
10 #include "media/base/data_buffer.h" 11 #include "media/base/data_buffer.h"
11 #include "media/formats/webm/webm_constants.h" 12 #include "media/formats/webm/webm_constants.h"
12 13
13 namespace media { 14 namespace media {
14 15
15 static const uint8_t kClusterHeader[] = { 16 static const uint8_t kClusterHeader[] = {
16 0x1F, 0x43, 0xB6, 0x75, // CLUSTER ID 17 0x1F, 0x43, 0xB6, 0x75, // CLUSTER ID
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 kSimpleBlockSizeOffset = 1, 50 kSimpleBlockSizeOffset = 1,
50 51
51 kBlockGroupSizeOffset = 1, 52 kBlockGroupSizeOffset = 1,
52 kBlockGroupWithoutBlockDurationBlockSizeOffset = 10, 53 kBlockGroupWithoutBlockDurationBlockSizeOffset = 10,
53 kBlockGroupDurationOffset = 11, 54 kBlockGroupDurationOffset = 11,
54 kBlockGroupBlockSizeOffset = 20, 55 kBlockGroupBlockSizeOffset = 20,
55 56
56 kInitialBufferSize = 32768, 57 kInitialBufferSize = 32768,
57 }; 58 };
58 59
59 Cluster::Cluster(scoped_ptr<uint8_t[]> data, int size) 60 Cluster::Cluster(std::unique_ptr<uint8_t[]> data, int size)
60 : data_(std::move(data)), size_(size) {} 61 : data_(std::move(data)), size_(size) {}
61 Cluster::~Cluster() {} 62 Cluster::~Cluster() {}
62 63
63 ClusterBuilder::ClusterBuilder() { Reset(); } 64 ClusterBuilder::ClusterBuilder() { Reset(); }
64 ClusterBuilder::~ClusterBuilder() {} 65 ClusterBuilder::~ClusterBuilder() {}
65 66
66 void ClusterBuilder::SetClusterTimecode(int64_t cluster_timecode) { 67 void ClusterBuilder::SetClusterTimecode(int64_t cluster_timecode) {
67 DCHECK_EQ(cluster_timecode_, -1); 68 DCHECK_EQ(cluster_timecode_, -1);
68 69
69 cluster_timecode_ = cluster_timecode; 70 cluster_timecode_ = cluster_timecode;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 DCHECK_GE(timecode_delta, -32768); 180 DCHECK_GE(timecode_delta, -32768);
180 DCHECK_LE(timecode_delta, 32767); 181 DCHECK_LE(timecode_delta, 32767);
181 182
182 buf[0] = 0x80 | (track_num & 0x7F); 183 buf[0] = 0x80 | (track_num & 0x7F);
183 buf[1] = (timecode_delta >> 8) & 0xff; 184 buf[1] = (timecode_delta >> 8) & 0xff;
184 buf[2] = timecode_delta & 0xff; 185 buf[2] = timecode_delta & 0xff;
185 buf[3] = flags & 0xff; 186 buf[3] = flags & 0xff;
186 memcpy(buf + 4, data, size); 187 memcpy(buf + 4, data, size);
187 } 188 }
188 189
189 scoped_ptr<Cluster> ClusterBuilder::Finish() { 190 std::unique_ptr<Cluster> ClusterBuilder::Finish() {
190 DCHECK_NE(cluster_timecode_, -1); 191 DCHECK_NE(cluster_timecode_, -1);
191 192
192 UpdateUInt64(kClusterSizeOffset, bytes_used_ - (kClusterSizeOffset + 8)); 193 UpdateUInt64(kClusterSizeOffset, bytes_used_ - (kClusterSizeOffset + 8));
193 194
194 scoped_ptr<Cluster> ret(new Cluster(std::move(buffer_), bytes_used_)); 195 std::unique_ptr<Cluster> ret(new Cluster(std::move(buffer_), bytes_used_));
195 Reset(); 196 Reset();
196 return ret; 197 return ret;
197 } 198 }
198 199
199 scoped_ptr<Cluster> ClusterBuilder::FinishWithUnknownSize() { 200 std::unique_ptr<Cluster> ClusterBuilder::FinishWithUnknownSize() {
200 DCHECK_NE(cluster_timecode_, -1); 201 DCHECK_NE(cluster_timecode_, -1);
201 202
202 UpdateUInt64(kClusterSizeOffset, kWebMUnknownSize); 203 UpdateUInt64(kClusterSizeOffset, kWebMUnknownSize);
203 204
204 scoped_ptr<Cluster> ret(new Cluster(std::move(buffer_), bytes_used_)); 205 std::unique_ptr<Cluster> ret(new Cluster(std::move(buffer_), bytes_used_));
205 Reset(); 206 Reset();
206 return ret; 207 return ret;
207 } 208 }
208 209
209 void ClusterBuilder::Reset() { 210 void ClusterBuilder::Reset() {
210 buffer_size_ = kInitialBufferSize; 211 buffer_size_ = kInitialBufferSize;
211 buffer_.reset(new uint8_t[buffer_size_]); 212 buffer_.reset(new uint8_t[buffer_size_]);
212 memcpy(buffer_.get(), kClusterHeader, sizeof(kClusterHeader)); 213 memcpy(buffer_.get(), kClusterHeader, sizeof(kClusterHeader));
213 bytes_used_ = sizeof(kClusterHeader); 214 bytes_used_ = sizeof(kClusterHeader);
214 cluster_timecode_ = -1; 215 cluster_timecode_ = -1;
215 } 216 }
216 217
217 void ClusterBuilder::ExtendBuffer(int bytes_needed) { 218 void ClusterBuilder::ExtendBuffer(int bytes_needed) {
218 int new_buffer_size = 2 * buffer_size_; 219 int new_buffer_size = 2 * buffer_size_;
219 220
220 while ((new_buffer_size - bytes_used_) < bytes_needed) 221 while ((new_buffer_size - bytes_used_) < bytes_needed)
221 new_buffer_size *= 2; 222 new_buffer_size *= 2;
222 223
223 scoped_ptr<uint8_t[]> new_buffer(new uint8_t[new_buffer_size]); 224 std::unique_ptr<uint8_t[]> new_buffer(new uint8_t[new_buffer_size]);
224 225
225 memcpy(new_buffer.get(), buffer_.get(), bytes_used_); 226 memcpy(new_buffer.get(), buffer_.get(), bytes_used_);
226 buffer_.reset(new_buffer.release()); 227 buffer_.reset(new_buffer.release());
227 buffer_size_ = new_buffer_size; 228 buffer_size_ = new_buffer_size;
228 } 229 }
229 230
230 void ClusterBuilder::UpdateUInt64(int offset, int64_t value) { 231 void ClusterBuilder::UpdateUInt64(int offset, int64_t value) {
231 DCHECK_LE(offset + 7, buffer_size_); 232 DCHECK_LE(offset + 7, buffer_size_);
232 uint8_t* buf = buffer_.get() + offset; 233 uint8_t* buf = buffer_.get() + offset;
233 234
234 // Fill the last 7 bytes of size field in big-endian order. 235 // Fill the last 7 bytes of size field in big-endian order.
235 for (int i = 7; i > 0; i--) { 236 for (int i = 7; i > 0; i--) {
236 buf[i] = value & 0xff; 237 buf[i] = value & 0xff;
237 value >>= 8; 238 value >>= 8;
238 } 239 }
239 } 240 }
240 241
241 } // namespace media 242 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698