@remotion/webcodecs 4.0.245 → 4.0.247

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/audio-decoder.d.ts +2 -1
  2. package/dist/audio-encoder.d.ts +2 -1
  3. package/dist/auto-select-writer.d.ts +1 -1
  4. package/dist/auto-select-writer.js +4 -4
  5. package/dist/convert-encoded-chunk.d.ts +0 -1
  6. package/dist/convert-encoded-chunk.js +1 -21
  7. package/dist/convert-media.d.ts +2 -1
  8. package/dist/convert-media.js +4 -2
  9. package/dist/create/event-emitter.d.ts +31 -0
  10. package/dist/create/event-emitter.js +25 -0
  11. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
  12. package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
  13. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
  14. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
  15. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
  16. package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
  17. package/dist/create/iso-base-media/create-colr.d.ts +6 -0
  18. package/dist/create/iso-base-media/create-colr.js +26 -0
  19. package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
  20. package/dist/create/iso-base-media/create-ftyp.js +22 -0
  21. package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
  22. package/dist/create/iso-base-media/create-ilst.js +14 -0
  23. package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
  24. package/dist/create/iso-base-media/create-iso-base-media.js +184 -0
  25. package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
  26. package/dist/create/iso-base-media/create-mdia.js +18 -0
  27. package/dist/create/iso-base-media/create-moov.d.ts +5 -0
  28. package/dist/create/iso-base-media/create-moov.js +18 -0
  29. package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
  30. package/dist/create/iso-base-media/create-mvhd.js +48 -0
  31. package/dist/create/iso-base-media/create-trak.d.ts +4 -0
  32. package/dist/create/iso-base-media/create-trak.js +17 -0
  33. package/dist/create/iso-base-media/create-udta.d.ts +1 -0
  34. package/dist/create/iso-base-media/create-udta.js +14 -0
  35. package/dist/create/iso-base-media/create-url.d.ts +1 -0
  36. package/dist/create/iso-base-media/create-url.js +16 -0
  37. package/dist/create/iso-base-media/example-stts.d.ts +3 -0
  38. package/dist/create/iso-base-media/example-stts.js +2797 -0
  39. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
  40. package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
  41. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
  42. package/dist/create/iso-base-media/ilst/create-too.js +27 -0
  43. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
  44. package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
  45. package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
  46. package/dist/create/iso-base-media/mp4-header.js +48 -0
  47. package/dist/create/iso-base-media/primitives.d.ts +26 -0
  48. package/dist/create/iso-base-media/primitives.js +133 -0
  49. package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
  50. package/dist/create/iso-base-media/serialize-track.js +63 -0
  51. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
  52. package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
  53. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
  54. package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
  55. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
  56. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
  57. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
  58. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
  59. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
  60. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +41 -0
  61. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
  62. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
  63. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
  64. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
  65. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
  66. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
  67. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
  68. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
  69. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
  70. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
  71. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
  72. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
  73. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
  74. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +51 -0
  75. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
  76. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
  77. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
  78. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
  79. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
  80. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
  81. package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
  82. package/dist/create/iso-base-media/udta/create-meta.js +20 -0
  83. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
  84. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
  85. package/dist/create/make-track-info.d.ts +20 -0
  86. package/dist/create/matroska/cluster-segment.d.ts +10 -0
  87. package/dist/create/matroska/cluster-segment.js +38 -0
  88. package/dist/create/matroska/cluster.d.ts +25 -0
  89. package/dist/create/matroska/cluster.js +76 -0
  90. package/dist/create/matroska/color.d.ts +2 -0
  91. package/dist/create/matroska/color.js +85 -0
  92. package/dist/create/matroska/create-matroska-media.d.ts +2 -0
  93. package/dist/create/matroska/create-matroska-media.js +189 -0
  94. package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
  95. package/dist/create/matroska/make-duration-with-padding.js +15 -0
  96. package/dist/create/matroska/matroska-cues.d.ts +6 -0
  97. package/dist/create/matroska/matroska-cues.js +49 -0
  98. package/dist/create/matroska/matroska-header.d.ts +1 -0
  99. package/dist/create/matroska/matroska-header.js +66 -0
  100. package/dist/create/matroska/matroska-info.d.ts +3 -0
  101. package/dist/create/matroska/matroska-info.js +33 -0
  102. package/dist/create/matroska/matroska-seek.d.ts +6 -0
  103. package/dist/create/matroska/matroska-seek.js +32 -0
  104. package/dist/create/matroska/matroska-segment.d.ts +3 -0
  105. package/dist/create/matroska/matroska-segment.js +13 -0
  106. package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
  107. package/dist/create/matroska/matroska-trackentry.js +249 -0
  108. package/dist/create/matroska/matroska-utils.d.ts +30 -0
  109. package/dist/create/matroska/matroska-utils.js +292 -0
  110. package/dist/create/media-fn.d.ts +32 -0
  111. package/dist/create/progress-tracker.d.ts +9 -0
  112. package/dist/create/progress-tracker.js +67 -0
  113. package/dist/create/timescale.d.ts +1 -0
  114. package/dist/create/timescale.js +4 -0
  115. package/dist/create/wav/create-wav.d.ts +2 -0
  116. package/dist/create/wav/create-wav.js +110 -0
  117. package/dist/create/with-resolvers.d.ts +10 -0
  118. package/dist/create/with-resolvers.js +28 -0
  119. package/dist/esm/buffer.mjs +74 -0
  120. package/dist/esm/index.mjs +2518 -40
  121. package/dist/esm/web-fs.mjs +92 -0
  122. package/dist/from-unix-timestamp.d.ts +1 -0
  123. package/dist/from-unix-timestamp.js +11 -0
  124. package/dist/index.d.ts +1 -0
  125. package/dist/io-manager/io-synchronizer.d.ts +1 -1
  126. package/dist/io-manager/io-synchronizer.js +5 -4
  127. package/dist/io-manager/make-timeout-promise.js +2 -2
  128. package/dist/on-audio-track.d.ts +3 -1
  129. package/dist/on-video-track.d.ts +3 -1
  130. package/dist/select-container-creator.d.ts +1 -1
  131. package/dist/select-container-creator.js +6 -4
  132. package/dist/test/avc1.test.d.ts +1 -0
  133. package/dist/test/avc1.test.js +39 -0
  134. package/dist/test/avcc.test.d.ts +1 -0
  135. package/dist/test/avcc.test.js +15 -0
  136. package/dist/test/cmt.test.d.ts +1 -0
  137. package/dist/test/cmt.test.js +13 -0
  138. package/dist/test/colr.test.d.ts +1 -0
  139. package/dist/test/colr.test.js +16 -0
  140. package/dist/test/create-ftyp.test.d.ts +1 -0
  141. package/dist/test/create-ftyp.test.js +47 -0
  142. package/dist/test/create-matroska.test.d.ts +1 -0
  143. package/dist/test/create-matroska.test.js +101 -0
  144. package/dist/test/create-mvhd.test.d.ts +1 -0
  145. package/dist/test/create-mvhd.test.js +108 -0
  146. package/dist/test/ctts.test.d.ts +1 -0
  147. package/dist/test/ctts.test.js +49 -0
  148. package/dist/test/dinf.test.d.ts +1 -0
  149. package/dist/test/dinf.test.js +12 -0
  150. package/dist/test/ilst.test.d.ts +1 -0
  151. package/dist/test/ilst.test.js +22 -0
  152. package/dist/test/mdhd.test.d.ts +1 -0
  153. package/dist/test/mdhd.test.js +17 -0
  154. package/dist/test/meta.test.d.ts +1 -0
  155. package/dist/test/meta.test.js +26 -0
  156. package/dist/test/mp4a.test.d.ts +1 -0
  157. package/dist/test/mp4a.test.js +24 -0
  158. package/dist/test/pasp.test.d.ts +1 -0
  159. package/dist/test/pasp.test.js +12 -0
  160. package/dist/test/stbl.test.js +166 -0
  161. package/dist/test/stco.test.d.ts +1 -0
  162. package/dist/test/stco.test.js +34 -0
  163. package/dist/test/stsc.test.d.ts +1 -0
  164. package/dist/test/stsc.test.js +63 -0
  165. package/dist/test/stsd.test.d.ts +1 -0
  166. package/dist/test/stsd.test.js +264 -0
  167. package/dist/test/stss.test.d.ts +1 -0
  168. package/dist/test/stss.test.js +14 -0
  169. package/dist/test/stsz.test.d.ts +1 -0
  170. package/dist/test/stsz.test.js +43 -0
  171. package/dist/test/stts.test.d.ts +1 -0
  172. package/dist/test/stts.test.js +12 -0
  173. package/dist/test/tkhd.test.d.ts +1 -0
  174. package/dist/test/tkhd.test.js +175 -0
  175. package/dist/test/too.test.d.ts +1 -0
  176. package/dist/test/too.test.js +12 -0
  177. package/dist/test/url.test.d.ts +1 -0
  178. package/dist/test/url.test.js +11 -0
  179. package/dist/truthy.d.ts +3 -0
  180. package/dist/truthy.js +6 -0
  181. package/dist/video-decoder.d.ts +2 -1
  182. package/dist/video-encoder.d.ts +2 -1
  183. package/dist/writers/buffer-implementation/writer.d.ts +2 -0
  184. package/dist/writers/buffer-implementation/writer.js +54 -0
  185. package/dist/writers/buffer.d.ts +2 -0
  186. package/dist/writers/buffer.js +7 -0
  187. package/dist/writers/web-fs.d.ts +3 -0
  188. package/dist/writers/web-fs.js +75 -0
  189. package/dist/writers/writer.d.ts +15 -0
  190. package/package.json +36 -5
  191. package/dist/get-operation-id.js +0 -1
  192. package/dist/resizing/resizing.d.ts +0 -13
  193. package/dist/resizing.d.ts +0 -13
  194. package/dist/rotate-video-frame.d.ts +0 -9
  195. package/dist/rotate-video-frame.js +0 -53
  196. package/dist/scaling.d.ts +0 -13
  197. /package/dist/{resizing.js → create/make-track-info.js} +0 -0
  198. /package/dist/{resizing/resizing.js → create/media-fn.js} +0 -0
  199. /package/dist/{get-operation-id.d.ts → test/stbl.test.d.ts} +0 -0
  200. /package/dist/{scaling.js → writers/writer.js} +0 -0
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaAudioTrackEntryBytes = exports.makeMatroskaVideoBytes = void 0;
4
+ const color_1 = require("./color");
5
+ const matroska_utils_1 = require("./matroska-utils");
6
+ const makeMatroskaVideoBytes = ({ color, width, height, }) => {
7
+ return (0, matroska_utils_1.makeMatroskaBytes)({
8
+ type: 'Video',
9
+ value: [
10
+ {
11
+ type: 'PixelWidth',
12
+ value: {
13
+ value: width,
14
+ byteLength: null,
15
+ },
16
+ minVintWidth: null,
17
+ },
18
+ {
19
+ type: 'PixelHeight',
20
+ value: {
21
+ value: height,
22
+ byteLength: null,
23
+ },
24
+ minVintWidth: null,
25
+ },
26
+ {
27
+ type: 'FlagInterlaced',
28
+ value: {
29
+ // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
30
+ // 5.1.4.1.28.1.
31
+ value: 2, // 2 - progressive, no interlaced
32
+ byteLength: null,
33
+ },
34
+ minVintWidth: null,
35
+ },
36
+ (0, color_1.makeMatroskaColorBytes)(color),
37
+ ],
38
+ minVintWidth: null,
39
+ });
40
+ };
41
+ exports.makeMatroskaVideoBytes = makeMatroskaVideoBytes;
42
+ const makeVideoCodecId = (codecId) => {
43
+ if (codecId === 'vp8') {
44
+ return 'V_VP8';
45
+ }
46
+ if (codecId === 'vp9') {
47
+ return 'V_VP9';
48
+ }
49
+ if (codecId === 'h264') {
50
+ return 'V_MPEG4/ISO/AVC';
51
+ }
52
+ if (codecId === 'av1') {
53
+ return 'V_AV1';
54
+ }
55
+ if (codecId === 'h265') {
56
+ return 'V_MPEGH/ISO/HEVC';
57
+ }
58
+ if (codecId === 'prores') {
59
+ return 'V_PRORES';
60
+ }
61
+ throw new Error(`Unknown codec: ${codecId}`);
62
+ };
63
+ const makeAudioCodecId = (codecId) => {
64
+ if (codecId === 'opus') {
65
+ return 'A_OPUS';
66
+ }
67
+ if (codecId === 'aac') {
68
+ return 'A_AAC';
69
+ }
70
+ if (codecId === 'mp3') {
71
+ return 'A_MPEG/L3';
72
+ }
73
+ if (codecId === 'vorbis') {
74
+ return 'A_VORBIS';
75
+ }
76
+ if (codecId === 'pcm-u8') {
77
+ return 'A_PCM/INT/LIT';
78
+ }
79
+ if (codecId === 'pcm-s16') {
80
+ return 'A_PCM/INT/LIT';
81
+ }
82
+ if (codecId === 'pcm-s24') {
83
+ return 'A_PCM/INT/LIT';
84
+ }
85
+ if (codecId === 'pcm-s32') {
86
+ return 'A_PCM/INT/LIT';
87
+ }
88
+ if (codecId === 'pcm-f32') {
89
+ return 'A_PCM/INT/LIT';
90
+ }
91
+ if (codecId === 'aiff') {
92
+ throw new Error('aiff is not supported in Matroska');
93
+ }
94
+ throw new Error(`Unknown codec: ${codecId}`);
95
+ };
96
+ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }) => {
97
+ return (0, matroska_utils_1.makeMatroskaBytes)({
98
+ type: 'TrackEntry',
99
+ minVintWidth: null,
100
+ value: [
101
+ {
102
+ type: 'TrackNumber',
103
+ value: {
104
+ value: trackNumber,
105
+ byteLength: null,
106
+ },
107
+ minVintWidth: null,
108
+ },
109
+ {
110
+ type: 'TrackUID',
111
+ value: '0x188FEB95C8EFABA',
112
+ minVintWidth: null,
113
+ },
114
+ {
115
+ type: 'TrackType',
116
+ value: {
117
+ value: 2,
118
+ byteLength: null,
119
+ },
120
+ minVintWidth: null,
121
+ },
122
+ {
123
+ type: 'CodecID',
124
+ value: makeAudioCodecId(codec),
125
+ minVintWidth: null,
126
+ },
127
+ {
128
+ type: 'Audio',
129
+ value: [
130
+ {
131
+ type: 'Channels',
132
+ minVintWidth: null,
133
+ value: {
134
+ value: numberOfChannels,
135
+ byteLength: null,
136
+ },
137
+ },
138
+ {
139
+ type: 'SamplingFrequency',
140
+ minVintWidth: null,
141
+ value: {
142
+ value: sampleRate,
143
+ size: '64',
144
+ },
145
+ },
146
+ {
147
+ type: 'BitDepth',
148
+ minVintWidth: null,
149
+ value: {
150
+ value: 32,
151
+ byteLength: null,
152
+ },
153
+ },
154
+ ],
155
+ minVintWidth: null,
156
+ },
157
+ codecPrivate
158
+ ? {
159
+ type: 'CodecPrivate',
160
+ minVintWidth: null,
161
+ value: codecPrivate,
162
+ }
163
+ : null,
164
+ ].filter(Boolean),
165
+ });
166
+ };
167
+ exports.makeMatroskaAudioTrackEntryBytes = makeMatroskaAudioTrackEntryBytes;
168
+ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, codec, codecPrivate, }) => {
169
+ return (0, matroska_utils_1.makeMatroskaBytes)({
170
+ type: 'TrackEntry',
171
+ minVintWidth: null,
172
+ value: [
173
+ {
174
+ type: 'TrackNumber',
175
+ value: {
176
+ value: trackNumber,
177
+ byteLength: null,
178
+ },
179
+ minVintWidth: null,
180
+ },
181
+ {
182
+ type: 'TrackUID',
183
+ value: '0xab2171012bb9020a',
184
+ minVintWidth: null,
185
+ },
186
+ {
187
+ type: 'FlagLacing',
188
+ value: {
189
+ value: 0,
190
+ byteLength: null,
191
+ },
192
+ minVintWidth: null,
193
+ },
194
+ {
195
+ type: 'Language',
196
+ value: 'und',
197
+ minVintWidth: null,
198
+ },
199
+ {
200
+ type: 'FlagDefault',
201
+ value: {
202
+ value: 0,
203
+ byteLength: null,
204
+ },
205
+ minVintWidth: null,
206
+ },
207
+ {
208
+ type: 'CodecID',
209
+ value: makeVideoCodecId(codec),
210
+ minVintWidth: null,
211
+ },
212
+ {
213
+ type: 'TrackType',
214
+ value: {
215
+ value: 1, // 'video'
216
+ byteLength: null,
217
+ },
218
+ minVintWidth: null,
219
+ },
220
+ (0, exports.makeMatroskaVideoBytes)({
221
+ color,
222
+ width,
223
+ height,
224
+ }),
225
+ codecPrivate
226
+ ? {
227
+ type: 'CodecPrivate',
228
+ minVintWidth: null,
229
+ value: codecPrivate,
230
+ }
231
+ : null,
232
+ ].filter(Boolean),
233
+ });
234
+ };
235
+ exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
236
+ const makeMatroskaTracks = (tracks) => {
237
+ const bytesArr = tracks.map((t) => {
238
+ const bytes = t.type === 'video'
239
+ ? (0, exports.makeMatroskaVideoTrackEntryBytes)(t)
240
+ : (0, exports.makeMatroskaAudioTrackEntryBytes)(t);
241
+ return bytes;
242
+ });
243
+ return (0, matroska_utils_1.padMatroskaBytes)((0, matroska_utils_1.makeMatroskaBytes)({
244
+ type: 'Tracks',
245
+ value: bytesArr,
246
+ minVintWidth: null,
247
+ }), 500);
248
+ };
249
+ exports.makeMatroskaTracks = makeMatroskaTracks;
@@ -0,0 +1,30 @@
1
+ import type { Ebml, EbmlValue, Prettify } from '@remotion/media-parser';
2
+ import { MediaParserInternals } from '@remotion/media-parser';
3
+ export declare const getIdForName: (name: string) => EbmlMapKey;
4
+ export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array;
5
+ export type OffsetAndChildren = {
6
+ offset: number;
7
+ children: OffsetAndChildren[];
8
+ field: keyof typeof MediaParserInternals.matroskaElements;
9
+ };
10
+ export declare const incrementOffsetAndChildren: (offset: OffsetAndChildren, increment: number) => OffsetAndChildren;
11
+ export declare const matroskaToHex: (matrId: (typeof MediaParserInternals.matroskaElements)[keyof typeof MediaParserInternals.matroskaElements]) => Uint8Array;
12
+ export type BytesAndOffset = {
13
+ bytes: Uint8Array;
14
+ offsets: OffsetAndChildren;
15
+ };
16
+ export type EbmlValueOrUint8Array<T extends Ebml> = Uint8Array | EbmlValue<T, PossibleEbmlOrUint8Array>;
17
+ export type EbmlParsedOrUint8Array<T extends Ebml> = {
18
+ type: T['name'];
19
+ value: EbmlValueOrUint8Array<T>;
20
+ minVintWidth: number | null;
21
+ };
22
+ export declare const measureEBMLVarInt: (value: number) => 2 | 1 | 4 | 3 | 5 | 6;
23
+ export declare const getVariableInt: (value: number, minWidth: number | null) => Uint8Array;
24
+ export declare const makeMatroskaBytes: (fields: PossibleEbmlOrUint8Array) => BytesAndOffset;
25
+ export type PossibleEbmlOrUint8Array = Prettify<{
26
+ [key in keyof typeof MediaParserInternals.ebmlMap]: EbmlParsedOrUint8Array<(typeof MediaParserInternals.ebmlMap)[key]>;
27
+ }[keyof typeof MediaParserInternals.ebmlMap]> | BytesAndOffset;
28
+ export type EbmlMapKey = keyof typeof MediaParserInternals.ebmlMap;
29
+ export declare const padMatroskaBytes: (fields: PossibleEbmlOrUint8Array, totalLength: number) => BytesAndOffset[];
30
+ export declare function serializeUint16(value: number): Uint8Array;
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.padMatroskaBytes = exports.makeMatroskaBytes = exports.getVariableInt = exports.measureEBMLVarInt = exports.matroskaToHex = exports.incrementOffsetAndChildren = exports.combineUint8Arrays = exports.getIdForName = void 0;
4
+ exports.serializeUint16 = serializeUint16;
5
+ const media_parser_1 = require("@remotion/media-parser");
6
+ const getIdForName = (name) => {
7
+ var _a;
8
+ const value = (_a = Object.entries(media_parser_1.MediaParserInternals.matroskaElements).find(([key]) => key === name)) === null || _a === void 0 ? void 0 : _a[1];
9
+ if (!value) {
10
+ throw new Error(`Could not find id for name ${name}`);
11
+ }
12
+ return value;
13
+ };
14
+ exports.getIdForName = getIdForName;
15
+ function putUintDynamic(number, minimumLength) {
16
+ if (number < 0) {
17
+ throw new Error('This function is designed for non-negative integers only.');
18
+ }
19
+ // Calculate the minimum number of bytes needed to store the integer
20
+ const length = Math.max(minimumLength !== null && minimumLength !== void 0 ? minimumLength : 0, Math.ceil(Math.log2(number + 1) / 8));
21
+ const bytes = new Uint8Array(length);
22
+ for (let i = 0; i < length; i++) {
23
+ // Extract each byte from the number
24
+ bytes[length - 1 - i] = (number >> (8 * i)) & 0xff;
25
+ }
26
+ return bytes;
27
+ }
28
+ const makeFromStructure = (fields) => {
29
+ if ('bytes' in fields) {
30
+ return fields;
31
+ }
32
+ const arrays = [];
33
+ const struct = media_parser_1.MediaParserInternals.ebmlMap[(0, exports.getIdForName)(fields.type)];
34
+ if (struct.type === 'uint8array') {
35
+ return {
36
+ bytes: fields.value,
37
+ offsets: { offset: 0, children: [], field: fields.type },
38
+ };
39
+ }
40
+ if (struct.type === 'children') {
41
+ const children = [];
42
+ let bytesWritten = 0;
43
+ for (const item of fields.value) {
44
+ const { bytes, offsets } = (0, exports.makeMatroskaBytes)(item);
45
+ arrays.push(bytes);
46
+ children.push((0, exports.incrementOffsetAndChildren)(offsets, bytesWritten));
47
+ bytesWritten += bytes.byteLength;
48
+ }
49
+ return {
50
+ bytes: (0, exports.combineUint8Arrays)(arrays),
51
+ offsets: { offset: 0, children, field: fields.type },
52
+ };
53
+ }
54
+ if (struct.type === 'string') {
55
+ return {
56
+ bytes: new TextEncoder().encode(fields.value),
57
+ offsets: {
58
+ children: [],
59
+ offset: 0,
60
+ field: fields.type,
61
+ },
62
+ };
63
+ }
64
+ if (struct.type === 'uint') {
65
+ return {
66
+ bytes: putUintDynamic(fields.value.value, fields.value.byteLength),
67
+ offsets: {
68
+ children: [],
69
+ offset: 0,
70
+ field: fields.type,
71
+ },
72
+ };
73
+ }
74
+ if (struct.type === 'hex-string') {
75
+ const hex = fields.value.substring(2);
76
+ const arr = new Uint8Array(hex.length / 2);
77
+ for (let i = 0; i < hex.length; i += 2) {
78
+ const byte = parseInt(hex.substring(i, i + 2), 16);
79
+ arr[i / 2] = byte;
80
+ }
81
+ return {
82
+ bytes: arr,
83
+ offsets: {
84
+ children: [],
85
+ offset: 0,
86
+ field: fields.type,
87
+ },
88
+ };
89
+ }
90
+ if (struct.type === 'float') {
91
+ const value = fields.value;
92
+ if (value.size === '32') {
93
+ const dataView = new DataView(new ArrayBuffer(4));
94
+ dataView.setFloat32(0, value.value);
95
+ return {
96
+ bytes: new Uint8Array(dataView.buffer),
97
+ offsets: {
98
+ children: [],
99
+ offset: 0,
100
+ field: fields.type,
101
+ },
102
+ };
103
+ }
104
+ const dataView2 = new DataView(new ArrayBuffer(8));
105
+ dataView2.setFloat64(0, value.value);
106
+ return {
107
+ bytes: new Uint8Array(dataView2.buffer),
108
+ offsets: {
109
+ children: [],
110
+ offset: 0,
111
+ field: fields.type,
112
+ },
113
+ };
114
+ }
115
+ throw new Error('Unexpected type');
116
+ };
117
+ const combineUint8Arrays = (arrays) => {
118
+ if (arrays.length === 0) {
119
+ return new Uint8Array([]);
120
+ }
121
+ if (arrays.length === 1) {
122
+ return arrays[0];
123
+ }
124
+ let totalLength = 0;
125
+ for (const array of arrays) {
126
+ totalLength += array.length;
127
+ }
128
+ const result = new Uint8Array(totalLength);
129
+ let offset = 0;
130
+ for (const array of arrays) {
131
+ result.set(array, offset);
132
+ offset += array.length;
133
+ }
134
+ return result;
135
+ };
136
+ exports.combineUint8Arrays = combineUint8Arrays;
137
+ const incrementOffsetAndChildren = (offset, increment) => {
138
+ return {
139
+ offset: offset.offset + increment,
140
+ children: offset.children.map((c) => (0, exports.incrementOffsetAndChildren)(c, increment)),
141
+ field: offset.field,
142
+ };
143
+ };
144
+ exports.incrementOffsetAndChildren = incrementOffsetAndChildren;
145
+ const matroskaToHex = (matrId) => {
146
+ const numbers = new Uint8Array((matrId.length - 2) / 2);
147
+ for (let i = 2; i < matrId.length; i += 2) {
148
+ const hex = matrId.substring(i, i + 2);
149
+ numbers[(i - 2) / 2] = parseInt(hex, 16);
150
+ }
151
+ return numbers;
152
+ };
153
+ exports.matroskaToHex = matroskaToHex;
154
+ // https://github.com/Vanilagy/webm-muxer/blob/main/src/ebml.ts#L101
155
+ const measureEBMLVarInt = (value) => {
156
+ if (value < (1 << 7) - 1) {
157
+ /** Top bit is set, leaving 7 bits to hold the integer, but we can't store
158
+ * 127 because "all bits set to one" is a reserved value. Same thing for the
159
+ * other cases below:
160
+ */
161
+ return 1;
162
+ }
163
+ if (value < (1 << 14) - 1) {
164
+ return 2;
165
+ }
166
+ if (value < (1 << 21) - 1) {
167
+ return 3;
168
+ }
169
+ if (value < (1 << 28) - 1) {
170
+ return 4;
171
+ }
172
+ if (value < 2 ** 35 - 1) {
173
+ return 5;
174
+ }
175
+ if (value < 2 ** 42 - 1) {
176
+ return 6;
177
+ }
178
+ throw new Error('EBML VINT size not supported ' + value);
179
+ };
180
+ exports.measureEBMLVarInt = measureEBMLVarInt;
181
+ const getVariableInt = (value, minWidth) => {
182
+ const width = Math.max((0, exports.measureEBMLVarInt)(value), minWidth !== null && minWidth !== void 0 ? minWidth : 0);
183
+ switch (width) {
184
+ case 1:
185
+ return new Uint8Array([(1 << 7) | value]);
186
+ case 2:
187
+ return new Uint8Array([(1 << 6) | (value >> 8), value]);
188
+ case 3:
189
+ return new Uint8Array([(1 << 5) | (value >> 16), value >> 8, value]);
190
+ case 4:
191
+ return new Uint8Array([
192
+ (1 << 4) | (value >> 24),
193
+ value >> 16,
194
+ value >> 8,
195
+ value,
196
+ ]);
197
+ case 5:
198
+ /**
199
+ * JavaScript converts its doubles to 32-bit integers for bitwise
200
+ * operations, so we need to do a division by 2^32 instead of a
201
+ * right-shift of 32 to retain those top 3 bits
202
+ */
203
+ return new Uint8Array([
204
+ (1 << 3) | ((value / 2 ** 32) & 0x7),
205
+ value >> 24,
206
+ value >> 16,
207
+ value >> 8,
208
+ value,
209
+ ]);
210
+ case 6:
211
+ return new Uint8Array([
212
+ (1 << 2) | ((value / 2 ** 40) & 0x3),
213
+ (value / 2 ** 32) | 0,
214
+ value >> 24,
215
+ value >> 16,
216
+ value >> 8,
217
+ value,
218
+ ]);
219
+ case 7:
220
+ return new Uint8Array([
221
+ (1 << 1) | ((value / 2 ** 48) & 0x1),
222
+ (value / 2 ** 40) | 0,
223
+ (value / 2 ** 32) | 0,
224
+ value >> 24,
225
+ value >> 16,
226
+ value >> 8,
227
+ value,
228
+ ]);
229
+ case 8:
230
+ return new Uint8Array([
231
+ (1 << 0) | ((value / 2 ** 56) & 0x1),
232
+ (value / 2 ** 48) | 0,
233
+ (value / 2 ** 40) | 0,
234
+ (value / 2 ** 32) | 0,
235
+ value >> 24,
236
+ value >> 16,
237
+ value >> 8,
238
+ value,
239
+ ]);
240
+ default:
241
+ throw new Error('Bad EBML VINT size ' + width);
242
+ }
243
+ };
244
+ exports.getVariableInt = getVariableInt;
245
+ const makeMatroskaBytes = (fields) => {
246
+ if ('bytes' in fields) {
247
+ return fields;
248
+ }
249
+ const value = makeFromStructure(fields);
250
+ const header = (0, exports.matroskaToHex)((0, exports.getIdForName)(fields.type));
251
+ const size = (0, exports.getVariableInt)(value.bytes.length, fields.minVintWidth);
252
+ const bytes = (0, exports.combineUint8Arrays)([header, size, value.bytes]);
253
+ return {
254
+ bytes,
255
+ offsets: {
256
+ offset: value.offsets.offset,
257
+ field: value.offsets.field,
258
+ children: value.offsets.children.map((c) => {
259
+ return (0, exports.incrementOffsetAndChildren)(c, header.byteLength + size.byteLength);
260
+ }),
261
+ },
262
+ };
263
+ };
264
+ exports.makeMatroskaBytes = makeMatroskaBytes;
265
+ const padMatroskaBytes = (fields, totalLength) => {
266
+ const regular = (0, exports.makeMatroskaBytes)(fields);
267
+ const paddingLength = totalLength -
268
+ regular.bytes.byteLength -
269
+ (0, exports.matroskaToHex)(media_parser_1.MediaParserInternals.matroskaElements.Void).byteLength;
270
+ if (paddingLength < 0) {
271
+ throw new Error('ooops');
272
+ }
273
+ const padding = (0, exports.makeMatroskaBytes)({
274
+ type: 'Void',
275
+ value: new Uint8Array(paddingLength).fill(0),
276
+ minVintWidth: null,
277
+ });
278
+ return [
279
+ regular,
280
+ {
281
+ bytes: padding.bytes,
282
+ offsets: (0, exports.incrementOffsetAndChildren)(padding.offsets, regular.bytes.length),
283
+ },
284
+ ];
285
+ };
286
+ exports.padMatroskaBytes = padMatroskaBytes;
287
+ function serializeUint16(value) {
288
+ const buffer = new ArrayBuffer(2);
289
+ const view = new DataView(buffer);
290
+ view.setUint16(0, value);
291
+ return new Uint8Array(buffer);
292
+ }
@@ -0,0 +1,32 @@
1
+ import type { AudioOrVideoSample } from '@remotion/media-parser';
2
+ import type { LogLevel } from '../log';
3
+ import type { WriterInterface } from '../writers/writer';
4
+ import type { MakeTrackAudio, MakeTrackVideo } from './make-track-info';
5
+ import type { ProgressTracker } from './progress-tracker';
6
+ export type MediaFn = {
7
+ save: () => Promise<Blob>;
8
+ remove: () => Promise<void>;
9
+ addSample: (options: {
10
+ chunk: AudioOrVideoSample;
11
+ trackNumber: number;
12
+ isVideo: boolean;
13
+ codecPrivate: Uint8Array | null;
14
+ }) => Promise<void>;
15
+ addTrack: (track: Omit<MakeTrackAudio, 'trackNumber'> | Omit<MakeTrackVideo, 'trackNumber'>) => Promise<{
16
+ trackNumber: number;
17
+ }>;
18
+ addWaitForFinishPromise: (promise: () => Promise<void>) => void;
19
+ waitForFinish: () => Promise<void>;
20
+ updateTrackSampleRate: (options: {
21
+ trackNumber: number;
22
+ sampleRate: number;
23
+ }) => void;
24
+ };
25
+ export type MediaFnGeneratorInput = {
26
+ writer: WriterInterface;
27
+ onBytesProgress: (totalBytes: number) => void;
28
+ onMillisecondsProgress: (totalMilliseconds: number) => void;
29
+ logLevel: LogLevel;
30
+ filename: string;
31
+ progressTracker: ProgressTracker;
32
+ };
@@ -0,0 +1,9 @@
1
+ export declare const makeProgressTracker: () => {
2
+ registerTrack: (trackNumber: number) => void;
3
+ getSmallestProgress: () => number;
4
+ updateTrackProgress: (trackNumber: number, progress: number) => void;
5
+ waitForProgress: () => Promise<void>;
6
+ getStartingTimestamp: () => number;
7
+ setPossibleLowestTimestamp: (timestamp: number) => void;
8
+ };
9
+ export type ProgressTracker = ReturnType<typeof makeProgressTracker>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeProgressTracker = void 0;
4
+ const event_emitter_1 = require("./event-emitter");
5
+ const with_resolvers_1 = require("./with-resolvers");
6
+ // Make sure to distinguish null and undefined here
7
+ const makeProgressTracker = () => {
8
+ const trackNumberProgresses = {};
9
+ const eventEmitter = new event_emitter_1.IoEventEmitter();
10
+ let startingTimestamp = null;
11
+ const setPossibleLowestTimestamp = (timestamp) => {
12
+ if (startingTimestamp === null) {
13
+ startingTimestamp = timestamp;
14
+ }
15
+ else {
16
+ startingTimestamp = Math.min(startingTimestamp, timestamp);
17
+ }
18
+ };
19
+ const getStartingTimestamp = () => {
20
+ if (startingTimestamp === null) {
21
+ throw new Error('No starting timestamp');
22
+ }
23
+ return startingTimestamp;
24
+ };
25
+ const calculateSmallestProgress = () => {
26
+ const progressValues = Object.values(trackNumberProgresses).map((p) => {
27
+ if (p !== null) {
28
+ return p;
29
+ }
30
+ // The starting timestamp might not be 0, it might be very huge
31
+ // If no sample has arrived yet, we should assume the smallest value
32
+ // we know as the progress
33
+ if (startingTimestamp === null) {
34
+ throw new Error('No progress values to calculate smallest progress from');
35
+ }
36
+ return startingTimestamp;
37
+ });
38
+ return Math.min(...progressValues);
39
+ };
40
+ return {
41
+ registerTrack: (trackNumber) => {
42
+ trackNumberProgresses[trackNumber] = null;
43
+ },
44
+ getSmallestProgress: calculateSmallestProgress,
45
+ updateTrackProgress: (trackNumber, progress) => {
46
+ if (trackNumberProgresses[trackNumber] === undefined) {
47
+ throw new Error(`Tried to update progress for a track that was not registered: ${trackNumber}`);
48
+ }
49
+ trackNumberProgresses[trackNumber] = progress;
50
+ eventEmitter.dispatchEvent('progress', {
51
+ smallestProgress: calculateSmallestProgress(),
52
+ });
53
+ },
54
+ waitForProgress: () => {
55
+ const { promise, resolve } = (0, with_resolvers_1.withResolvers)();
56
+ const on = () => {
57
+ eventEmitter.removeEventListener('progress', on);
58
+ resolve();
59
+ };
60
+ eventEmitter.addEventListener('progress', on);
61
+ return promise;
62
+ },
63
+ getStartingTimestamp,
64
+ setPossibleLowestTimestamp,
65
+ };
66
+ };
67
+ exports.makeProgressTracker = makeProgressTracker;
@@ -0,0 +1 @@
1
+ export declare const CREATE_WEBM_TIME_SCALE = 1000000;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CREATE_WEBM_TIME_SCALE = void 0;
4
+ exports.CREATE_WEBM_TIME_SCALE = 1000000;
@@ -0,0 +1,2 @@
1
+ import type { MediaFn, MediaFnGeneratorInput } from '../media-fn';
2
+ export declare const createWav: ({ filename, logLevel, onBytesProgress, onMillisecondsProgress, writer, progressTracker, }: MediaFnGeneratorInput) => Promise<MediaFn>;