Shaka Packager SDK
Loading...
Searching...
No Matches
cluster_builder.h
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
3// found in the LICENSE file.
4
5#ifndef PACKAGER_MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_
6#define PACKAGER_MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_
7
8#include <cstdint>
9#include <memory>
10
11#include <packager/macros/classes.h>
12
13namespace shaka {
14namespace media {
15
16class Cluster {
17 public:
18 Cluster(std::unique_ptr<uint8_t[]> data, int size);
19 ~Cluster();
20
21 const uint8_t* data() const { return data_.get(); }
22 int size() const { return size_; }
23
24 private:
25 std::unique_ptr<uint8_t[]> data_;
26 int size_;
27
28 DISALLOW_IMPLICIT_CONSTRUCTORS(Cluster);
29};
30
32 public:
35
36 void SetClusterTimecode(int64_t cluster_timecode);
37 void AddSimpleBlock(int track_num,
38 int64_t timecode,
39 int flags,
40 const uint8_t* data,
41 int size);
42 void AddBlockGroup(int track_num,
43 int64_t timecode,
44 int duration,
45 int flags,
46 bool is_key_frame,
47 const uint8_t* data,
48 int size);
49 void AddBlockGroupWithoutBlockDuration(int track_num,
50 int64_t timecode,
51 int flags,
52 bool is_key_frame,
53 const uint8_t* data,
54 int size);
55
56 std::unique_ptr<Cluster> Finish();
57 std::unique_ptr<Cluster> FinishWithUnknownSize();
58
59 private:
60 void AddBlockGroupInternal(int track_num,
61 int64_t timecode,
62 bool include_block_duration,
63 int duration,
64 int flags,
65 bool is_key_frame,
66 const uint8_t* data,
67 int size);
68 void Reset();
69 void ExtendBuffer(int bytes_needed);
70 void UpdateUInt64(int offset, int64_t value);
71 void WriteBlock(uint8_t* buf,
72 int track_num,
73 int64_t timecode,
74 int flags,
75 const uint8_t* data,
76 int size);
77
78 std::unique_ptr<uint8_t[]> buffer_;
79 int buffer_size_;
80 int bytes_used_;
81 int64_t cluster_timecode_;
82
83 DISALLOW_COPY_AND_ASSIGN(ClusterBuilder);
84};
85
86} // namespace media
87} // namespace shaka
88
89#endif // PACKAGER_MEDIA_FORMATS_WEBM_CLUSTER_BUILDER_H_
All the methods that are virtual are virtual for mocking.