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

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

Issue 328653002: Fix WebMStreamParser to continue parsing after a cluster end (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « media/formats/webm/cluster_builder.h ('k') | media/formats/webm/webm_stream_parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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
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
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
OLDNEW
« no previous file with comments | « media/formats/webm/cluster_builder.h ('k') | media/formats/webm/webm_stream_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698