@remotion/webcodecs 4.0.244 → 4.0.246

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 (201) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/audio-decoder.d.ts +2 -1
  3. package/dist/audio-encoder.d.ts +2 -1
  4. package/dist/auto-select-writer.d.ts +1 -1
  5. package/dist/auto-select-writer.js +4 -4
  6. package/dist/convert-encoded-chunk.d.ts +0 -1
  7. package/dist/convert-encoded-chunk.js +1 -21
  8. package/dist/convert-media.d.ts +3 -2
  9. package/dist/convert-media.js +5 -3
  10. package/dist/create/event-emitter.d.ts +31 -0
  11. package/dist/create/event-emitter.js +25 -0
  12. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
  13. package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
  14. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
  15. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
  16. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
  17. package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
  18. package/dist/create/iso-base-media/create-colr.d.ts +6 -0
  19. package/dist/create/iso-base-media/create-colr.js +26 -0
  20. package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
  21. package/dist/create/iso-base-media/create-ftyp.js +22 -0
  22. package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
  23. package/dist/create/iso-base-media/create-ilst.js +14 -0
  24. package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
  25. package/dist/create/iso-base-media/create-iso-base-media.js +184 -0
  26. package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
  27. package/dist/create/iso-base-media/create-mdia.js +18 -0
  28. package/dist/create/iso-base-media/create-moov.d.ts +5 -0
  29. package/dist/create/iso-base-media/create-moov.js +18 -0
  30. package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
  31. package/dist/create/iso-base-media/create-mvhd.js +48 -0
  32. package/dist/create/iso-base-media/create-trak.d.ts +4 -0
  33. package/dist/create/iso-base-media/create-trak.js +17 -0
  34. package/dist/create/iso-base-media/create-udta.d.ts +1 -0
  35. package/dist/create/iso-base-media/create-udta.js +14 -0
  36. package/dist/create/iso-base-media/create-url.d.ts +1 -0
  37. package/dist/create/iso-base-media/create-url.js +16 -0
  38. package/dist/create/iso-base-media/example-stts.d.ts +3 -0
  39. package/dist/create/iso-base-media/example-stts.js +2797 -0
  40. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
  41. package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
  42. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
  43. package/dist/create/iso-base-media/ilst/create-too.js +27 -0
  44. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
  45. package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
  46. package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
  47. package/dist/create/iso-base-media/mp4-header.js +48 -0
  48. package/dist/create/iso-base-media/primitives.d.ts +26 -0
  49. package/dist/create/iso-base-media/primitives.js +133 -0
  50. package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
  51. package/dist/create/iso-base-media/serialize-track.js +63 -0
  52. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
  53. package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
  54. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
  55. package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
  56. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
  57. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
  58. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
  59. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
  60. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
  61. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +41 -0
  62. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
  63. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
  64. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
  65. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
  66. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
  67. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
  68. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
  69. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
  70. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
  71. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
  72. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
  73. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
  74. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
  75. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +51 -0
  76. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
  77. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
  78. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
  79. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
  80. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
  81. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
  82. package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
  83. package/dist/create/iso-base-media/udta/create-meta.js +20 -0
  84. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
  85. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
  86. package/dist/create/make-track-info.d.ts +20 -0
  87. package/dist/create/matroska/cluster-segment.d.ts +10 -0
  88. package/dist/create/matroska/cluster-segment.js +38 -0
  89. package/dist/create/matroska/cluster.d.ts +25 -0
  90. package/dist/create/matroska/cluster.js +76 -0
  91. package/dist/create/matroska/color.d.ts +2 -0
  92. package/dist/create/matroska/color.js +85 -0
  93. package/dist/create/matroska/create-matroska-media.d.ts +2 -0
  94. package/dist/create/matroska/create-matroska-media.js +189 -0
  95. package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
  96. package/dist/create/matroska/make-duration-with-padding.js +15 -0
  97. package/dist/create/matroska/matroska-cues.d.ts +6 -0
  98. package/dist/create/matroska/matroska-cues.js +49 -0
  99. package/dist/create/matroska/matroska-header.d.ts +1 -0
  100. package/dist/create/matroska/matroska-header.js +66 -0
  101. package/dist/create/matroska/matroska-info.d.ts +3 -0
  102. package/dist/create/matroska/matroska-info.js +33 -0
  103. package/dist/create/matroska/matroska-seek.d.ts +6 -0
  104. package/dist/create/matroska/matroska-seek.js +32 -0
  105. package/dist/create/matroska/matroska-segment.d.ts +3 -0
  106. package/dist/create/matroska/matroska-segment.js +13 -0
  107. package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
  108. package/dist/create/matroska/matroska-trackentry.js +249 -0
  109. package/dist/create/matroska/matroska-utils.d.ts +30 -0
  110. package/dist/create/matroska/matroska-utils.js +292 -0
  111. package/dist/create/media-fn.d.ts +32 -0
  112. package/dist/create/progress-tracker.d.ts +9 -0
  113. package/dist/create/progress-tracker.js +67 -0
  114. package/dist/create/timescale.d.ts +1 -0
  115. package/dist/create/timescale.js +4 -0
  116. package/dist/create/wav/create-wav.d.ts +2 -0
  117. package/dist/create/wav/create-wav.js +110 -0
  118. package/dist/create/with-resolvers.d.ts +10 -0
  119. package/dist/create/with-resolvers.js +28 -0
  120. package/dist/esm/buffer.mjs +74 -0
  121. package/dist/esm/index.mjs +2518 -40
  122. package/dist/esm/web-fs.mjs +92 -0
  123. package/dist/from-unix-timestamp.d.ts +1 -0
  124. package/dist/from-unix-timestamp.js +11 -0
  125. package/dist/index.d.ts +1 -0
  126. package/dist/io-manager/io-synchronizer.d.ts +1 -1
  127. package/dist/io-manager/io-synchronizer.js +5 -4
  128. package/dist/io-manager/make-timeout-promise.js +2 -2
  129. package/dist/on-audio-track.d.ts +3 -1
  130. package/dist/on-video-track.d.ts +3 -1
  131. package/dist/select-container-creator.d.ts +1 -1
  132. package/dist/select-container-creator.js +6 -4
  133. package/dist/test/avc1.test.d.ts +1 -0
  134. package/dist/test/avc1.test.js +39 -0
  135. package/dist/test/avcc.test.d.ts +1 -0
  136. package/dist/test/avcc.test.js +15 -0
  137. package/dist/test/cmt.test.d.ts +1 -0
  138. package/dist/test/cmt.test.js +13 -0
  139. package/dist/test/colr.test.d.ts +1 -0
  140. package/dist/test/colr.test.js +16 -0
  141. package/dist/test/create-ftyp.test.d.ts +1 -0
  142. package/dist/test/create-ftyp.test.js +47 -0
  143. package/dist/test/create-matroska.test.d.ts +1 -0
  144. package/dist/test/create-matroska.test.js +101 -0
  145. package/dist/test/create-mvhd.test.d.ts +1 -0
  146. package/dist/test/create-mvhd.test.js +108 -0
  147. package/dist/test/ctts.test.d.ts +1 -0
  148. package/dist/test/ctts.test.js +49 -0
  149. package/dist/test/dinf.test.d.ts +1 -0
  150. package/dist/test/dinf.test.js +12 -0
  151. package/dist/test/ilst.test.d.ts +1 -0
  152. package/dist/test/ilst.test.js +22 -0
  153. package/dist/test/mdhd.test.d.ts +1 -0
  154. package/dist/test/mdhd.test.js +17 -0
  155. package/dist/test/meta.test.d.ts +1 -0
  156. package/dist/test/meta.test.js +26 -0
  157. package/dist/test/mp4a.test.d.ts +1 -0
  158. package/dist/test/mp4a.test.js +24 -0
  159. package/dist/test/pasp.test.d.ts +1 -0
  160. package/dist/test/pasp.test.js +12 -0
  161. package/dist/test/stbl.test.js +166 -0
  162. package/dist/test/stco.test.d.ts +1 -0
  163. package/dist/test/stco.test.js +34 -0
  164. package/dist/test/stsc.test.d.ts +1 -0
  165. package/dist/test/stsc.test.js +63 -0
  166. package/dist/test/stsd.test.d.ts +1 -0
  167. package/dist/test/stsd.test.js +264 -0
  168. package/dist/test/stss.test.d.ts +1 -0
  169. package/dist/test/stss.test.js +14 -0
  170. package/dist/test/stsz.test.d.ts +1 -0
  171. package/dist/test/stsz.test.js +43 -0
  172. package/dist/test/stts.test.d.ts +1 -0
  173. package/dist/test/stts.test.js +12 -0
  174. package/dist/test/tkhd.test.d.ts +1 -0
  175. package/dist/test/tkhd.test.js +175 -0
  176. package/dist/test/too.test.d.ts +1 -0
  177. package/dist/test/too.test.js +12 -0
  178. package/dist/test/url.test.d.ts +1 -0
  179. package/dist/test/url.test.js +11 -0
  180. package/dist/truthy.d.ts +3 -0
  181. package/dist/truthy.js +6 -0
  182. package/dist/video-decoder.d.ts +2 -1
  183. package/dist/video-encoder.d.ts +2 -1
  184. package/dist/writers/buffer-implementation/writer.d.ts +2 -0
  185. package/dist/writers/buffer-implementation/writer.js +54 -0
  186. package/dist/writers/buffer.d.ts +2 -0
  187. package/dist/writers/buffer.js +7 -0
  188. package/dist/writers/web-fs.d.ts +3 -0
  189. package/dist/writers/web-fs.js +75 -0
  190. package/dist/writers/writer.d.ts +15 -0
  191. package/package.json +36 -5
  192. package/dist/get-operation-id.js +0 -1
  193. package/dist/resizing/resizing.d.ts +0 -13
  194. package/dist/resizing.d.ts +0 -13
  195. package/dist/rotate-video-frame.d.ts +0 -9
  196. package/dist/rotate-video-frame.js +0 -53
  197. package/dist/scaling.d.ts +0 -13
  198. /package/dist/{resizing.js → create/make-track-info.js} +0 -0
  199. /package/dist/{resizing/resizing.js → create/media-fn.js} +0 -0
  200. /package/dist/{get-operation-id.d.ts → test/stbl.test.d.ts} +0 -0
  201. /package/dist/{scaling.js → writers/writer.js} +0 -0
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const example_stts_1 = require("../create/iso-base-media/example-stts");
5
+ const create_stss_1 = require("../create/iso-base-media/trak/mdia/minf/stbl/create-stss");
6
+ const reference = new Uint8Array([
7
+ 0x00, 0x00, 0x00, 0x28, 0x73, 0x74, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00,
8
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00,
9
+ 0x00, 0x29, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
10
+ 0x65,
11
+ ]);
12
+ (0, bun_test_1.test)('stss', () => {
13
+ (0, bun_test_1.expect)((0, create_stss_1.createStss)(example_stts_1.exampleVideoSamplePositions)).toEqual(reference);
14
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const example_stts_1 = require("../create/iso-base-media/example-stts");
5
+ const create_stsz_1 = require("../create/iso-base-media/trak/mdia/minf/stbl/create-stsz");
6
+ const refernce = new Uint8Array([
7
+ 0, 0, 3, 12, 115, 116, 115, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0,
8
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
9
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
10
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
11
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
12
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
13
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
14
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
15
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
16
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
17
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
18
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
19
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
20
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
21
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
22
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
23
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
24
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
25
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
26
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
27
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
28
+ 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0,
29
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
30
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
31
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
32
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
33
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0,
34
+ 3, 78, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
35
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
36
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
37
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
38
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0,
39
+ 3, 79, 0, 0, 3, 78, 0, 0, 3, 78, 0, 0, 3, 79,
40
+ ]);
41
+ (0, bun_test_1.test)('stsz', () => {
42
+ (0, bun_test_1.expect)((0, create_stsz_1.createStsz)(example_stts_1.exampleAudioSamplePositions)).toEqual(refernce);
43
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const example_stts_1 = require("../create/iso-base-media/example-stts");
5
+ const create_stts_1 = require("../create/iso-base-media/trak/mdia/minf/stbl/create-stts");
6
+ const reference = new Uint8Array([
7
+ 0x00, 0x00, 0x00, 0x18, 0x73, 0x74, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00,
8
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x04, 0x00,
9
+ ]);
10
+ (0, bun_test_1.test)('stts', () => {
11
+ return (0, bun_test_1.expect)((0, create_stts_1.createSttsAtom)(example_stts_1.exampleAudioSamplePositions)).toEqual(reference);
12
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const media_parser_1 = require("@remotion/media-parser");
4
+ const bun_test_1 = require("bun:test");
5
+ const create_tkhd_1 = require("../create/iso-base-media/trak/create-tkhd");
6
+ const buffer = Uint8Array.from([
7
+ // size, 32 bit
8
+ 0, 0, 0, 92,
9
+ // mvhd atom, 32 bit
10
+ 116, 107, 104, 100,
11
+ // version, 8 unsigned bit
12
+ 0,
13
+ // flags, 24 bit
14
+ 0, 0, 15,
15
+ // creation time, 32 bit
16
+ 226, 94, 106, 178,
17
+ // modification time, 32 bit
18
+ 226, 94, 106, 182,
19
+ // track id, 32 bit
20
+ 0, 0, 0, 5,
21
+ // reserved, 32 bit
22
+ 0, 0, 0, 0,
23
+ // duration, 32 bit
24
+ 0, 0, 7, 248,
25
+ // reserved, 32 bit
26
+ 0, 0, 0, 0,
27
+ // reserved, 32 bit
28
+ 0, 0, 0, 0,
29
+ // layer, 16 bit
30
+ 0, 0,
31
+ // alternate group, 16 bit
32
+ 0, 0,
33
+ // volume, 16 bit
34
+ 0, 0,
35
+ // reserved, 16 bit
36
+ 0, 0,
37
+ // matrix[0], 32 bit
38
+ 0, 1, 0, 0,
39
+ // matrix[1], 32 bit
40
+ 0, 0, 0, 0,
41
+ // matrix[2], 32 bit
42
+ 0, 0, 0, 0,
43
+ // matrix[3], 32 bit
44
+ 0, 0, 0, 0,
45
+ // matrix[4], 32 bit
46
+ 0, 1, 0, 0,
47
+ // matrix[5], 32 bit
48
+ 0, 0, 0, 0,
49
+ // matrix[6], 32 bit
50
+ 0, 0, 0, 0,
51
+ // matrix[7], 32 bit
52
+ 0, 0, 0, 0,
53
+ // matrix[8], 32 bit
54
+ 64, 0, 0, 0,
55
+ // width, 32 bit
56
+ 0, 0, 0, 0,
57
+ // height, 32 bit
58
+ 0, 0, 0, 0,
59
+ ]);
60
+ (0, bun_test_1.test)('Should be able to parse a TKHD box', () => {
61
+ const iterator = media_parser_1.MediaParserInternals.getArrayBufferIterator(buffer, null);
62
+ iterator.discard(8);
63
+ const mvhd = media_parser_1.MediaParserInternals.parseTkhd({
64
+ iterator,
65
+ offset: 0,
66
+ size: 92,
67
+ });
68
+ (0, bun_test_1.expect)(mvhd).toEqual({
69
+ type: 'tkhd-box',
70
+ boxSize: 92,
71
+ offset: 0,
72
+ alternateGroup: 0,
73
+ creationTime: 1714993714000,
74
+ duration: 2040,
75
+ modificationTime: 1714993718000,
76
+ trackId: 5,
77
+ version: 0,
78
+ layer: 0,
79
+ volume: 0,
80
+ matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
81
+ width: 0,
82
+ height: 0,
83
+ rotation: 0,
84
+ unrotatedWidth: 0,
85
+ unrotatedHeight: 0,
86
+ });
87
+ });
88
+ (0, bun_test_1.test)('Should be able to create a tkhd', () => {
89
+ (0, bun_test_1.expect)((0, create_tkhd_1.createTkhdForVideo)({
90
+ creationTime: 1714993714000,
91
+ modificationTime: 1714993718000,
92
+ trackId: 5,
93
+ duration: 2040,
94
+ volume: 0,
95
+ matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
96
+ width: 0,
97
+ height: 0,
98
+ flags: create_tkhd_1.TKHD_FLAGS.TRACK_ENABLED |
99
+ create_tkhd_1.TKHD_FLAGS.TRACK_IN_MOVIE |
100
+ create_tkhd_1.TKHD_FLAGS.TRACK_IN_PREVIEW |
101
+ create_tkhd_1.TKHD_FLAGS.TRACK_IN_POSTER,
102
+ timescale: 1000,
103
+ })).toEqual(buffer);
104
+ });
105
+ const buffer2 = new Uint8Array([
106
+ 0x00, 0x00, 0x00, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00,
107
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
108
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
110
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x38, 0x00, 0x00, 0x07, 0x80, 0x00,
113
+ 0x00,
114
+ ]);
115
+ (0, bun_test_1.test)('Should be able to parse a TKHD box 2', () => {
116
+ const iterator = media_parser_1.MediaParserInternals.getArrayBufferIterator(buffer2, null);
117
+ iterator.discard(8);
118
+ const mvhd = media_parser_1.MediaParserInternals.parseTkhd({
119
+ iterator,
120
+ offset: 0,
121
+ size: 92,
122
+ });
123
+ (0, bun_test_1.expect)(mvhd).toEqual({
124
+ type: 'tkhd-box',
125
+ boxSize: 92,
126
+ offset: 0,
127
+ alternateGroup: 0,
128
+ creationTime: null,
129
+ duration: 0,
130
+ modificationTime: null,
131
+ trackId: 1,
132
+ version: 0,
133
+ layer: 0,
134
+ volume: 0,
135
+ matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
136
+ width: 1080,
137
+ height: 1920,
138
+ rotation: 0,
139
+ unrotatedWidth: 1080,
140
+ unrotatedHeight: 1920,
141
+ });
142
+ (0, bun_test_1.expect)((0, create_tkhd_1.createTkhdForVideo)({
143
+ creationTime: null,
144
+ modificationTime: null,
145
+ duration: 0,
146
+ height: 1920,
147
+ width: 1080,
148
+ matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
149
+ trackId: 1,
150
+ volume: 0,
151
+ flags: create_tkhd_1.TKHD_FLAGS.TRACK_ENABLED | create_tkhd_1.TKHD_FLAGS.TRACK_IN_MOVIE,
152
+ timescale: 1000,
153
+ })).toEqual(buffer2);
154
+ });
155
+ const audioTkhd = new Uint8Array([
156
+ 0x00, 0x00, 0x00, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00,
157
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
158
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
160
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163
+ 0x0,
164
+ ]);
165
+ (0, bun_test_1.test)('tkhd', () => {
166
+ (0, bun_test_1.expect)((0, create_tkhd_1.createTkhdForAudio)({
167
+ creationTime: null,
168
+ flags: 3,
169
+ modificationTime: null,
170
+ trackId: 2,
171
+ duration: 4054,
172
+ volume: 1,
173
+ timescale: 1000,
174
+ })).toEqual(audioTkhd);
175
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const create_too_1 = require("../create/iso-base-media/ilst/create-too");
5
+ const reference = new Uint8Array([
6
+ 0x0, 0x00, 0x00, 0x24, 0xa9, 0x74, 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x1c, 0x64,
7
+ 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x61,
8
+ 0x76, 0x66, 0x36, 0x31, 0x2e, 0x37, 0x2e, 0x31, 0x30, 0x30,
9
+ ]);
10
+ (0, bun_test_1.test)('create too', () => {
11
+ (0, bun_test_1.expect)((0, create_too_1.createToo)('Lavf61.7.100')).toEqual(reference);
12
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bun_test_1 = require("bun:test");
4
+ const create_url_1 = require("../create/iso-base-media/create-url");
5
+ const reference = new Uint8Array([
6
+ 0x00, 0x00, 0x00, 0x0c, 0x75, 0x72, 0x6c, 0x20, 0x00, 0x00, 0x00, 0x01,
7
+ ]);
8
+ (0, bun_test_1.test)('url atom', () => {
9
+ const atom = (0, create_url_1.createUrlAtom)();
10
+ (0, bun_test_1.expect)(atom).toEqual(reference);
11
+ });
@@ -0,0 +1,3 @@
1
+ type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;
2
+ export declare function truthy<T>(value: T): value is Truthy<T>;
3
+ export {};
package/dist/truthy.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.truthy = truthy;
4
+ function truthy(value) {
5
+ return Boolean(value);
6
+ }
@@ -1,4 +1,5 @@
1
- import type { AudioOrVideoSample, LogLevel, ProgressTracker } from '@remotion/media-parser';
1
+ import type { AudioOrVideoSample, LogLevel } from '@remotion/media-parser';
2
+ import type { ProgressTracker } from './create/progress-tracker';
2
3
  export type WebCodecsVideoDecoder = {
3
4
  processSample: (videoSample: AudioOrVideoSample) => Promise<void>;
4
5
  waitForFinish: () => Promise<void>;
@@ -1,4 +1,5 @@
1
- import type { LogLevel, ProgressTracker } from '@remotion/media-parser';
1
+ import type { LogLevel } from '@remotion/media-parser';
2
+ import type { ProgressTracker } from './create/progress-tracker';
2
3
  import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
3
4
  export type WebCodecsVideoEncoder = {
4
5
  encodeFrame: (videoFrame: VideoFrame, timestamp: number) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { CreateContent } from '../writer';
2
+ export declare const createContent: CreateContent;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createContent = void 0;
4
+ const createContent = ({ filename, mimeType }) => {
5
+ const buf = new ArrayBuffer(0, {
6
+ // TODO: Educate that the buffer is limited to 2GB
7
+ maxByteLength: 2000000000,
8
+ });
9
+ if (!buf.resize) {
10
+ throw new Error('Could not create buffer writer');
11
+ }
12
+ const write = (newData) => {
13
+ const oldLength = buf.byteLength;
14
+ const newLength = oldLength + newData.byteLength;
15
+ buf.resize(newLength);
16
+ const newArray = new Uint8Array(buf);
17
+ newArray.set(newData, oldLength);
18
+ };
19
+ const updateDataAt = (position, newData) => {
20
+ const newArray = new Uint8Array(buf);
21
+ newArray.set(newData, position);
22
+ };
23
+ let writPromise = Promise.resolve();
24
+ let removed = false;
25
+ const writer = {
26
+ write: (arr) => {
27
+ writPromise = writPromise.then(() => write(arr));
28
+ return writPromise;
29
+ },
30
+ save: () => {
31
+ if (removed) {
32
+ return Promise.reject(new Error('Already called .remove() on the result'));
33
+ }
34
+ const arr = new Uint8Array(buf);
35
+ return Promise.resolve(
36
+ // TODO: Unhardcode MIME type and file name
37
+ new File([arr.slice()], filename, { type: mimeType }));
38
+ },
39
+ remove() {
40
+ removed = true;
41
+ return Promise.resolve();
42
+ },
43
+ getWrittenByteCount: () => buf.byteLength,
44
+ updateDataAt: (position, newData) => {
45
+ writPromise = writPromise.then(() => updateDataAt(position, newData));
46
+ return writPromise;
47
+ },
48
+ waitForFinish: async () => {
49
+ await writPromise;
50
+ },
51
+ };
52
+ return Promise.resolve(writer);
53
+ };
54
+ exports.createContent = createContent;
@@ -0,0 +1,2 @@
1
+ import type { WriterInterface } from './writer';
2
+ export declare const bufferWriter: WriterInterface;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bufferWriter = void 0;
4
+ const writer_1 = require("./buffer-implementation/writer");
5
+ exports.bufferWriter = {
6
+ createContent: writer_1.createContent,
7
+ };
@@ -0,0 +1,3 @@
1
+ import type { WriterInterface } from './writer';
2
+ export declare const webFsWriter: WriterInterface;
3
+ export declare const canUseWebFsWriter: () => Promise<boolean>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canUseWebFsWriter = exports.webFsWriter = void 0;
4
+ const createContent = async ({ filename }) => {
5
+ const directoryHandle = await navigator.storage.getDirectory();
6
+ const actualFilename = `__remotion_mediaparser:${filename}`;
7
+ const remove = async () => {
8
+ await directoryHandle.removeEntry(actualFilename, {
9
+ recursive: true,
10
+ });
11
+ };
12
+ await remove();
13
+ const fileHandle = await directoryHandle.getFileHandle(actualFilename, {
14
+ create: true,
15
+ });
16
+ const writable = await fileHandle.createWritable();
17
+ let written = 0;
18
+ let writPromise = Promise.resolve();
19
+ const write = async (arr) => {
20
+ await writable.write(arr);
21
+ written += arr.byteLength;
22
+ };
23
+ const updateDataAt = async (position, data) => {
24
+ await writable.seek(position);
25
+ await writable.write(data);
26
+ await writable.seek(written);
27
+ };
28
+ const writer = {
29
+ write: (arr) => {
30
+ writPromise = writPromise.then(() => write(arr));
31
+ return writPromise;
32
+ },
33
+ save: async () => {
34
+ try {
35
+ await writable.close();
36
+ }
37
+ catch (_a) {
38
+ // Ignore, could already be closed
39
+ }
40
+ const newHandle = await directoryHandle.getFileHandle(actualFilename, {
41
+ create: true,
42
+ });
43
+ const newFile = await newHandle.getFile();
44
+ return newFile;
45
+ },
46
+ getWrittenByteCount: () => written,
47
+ updateDataAt: (position, data) => {
48
+ writPromise = writPromise.then(() => updateDataAt(position, data));
49
+ return writPromise;
50
+ },
51
+ waitForFinish: async () => {
52
+ await writPromise;
53
+ },
54
+ remove,
55
+ };
56
+ return writer;
57
+ };
58
+ exports.webFsWriter = {
59
+ createContent,
60
+ };
61
+ const canUseWebFsWriter = async () => {
62
+ if (!('storage' in navigator)) {
63
+ return false;
64
+ }
65
+ if (!('getDirectory' in navigator.storage)) {
66
+ return false;
67
+ }
68
+ const directoryHandle = await navigator.storage.getDirectory();
69
+ const fileHandle = await directoryHandle.getFileHandle('remotion-probe-web-fs-support', {
70
+ create: true,
71
+ });
72
+ const canUse = fileHandle.createWritable !== undefined;
73
+ return canUse;
74
+ };
75
+ exports.canUseWebFsWriter = canUseWebFsWriter;
@@ -0,0 +1,15 @@
1
+ export type Writer = {
2
+ write: (arr: Uint8Array) => Promise<void>;
3
+ save: () => Promise<Blob>;
4
+ getWrittenByteCount: () => number;
5
+ updateDataAt: (position: number, data: Uint8Array) => Promise<void>;
6
+ waitForFinish: () => Promise<void>;
7
+ remove: () => Promise<void>;
8
+ };
9
+ export type CreateContent = (options: {
10
+ filename: string;
11
+ mimeType: string;
12
+ }) => Promise<Writer>;
13
+ export type WriterInterface = {
14
+ createContent: CreateContent;
15
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/webcodecs",
3
- "version": "4.0.244",
3
+ "version": "4.0.246",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/esm/index.mjs",
@@ -17,20 +17,51 @@
17
17
  "author": "Jonny Burger <jonny@remotion.dev>",
18
18
  "license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
19
19
  "dependencies": {
20
- "@remotion/media-parser": "4.0.244",
21
- "@remotion/licensing": "4.0.244"
20
+ "@remotion/media-parser": "4.0.246",
21
+ "@remotion/licensing": "4.0.246"
22
22
  },
23
23
  "peerDependencies": {},
24
24
  "devDependencies": {
25
25
  "@types/dom-webcodecs": "0.1.11",
26
26
  "eslint": "9.14.0",
27
- "@remotion/example-videos": "4.0.244",
28
- "@remotion/eslint-config-internal": "4.0.244"
27
+ "@remotion/example-videos": "4.0.246",
28
+ "@remotion/eslint-config-internal": "4.0.246"
29
29
  },
30
30
  "keywords": [],
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "require": "./dist/index.js",
38
+ "module": "./dist/esm/index.mjs",
39
+ "import": "./dist/esm/index.mjs"
40
+ },
41
+ "./web-fs": {
42
+ "types": "./dist/writers/web-fs.d.ts",
43
+ "require": "./dist/writers/web-fs.js",
44
+ "module": "./dist/esm/web-fs.mjs",
45
+ "import": "./dist/esm/web-fs.mjs"
46
+ },
47
+ "./buffer": {
48
+ "types": "./dist/writers/buffer.d.ts",
49
+ "require": "./dist/writers/buffer.js",
50
+ "module": "./dist/esm/buffer.mjs",
51
+ "import": "./dist/esm/buffer.mjs"
52
+ },
53
+ "./package.json": "./package.json"
54
+ },
55
+ "typesVersions": {
56
+ ">=1.0": {
57
+ "web-fs": [
58
+ "dist/writers/web-fs.d.ts"
59
+ ],
60
+ "buffer": [
61
+ "dist/writers/buffer.d.ts"
62
+ ]
63
+ }
64
+ },
34
65
  "description": "Media conversion in the browser",
35
66
  "homepage": "https://remotion.dev/webcodecs",
36
67
  "scripts": {
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,13 +0,0 @@
1
- export type ResizingMode = {
2
- type: 'width';
3
- width: number;
4
- } | {
5
- type: 'height';
6
- height: number;
7
- } | {
8
- type: 'max-height';
9
- height: number;
10
- } | {
11
- type: 'max-width';
12
- width: number;
13
- };
@@ -1,13 +0,0 @@
1
- export type ResizingMode = {
2
- type: 'width';
3
- width: number;
4
- } | {
5
- type: 'height';
6
- height: number;
7
- } | {
8
- type: 'max-height';
9
- height: number;
10
- } | {
11
- type: 'max-width';
12
- width: number;
13
- };
@@ -1,9 +0,0 @@
1
- import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
2
- import type { ResizingMode } from './resizing/mode';
3
- export declare const normalizeVideoRotation: (rotation: number) => number;
4
- export declare const rotateAndResizeVideoFrame: ({ frame, rotation, videoCodec, resizingMode, }: {
5
- frame: VideoFrame;
6
- rotation: number;
7
- videoCodec: ConvertMediaVideoCodec;
8
- resizingMode: ResizingMode | null;
9
- }) => VideoFrame;
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rotateAndResizeVideoFrame = exports.normalizeVideoRotation = void 0;
4
- const rotation_1 = require("./rotation");
5
- const normalizeVideoRotation = (rotation) => {
6
- return ((rotation % 360) + 360) % 360;
7
- };
8
- exports.normalizeVideoRotation = normalizeVideoRotation;
9
- const rotateAndResizeVideoFrame = ({ frame, rotation, videoCodec, resizingMode, }) => {
10
- var _a;
11
- const normalized = ((rotation % 360) + 360) % 360;
12
- if (normalized % 360 === 0 && resizingMode === null) {
13
- return frame;
14
- }
15
- if (normalized % 90 !== 0) {
16
- throw new Error('Only 90 degree rotations are supported');
17
- }
18
- const { height, width } = (0, rotation_1.calculateNewDimensionsFromDimensions)({
19
- height: frame.displayHeight,
20
- width: frame.displayWidth,
21
- rotation,
22
- videoCodec,
23
- resizingMode,
24
- });
25
- const canvas = new OffscreenCanvas(width, height);
26
- const ctx = canvas.getContext('2d');
27
- if (!ctx) {
28
- throw new Error('Could not get 2d context');
29
- }
30
- canvas.width = width;
31
- canvas.height = height;
32
- if (normalized === 90) {
33
- ctx.translate(width, 0);
34
- }
35
- else if (normalized === 180) {
36
- ctx.translate(width, height);
37
- }
38
- else if (normalized === 270) {
39
- ctx.translate(0, height);
40
- }
41
- ctx.rotate(normalized * (Math.PI / 180));
42
- if (frame.displayHeight !== height || frame.displayWidth !== width) {
43
- ctx.scale(width / frame.displayWidth, height / frame.displayHeight);
44
- }
45
- ctx.drawImage(frame, 0, 0);
46
- return new VideoFrame(canvas, {
47
- displayHeight: height,
48
- displayWidth: width,
49
- duration: (_a = frame.duration) !== null && _a !== void 0 ? _a : undefined,
50
- timestamp: frame.timestamp,
51
- });
52
- };
53
- exports.rotateAndResizeVideoFrame = rotateAndResizeVideoFrame;
package/dist/scaling.d.ts DELETED
@@ -1,13 +0,0 @@
1
- export type ScalingMode = {
2
- type: 'width';
3
- width: number;
4
- } | {
5
- type: 'height';
6
- height: number;
7
- } | {
8
- type: 'max-height';
9
- height: number;
10
- } | {
11
- type: 'max-width';
12
- width: number;
13
- };
File without changes