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 3// found in the LICENSE file. 4 5#ifndef MEDIA_WEBM_CLUSTER_BUILDER_H_ 6#define MEDIA_WEBM_CLUSTER_BUILDER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "media/base/buffers.h" 11 12namespace media { 13 14class Cluster { 15 public: 16 Cluster(scoped_ptr<uint8[]> data, int size); 17 ~Cluster(); 18 19 const uint8* data() const { return data_.get(); } 20 int size() const { return size_; } 21 22 private: 23 scoped_ptr<uint8[]> data_; 24 int size_; 25 26 DISALLOW_IMPLICIT_CONSTRUCTORS(Cluster); 27}; 28 29class ClusterBuilder { 30 public: 31 ClusterBuilder(); 32 ~ClusterBuilder(); 33 34 void SetClusterTimecode(int64 cluster_timecode); 35 void AddSimpleBlock(int track_num, int64 timecode, int flags, 36 const uint8* data, int size); 37 void AddBlockGroup(int track_num, int64 timecode, int duration, int flags, 38 const uint8* data, int size); 39 40 scoped_ptr<Cluster> Finish(); 41 42 private: 43 void Reset(); 44 void ExtendBuffer(int bytes_needed); 45 void UpdateUInt64(int offset, int64 value); 46 void WriteBlock(uint8* buf, int track_num, int64 timecode, int flags, 47 const uint8* data, int size); 48 49 scoped_ptr<uint8[]> buffer_; 50 int buffer_size_; 51 int bytes_used_; 52 int64 cluster_timecode_; 53 54 DISALLOW_COPY_AND_ASSIGN(ClusterBuilder); 55}; 56 57} // namespace media 58 59#endif // MEDIA_WEBM_CLUSTER_BUILDER_H_ 60