OLD | NEW |
1 // Copyright (c) 2012 The WebM project authors. All Rights Reserved. | 1 // Copyright (c) 2012 The WebM project authors. All Rights Reserved. |
2 // | 2 // |
3 // Use of this source code is governed by a BSD-style license | 3 // Use of this source code is governed by a BSD-style license |
4 // that can be found in the LICENSE file in the root of the source | 4 // that can be found in the LICENSE file in the root of the source |
5 // tree. An additional intellectual property rights grant can be found | 5 // tree. An additional intellectual property rights grant can be found |
6 // in the file PATENTS. All contributing project authors may | 6 // in the file PATENTS. All contributing project authors may |
7 // be found in the AUTHORS file in the root of the source tree. | 7 // be found in the AUTHORS file in the root of the source tree. |
8 | 8 |
9 #ifndef MKVMUXERUTIL_HPP | 9 #ifndef MKVMUXERUTIL_HPP |
10 #define MKVMUXERUTIL_HPP | 10 #define MKVMUXERUTIL_HPP |
11 | 11 |
| 12 #include "mkvmuxer.hpp" |
12 #include "mkvmuxertypes.hpp" | 13 #include "mkvmuxertypes.hpp" |
13 | 14 |
14 namespace mkvmuxer { | 15 namespace mkvmuxer { |
15 | 16 |
16 class IMkvWriter; | 17 class IMkvWriter; |
17 | 18 |
18 const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; | 19 const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; |
19 const int64 kMaxBlockTimecode = 0x07FFFLL; | 20 const int64 kMaxBlockTimecode = 0x07FFFLL; |
20 | 21 |
21 // Writes out |value| in Big Endian order. Returns 0 on success. | 22 // Writes out |value| in Big Endian order. Returns 0 on success. |
22 int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); | 23 int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); |
23 | 24 |
24 // Returns the size in bytes of the element. | 25 // Returns the size in bytes of the element. |
25 int32 GetUIntSize(uint64 value); | 26 int32 GetUIntSize(uint64 value); |
| 27 int32 GetIntSize(int64 value); |
26 int32 GetCodedUIntSize(uint64 value); | 28 int32 GetCodedUIntSize(uint64 value); |
27 uint64 EbmlMasterElementSize(uint64 type, uint64 value); | 29 uint64 EbmlMasterElementSize(uint64 type, uint64 value); |
28 uint64 EbmlElementSize(uint64 type, int64 value); | 30 uint64 EbmlElementSize(uint64 type, int64 value); |
29 uint64 EbmlElementSize(uint64 type, uint64 value); | 31 uint64 EbmlElementSize(uint64 type, uint64 value); |
30 uint64 EbmlElementSize(uint64 type, float value); | 32 uint64 EbmlElementSize(uint64 type, float value); |
31 uint64 EbmlElementSize(uint64 type, const char* value); | 33 uint64 EbmlElementSize(uint64 type, const char* value); |
32 uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); | 34 uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); |
33 uint64 EbmlDateElementSize(uint64 type, int64 value); | 35 uint64 EbmlDateElementSize(uint64 type); |
34 | 36 |
35 // Creates an EBML coded number from |value| and writes it out. The size of | 37 // Creates an EBML coded number from |value| and writes it out. The size of |
36 // the coded number is determined by the value of |value|. |value| must not | 38 // the coded number is determined by the value of |value|. |value| must not |
37 // be in a coded form. Returns 0 on success. | 39 // be in a coded form. Returns 0 on success. |
38 int32 WriteUInt(IMkvWriter* writer, uint64 value); | 40 int32 WriteUInt(IMkvWriter* writer, uint64 value); |
39 | 41 |
40 // Creates an EBML coded number from |value| and writes it out. The size of | 42 // Creates an EBML coded number from |value| and writes it out. The size of |
41 // the coded number is determined by the value of |size|. |value| must not | 43 // the coded number is determined by the value of |size|. |value| must not |
42 // be in a coded form. Returns 0 on success. | 44 // be in a coded form. Returns 0 on success. |
43 int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); | 45 int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); |
44 | 46 |
45 // Output an Mkv master element. Returns true if the element was written. | 47 // Output an Mkv master element. Returns true if the element was written. |
46 bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); | 48 bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); |
47 | 49 |
48 // Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the | 50 // Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the |
49 // ID to |SerializeInt|. Returns 0 on success. | 51 // ID to |SerializeInt|. Returns 0 on success. |
50 int32 WriteID(IMkvWriter* writer, uint64 type); | 52 int32 WriteID(IMkvWriter* writer, uint64 type); |
51 | 53 |
52 // Output an Mkv non-master element. Returns true if the element was written. | 54 // Output an Mkv non-master element. Returns true if the element was written. |
53 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); | 55 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); |
| 56 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); |
54 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); | 57 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); |
55 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); | 58 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); |
56 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, | 59 bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, |
57 uint64 size); | 60 uint64 size); |
58 bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); | 61 bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); |
59 | 62 |
60 // Output an Mkv Simple Block. | 63 // Output a Mkv Frame. It decides the correct element to write (Block vs |
61 // Inputs: | 64 // SimpleBlock) based on the parameters of the Frame. |
62 // data: Pointer to the data. | 65 uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, |
63 // length: Length of the data. | 66 Cluster* cluster); |
64 // track_number: Track to add the data to. Value returned by Add track | |
65 // functions. Only values in the range [1, 126] are | |
66 // permitted. | |
67 // timecode: Relative timecode of the Block. Only values in the | |
68 // range [0, 2^15) are permitted. | |
69 // is_key: Non-zero value specifies that frame is a key frame. | |
70 uint64 WriteSimpleBlock(IMkvWriter* writer, const uint8* data, uint64 length, | |
71 uint64 track_number, int64 timecode, uint64 is_key); | |
72 | |
73 // Output a metadata keyframe, using a Block Group element. | |
74 // Inputs: | |
75 // data: Pointer to the (meta)data. | |
76 // length: Length of the (meta)data. | |
77 // track_number: Track to add the data to. Value returned by Add track | |
78 // functions. Only values in the range [1, 126] are | |
79 // permitted. | |
80 // timecode Timecode of frame, relative to cluster timecode. Only | |
81 // values in the range [0, 2^15) are permitted. | |
82 // duration_timecode Duration of frame, using timecode units. | |
83 uint64 WriteMetadataBlock(IMkvWriter* writer, const uint8* data, uint64 length, | |
84 uint64 track_number, int64 timecode, | |
85 uint64 duration_timecode); | |
86 | |
87 // Output an Mkv Block with BlockAdditional data. | |
88 // Inputs: | |
89 // data: Pointer to the data. | |
90 // length: Length of the data. | |
91 // additional: Pointer to the additional data | |
92 // additional_length: Length of the additional data. | |
93 // add_id: Value of BlockAddID element. | |
94 // track_number: Track to add the data to. Value returned by Add track | |
95 // functions. Only values in the range [1, 126] are | |
96 // permitted. | |
97 // timecode: Relative timecode of the Block. Only values in the | |
98 // range [0, 2^15) are permitted. | |
99 // is_key: Non-zero value specifies that frame is a key frame. | |
100 uint64 WriteBlockWithAdditional(IMkvWriter* writer, const uint8* data, | |
101 uint64 length, const uint8* additional, | |
102 uint64 additional_length, uint64 add_id, | |
103 uint64 track_number, int64 timecode, | |
104 uint64 is_key); | |
105 | |
106 // Output an Mkv Block with a DiscardPadding element. | |
107 // Inputs: | |
108 // data: Pointer to the data. | |
109 // length: Length of the data. | |
110 // discard_padding: DiscardPadding value. | |
111 // track_number: Track to add the data to. Value returned by Add track | |
112 // functions. Only values in the range [1, 126] are | |
113 // permitted. | |
114 // timecode: Relative timecode of the Block. Only values in the | |
115 // range [0, 2^15) are permitted. | |
116 // is_key: Non-zero value specifies that frame is a key frame. | |
117 uint64 WriteBlockWithDiscardPadding(IMkvWriter* writer, const uint8* data, | |
118 uint64 length, int64 discard_padding, | |
119 uint64 track_number, int64 timecode, | |
120 uint64 is_key); | |
121 | 67 |
122 // Output a void element. |size| must be the entire size in bytes that will be | 68 // Output a void element. |size| must be the entire size in bytes that will be |
123 // void. The function will calculate the size of the void header and subtract | 69 // void. The function will calculate the size of the void header and subtract |
124 // it from |size|. | 70 // it from |size|. |
125 uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); | 71 uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); |
126 | 72 |
127 // Returns the version number of the muxer in |major|, |minor|, |build|, | 73 // Returns the version number of the muxer in |major|, |minor|, |build|, |
128 // and |revision|. | 74 // and |revision|. |
129 void GetVersion(int32* major, int32* minor, int32* build, int32* revision); | 75 void GetVersion(int32* major, int32* minor, int32* build, int32* revision); |
130 | 76 |
131 // Returns a random number to be used for UID, using |seed| to seed | 77 // Returns a random number to be used for UID, using |seed| to seed |
132 // the random-number generator (see POSIX rand_r() for semantics). | 78 // the random-number generator (see POSIX rand_r() for semantics). |
133 uint64 MakeUID(unsigned int* seed); | 79 uint64 MakeUID(unsigned int* seed); |
134 | 80 |
135 } // end namespace mkvmuxer | 81 } // end namespace mkvmuxer |
136 | 82 |
137 #endif // MKVMUXERUTIL_HPP | 83 #endif // MKVMUXERUTIL_HPP |
OLD | NEW |