15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/buffers.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Cluster { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Cluster(scoped_ptr<uint8[]> data, int size); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Cluster(); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8* data() const { return data_.get(); } 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size() const { return size_; } 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<uint8[]> data_; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size_; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(Cluster); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ClusterBuilder { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClusterBuilder(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ClusterBuilder(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetClusterTimecode(int64 cluster_timecode); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddSimpleBlock(int track_num, int64 timecode, int flags, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8* data, int size); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddBlockGroup(int track_num, int64 timecode, int duration, int flags, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8* data, int size); 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AddBlockGroupWithoutBlockDuration(int track_num, int64 timecode, 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int flags, const uint8* data, int size); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Cluster> Finish(); 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<Cluster> FinishWithUnknownSize(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AddBlockGroupInternal(int track_num, int64 timecode, 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool include_block_duration, int duration, 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int flags, const uint8* data, int size); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Reset(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExtendBuffer(int bytes_needed); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateUInt64(int offset, int64 value); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteBlock(uint8* buf, int track_num, int64 timecode, int flags, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8* data, int size); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<uint8[]> buffer_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int buffer_size_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int bytes_used_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 cluster_timecode_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ClusterBuilder); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_ 66