@omnimedia/omnitool 1.0.0 → 1.1.0-3

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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -2
  3. package/package.json +56 -27
  4. package/s/_archive/types.ts +107 -0
  5. package/s/context.ts +7 -0
  6. package/s/demo/demo.bundle.ts +64 -0
  7. package/s/demo/demo.css +54 -0
  8. package/s/demo/routines/filmstrip-test.ts +68 -0
  9. package/s/demo/routines/load-video.ts +7 -0
  10. package/s/demo/routines/transcode-test.ts +44 -0
  11. package/s/demo/routines/waveform-test.ts +12 -0
  12. package/s/driver/driver.test.ts +15 -0
  13. package/s/driver/driver.ts +116 -0
  14. package/s/driver/driver.worker.bundle.ts +7 -0
  15. package/s/driver/fns/host.ts +12 -0
  16. package/s/driver/fns/schematic.ts +83 -0
  17. package/s/driver/fns/work.ts +237 -0
  18. package/s/driver/parts/constants.ts +17 -0
  19. package/s/driver/parts/machina.ts +27 -0
  20. package/s/driver/utils/load-decoder-source.ts +13 -0
  21. package/s/driver/utils/sleep.ts +3 -0
  22. package/s/index.html.ts +53 -0
  23. package/s/index.ts +2 -39
  24. package/s/tests.test.ts +8 -0
  25. package/s/timeline/index.ts +14 -0
  26. package/s/timeline/parts/basics.ts +17 -0
  27. package/s/timeline/parts/filmstrip.ts +159 -0
  28. package/s/timeline/parts/item.ts +58 -0
  29. package/s/timeline/parts/media.ts +14 -0
  30. package/s/timeline/parts/resource-pool.ts +27 -0
  31. package/s/timeline/parts/resource.ts +11 -0
  32. package/s/timeline/parts/waveform.ts +62 -0
  33. package/s/timeline/sugar/o.ts +60 -0
  34. package/s/timeline/sugar/omni-test.ts +38 -0
  35. package/s/timeline/sugar/omni.ts +30 -0
  36. package/s/timeline/utils/checksum.ts +19 -0
  37. package/s/timeline/utils/datafile.ts +21 -0
  38. package/s/timeline/utils/dummy-data.ts +7 -0
  39. package/x/context.d.ts +4 -0
  40. package/x/context.js +6 -0
  41. package/x/context.js.map +1 -0
  42. package/x/demo/demo.bundle.d.ts +1 -0
  43. package/x/demo/demo.bundle.js +51 -0
  44. package/x/demo/demo.bundle.js.map +1 -0
  45. package/x/demo/demo.bundle.min.js +118 -0
  46. package/x/demo/demo.bundle.min.js.map +7 -0
  47. package/x/demo/demo.css +54 -0
  48. package/x/demo/routines/filmstrip-test.d.ts +1 -0
  49. package/x/demo/routines/filmstrip-test.js +62 -0
  50. package/x/demo/routines/filmstrip-test.js.map +1 -0
  51. package/x/demo/routines/load-video.d.ts +1 -0
  52. package/x/demo/routines/load-video.js +6 -0
  53. package/x/demo/routines/load-video.js.map +1 -0
  54. package/x/demo/routines/transcode-test.d.ts +6 -0
  55. package/x/demo/routines/transcode-test.js +38 -0
  56. package/x/demo/routines/transcode-test.js.map +1 -0
  57. package/x/demo/routines/waveform-test.d.ts +1 -0
  58. package/x/demo/routines/waveform-test.js +11 -0
  59. package/x/demo/routines/waveform-test.js.map +1 -0
  60. package/x/driver/driver.d.ts +22 -0
  61. package/x/driver/driver.js +97 -0
  62. package/x/driver/driver.js.map +1 -0
  63. package/x/driver/driver.test.d.ts +5 -0
  64. package/x/driver/driver.test.js +12 -0
  65. package/x/driver/driver.test.js.map +1 -0
  66. package/x/driver/driver.worker.bundle.d.ts +1 -0
  67. package/x/driver/driver.worker.bundle.js +4 -0
  68. package/x/driver/driver.worker.bundle.js.map +1 -0
  69. package/x/driver/driver.worker.bundle.min.js +1148 -0
  70. package/x/driver/driver.worker.bundle.min.js.map +7 -0
  71. package/x/driver/fns/host.d.ts +18 -0
  72. package/x/driver/fns/host.js +7 -0
  73. package/x/driver/fns/host.js.map +1 -0
  74. package/x/driver/fns/schematic.d.ts +66 -0
  75. package/x/driver/fns/schematic.js +2 -0
  76. package/x/driver/fns/schematic.js.map +1 -0
  77. package/x/driver/fns/work.d.ts +19 -0
  78. package/x/driver/fns/work.js +192 -0
  79. package/x/driver/fns/work.js.map +1 -0
  80. package/x/driver/parts/constants.d.ts +2 -0
  81. package/x/driver/parts/constants.js +17 -0
  82. package/x/driver/parts/constants.js.map +1 -0
  83. package/x/driver/parts/machina.d.ts +23 -0
  84. package/x/driver/parts/machina.js +14 -0
  85. package/x/driver/parts/machina.js.map +1 -0
  86. package/x/driver/utils/load-decoder-source.d.ts +2 -0
  87. package/x/driver/utils/load-decoder-source.js +12 -0
  88. package/x/driver/utils/load-decoder-source.js.map +1 -0
  89. package/x/driver/utils/sleep.d.ts +1 -0
  90. package/x/driver/utils/sleep.js +4 -0
  91. package/x/driver/utils/sleep.js.map +1 -0
  92. package/x/index.d.ts +2 -9
  93. package/x/index.html +105 -0
  94. package/x/index.html.d.ts +2 -0
  95. package/x/index.html.js +47 -0
  96. package/x/index.html.js.map +1 -0
  97. package/x/index.js +2 -29
  98. package/x/index.js.map +1 -1
  99. package/x/tests.test.d.ts +1 -0
  100. package/x/tests.test.js +6 -0
  101. package/x/tests.test.js.map +1 -0
  102. package/x/timeline/index.d.ts +10 -0
  103. package/x/timeline/index.js +11 -0
  104. package/x/timeline/index.js.map +1 -0
  105. package/x/timeline/parts/basics.d.ts +12 -0
  106. package/x/timeline/parts/basics.js +2 -0
  107. package/x/timeline/parts/basics.js.map +1 -0
  108. package/x/timeline/parts/filmstrip.d.ts +39 -0
  109. package/x/timeline/parts/filmstrip.js +117 -0
  110. package/x/timeline/parts/filmstrip.js.map +1 -0
  111. package/x/timeline/parts/item.d.ts +42 -0
  112. package/x/timeline/parts/item.js +13 -0
  113. package/x/timeline/parts/item.js.map +1 -0
  114. package/x/timeline/parts/media.d.ts +7 -0
  115. package/x/timeline/parts/media.js +13 -0
  116. package/x/timeline/parts/media.js.map +1 -0
  117. package/x/timeline/parts/resource-pool.d.ts +7 -0
  118. package/x/timeline/parts/resource-pool.js +19 -0
  119. package/x/timeline/parts/resource-pool.js.map +1 -0
  120. package/x/timeline/parts/resource.d.ts +8 -0
  121. package/x/timeline/parts/resource.js +2 -0
  122. package/x/timeline/parts/resource.js.map +1 -0
  123. package/x/timeline/parts/waveform.d.ts +8 -0
  124. package/x/timeline/parts/waveform.js +51 -0
  125. package/x/timeline/parts/waveform.js.map +1 -0
  126. package/x/timeline/sugar/o.d.ts +14 -0
  127. package/x/timeline/sugar/o.js +48 -0
  128. package/x/timeline/sugar/o.js.map +1 -0
  129. package/x/timeline/sugar/omni-test.d.ts +1 -0
  130. package/x/timeline/sugar/omni-test.js +22 -0
  131. package/x/timeline/sugar/omni-test.js.map +1 -0
  132. package/x/timeline/sugar/omni.d.ts +11 -0
  133. package/x/timeline/sugar/omni.js +20 -0
  134. package/x/timeline/sugar/omni.js.map +1 -0
  135. package/x/timeline/utils/checksum.d.ts +8 -0
  136. package/x/timeline/utils/checksum.js +20 -0
  137. package/x/timeline/utils/checksum.js.map +1 -0
  138. package/x/timeline/utils/datafile.d.ts +9 -0
  139. package/x/timeline/utils/datafile.js +20 -0
  140. package/x/timeline/utils/datafile.js.map +1 -0
  141. package/x/timeline/utils/dummy-data.d.ts +2 -0
  142. package/x/timeline/utils/dummy-data.js +3 -0
  143. package/x/timeline/utils/dummy-data.js.map +1 -0
  144. package/s/parts/compositor.ts +0 -5
  145. package/s/parts/export.ts +0 -5
  146. package/s/parts/video-decoder.ts +0 -27
  147. package/s/parts/video-encoder.ts +0 -15
  148. package/s/tools/generate-id.ts +0 -7
  149. package/s/tools/mp4boxjs/LICENSE.md +0 -24
  150. package/s/tools/mp4boxjs/demuxer.ts +0 -106
  151. package/s/tools/mp4boxjs/mp4box.adapter.ts +0 -148
  152. package/s/tools/mp4boxjs/mp4box.js +0 -8206
  153. package/s/types.ts +0 -10
  154. package/x/parts/compositor.d.ts +0 -4
  155. package/x/parts/compositor.js +0 -5
  156. package/x/parts/compositor.js.map +0 -1
  157. package/x/parts/export.d.ts +0 -7
  158. package/x/parts/export.js +0 -5
  159. package/x/parts/export.js.map +0 -1
  160. package/x/parts/video-decoder.d.ts +0 -8
  161. package/x/parts/video-decoder.js +0 -20
  162. package/x/parts/video-decoder.js.map +0 -1
  163. package/x/parts/video-encoder.d.ts +0 -6
  164. package/x/parts/video-encoder.js +0 -12
  165. package/x/parts/video-encoder.js.map +0 -1
  166. package/x/tools/generate-id.d.ts +0 -1
  167. package/x/tools/generate-id.js +0 -8
  168. package/x/tools/generate-id.js.map +0 -1
  169. package/x/tools/mp4boxjs/demuxer.d.ts +0 -24
  170. package/x/tools/mp4boxjs/demuxer.js +0 -88
  171. package/x/tools/mp4boxjs/demuxer.js.map +0 -1
  172. package/x/tools/mp4boxjs/mp4box.adapter.d.ts +0 -128
  173. package/x/tools/mp4boxjs/mp4box.adapter.js +0 -11
  174. package/x/tools/mp4boxjs/mp4box.adapter.js.map +0 -1
  175. package/x/types.d.ts +0 -7
  176. package/x/types.js +0 -2
  177. package/x/types.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import { Datafile } from "./datafile.js";
2
+ export declare const dummyData: () => Promise<Datafile>;
@@ -0,0 +1,3 @@
1
+ import { Datafile } from "./datafile.js";
2
+ export const dummyData = () => Datafile.make(new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF]));
3
+ //# sourceMappingURL=dummy-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy-data.js","sourceRoot":"","sources":["../../../s/timeline/utils/dummy-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAC3C,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CACxC,CAAA"}
@@ -1,5 +0,0 @@
1
- export class Compositor {
2
- constructor() {}
3
-
4
- crossfade([...clips]) {}
5
- }
package/s/parts/export.ts DELETED
@@ -1,5 +0,0 @@
1
- export class Export {
2
- constructor() {}
3
-
4
- export(clip, {container, codec}) {}
5
- }
@@ -1,27 +0,0 @@
1
- import {Clip, LoadedVideoClip} from "../types.js"
2
-
3
- export class OmniVideoDecoder {
4
-
5
- #decoder = new VideoDecoder({
6
- output: () => this.#output(),
7
- error: () => this.#error()
8
- })
9
-
10
- constructor(
11
- private getLoadedClip: (clip: Clip) =>
12
- LoadedVideoClip | undefined
13
- ) {}
14
-
15
- #output() {}
16
-
17
- #error() {}
18
-
19
- decodeVideo(clip: Clip) {
20
- const loaded = this.getLoadedClip(clip)
21
- }
22
-
23
- seek(clip: Clip) {
24
- const loaded = this.getLoadedClip(clip)
25
- loaded?.demuxer.seek()
26
- }
27
- }
@@ -1,15 +0,0 @@
1
- export class OmniVideoEncoder {
2
- encoder = new VideoEncoder({
3
- output: () => this.#output(),
4
- error: () => this.#error()
5
- })
6
-
7
- constructor() {
8
- }
9
-
10
- #output() {}
11
-
12
- #error() {}
13
-
14
- encode() {}
15
- }
@@ -1,7 +0,0 @@
1
- export function generateId(bytes = 32) {
2
- const array = new Uint8Array(bytes)
3
- const random = crypto.getRandomValues(array)
4
- return [...random]
5
- .map(b => b.toString(16).padStart(2, "0"))
6
- .join("")
7
- }
@@ -1,24 +0,0 @@
1
- Copyright (c) 2012. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato
2
- All rights reserved.
3
-
4
- Redistribution and use in source and binary forms, with or without
5
- modification, are permitted provided that the following conditions are met:
6
- * Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
8
- * Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
11
- * Neither the name of the copyright holder nor the
12
- names of its contributors may be used to endorse or promote products
13
- derived from this software without specific prior written permission.
14
-
15
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
- DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
19
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,106 +0,0 @@
1
- import MP4Box, {MP4File, MP4Info, MP4MediaTrack} from "./mp4box.adapter.js"
2
-
3
- export type Status = "render" | "decode" | "demux" | "fetch"
4
- type SetStatus = (status: Status, message: string) => void
5
- type OnChunk = (chunk: EncodedVideoChunk) => void
6
- type OnConfig = (config: VideoDecoderConfig) => void
7
- type OnReady = (boolean: boolean) => void
8
-
9
- export class MP4FileSink {
10
- #setStatus: SetStatus
11
- #file: MP4File
12
- #offset = 0
13
-
14
- constructor(file: MP4File, setStatus: SetStatus) {
15
- this.#file = file
16
- this.#setStatus = setStatus
17
- }
18
-
19
- write(chunk: ArrayBuffer) {
20
- const buffer = new ArrayBuffer(chunk.byteLength)
21
- //@ts-ignore
22
- new Uint8Array(buffer).set(chunk)
23
- //@ts-ignore
24
- buffer.fileStart = this.#offset
25
- this.#offset += buffer.byteLength
26
- this.#setStatus("fetch", (this.#offset / (1024 ** 2)).toFixed(1) + " MiB")!
27
- //@ts-ignore
28
- this.#file!.appendBuffer(buffer)
29
- }
30
-
31
- close() {
32
- this.#setStatus("fetch", "Done")
33
- this.#file.flush()
34
- }
35
- }
36
-
37
- export class MP4Demuxer {
38
- #onConfig: OnConfig
39
- #onChunk: OnChunk
40
- #OnReady: OnReady
41
- #setStatus: SetStatus
42
- #framesCount: (frames: number) => void
43
- #file: MP4File
44
-
45
- constructor(file: File, {onConfig, onChunk, setStatus, framesCount, OnReady}: {onConfig: OnConfig, onChunk: OnChunk, setStatus: SetStatus, framesCount: (frames: number) => void, OnReady: OnReady}) {
46
- this.#onConfig = onConfig
47
- this.#onChunk = onChunk
48
- this.#setStatus = setStatus
49
- this.#framesCount = framesCount
50
- this.#OnReady = OnReady
51
-
52
- this.#file = MP4Box.createFile()
53
- this.#file.onError = error => setStatus("demux", error)
54
- this.#file.onReady = this.#onReady.bind(this)
55
- this.#file.onSamples = this.#onSamples.bind(this)
56
- const fileSink = new MP4FileSink(this.#file, setStatus)
57
- file.stream().pipeTo(new WritableStream(fileSink, {highWaterMark: 1}))
58
- }
59
-
60
- seek() {
61
- console.log("seek", this.#file.seek)
62
- }
63
-
64
- #description(track: MP4MediaTrack) {
65
- const trak = this.#file.getTrackById(track.id)
66
- for (const entry of trak.mdia!.minf!.stbl!.stsd!.entries) {
67
- //@ts-ignore
68
- const box = entry.avcC || entry.hvcC || entry.vpcC || entry.av1C
69
- if (box) {
70
- //@ts-ignore
71
- const stream = new MP4Box.DataStream(undefined, 0, MP4Box.DataStream.BIG_ENDIAN)
72
- box.write(stream)
73
- return new Uint8Array(stream.buffer!, 8) // Remove the box header.
74
- }
75
- }
76
- throw new Error("avcC, hvcC, vpcC, or av1C box not found")
77
- }
78
-
79
- #onReady(info: MP4Info) {
80
- this.#OnReady(true)
81
- this.#setStatus("demux", "Ready")
82
- const track = info.videoTracks[0]
83
- this.#onConfig({
84
- codec: track.codec.startsWith('vp08') ? 'vp8' : track.codec,
85
- codedHeight: track.video.height,
86
- codedWidth: track.video.width,
87
- description: this.#description(track),
88
- });
89
- this.#framesCount(track.nb_samples)
90
- this.#file.setExtractionOptions(track.id)
91
- // this.#file.start()
92
- }
93
-
94
- #onSamples(track_id: number, ref: any, samples: any) {
95
- for (const sample of samples) {
96
- this.#onChunk(new EncodedVideoChunk({
97
- type: sample.is_sync ? "key" : "delta",
98
- timestamp: 1e6 * sample.cts / sample.timescale,
99
- duration: 1e6 * sample.duration / sample.timescale,
100
- data: sample.data
101
- }))
102
- }
103
- }
104
- }
105
-
106
-
@@ -1,148 +0,0 @@
1
- // @ts-ignore
2
- import {mp4box} from "./mp4box.js"
3
-
4
- export interface MP4MediaTrack {
5
- id: number;
6
- created: Date;
7
- modified: Date;
8
- movie_duration: number;
9
- layer: number;
10
- alternate_group: number;
11
- volume: number;
12
- track_width: number;
13
- track_height: number;
14
- timescale: number;
15
- duration: number;
16
- bitrate: number;
17
- codec: string;
18
- language: string;
19
- nb_samples: number;
20
- type: string;
21
- }
22
-
23
- export interface MP4VideoData {
24
- width: number;
25
- height: number;
26
- }
27
-
28
- export interface MP4VideoTrack extends MP4MediaTrack {
29
- video: MP4VideoData;
30
- }
31
- export interface MP4AudioTrack extends MP4MediaTrack {
32
- audio: MP4AudioData;
33
- }
34
-
35
- export interface MP4Info {
36
- duration: number;
37
- timescale: number;
38
- fragment_duration: number;
39
- isFragmented: boolean;
40
- isProgressive: boolean;
41
- hasIOD: boolean;
42
- brands: string[];
43
- created: Date;
44
- modified: Date;
45
- tracks: MP4Track[];
46
- audioTracks: MP4AudioTrack[];
47
- videoTracks: MP4VideoTrack[];
48
- }
49
-
50
- export interface MP4AudioData {
51
- sample_rate: number;
52
- channel_count: number;
53
- sample_size: number;
54
- }
55
-
56
- export interface Moov {
57
- type: string;
58
- hdr_size: Number;
59
- size: Number;
60
- start: Number;
61
- traks: any;
62
- uuid: String | undefined;
63
- }
64
-
65
- export interface MP4File {
66
- onMoovStart?: () => void;
67
- onReady?: (info: MP4Info) => void;
68
- onError?: (e: string) => void;
69
- onSamples?: (track_id: number, _ref: any, samples: any) => void;
70
- setExtractionOptions: (id: number) => void;
71
-
72
- moov: Moov;
73
-
74
- appendBuffer(data: MP4ArrayBuffer): number;
75
- start(): void;
76
- stop(): void;
77
- flush(): void;
78
- getTrackById: (id: number) => Trak
79
- }
80
-
81
- type MP4Track = MP4VideoTrack | MP4AudioTrack;
82
-
83
- export interface MP4Box {
84
- createFile(): MP4File;
85
- DataStream: new (arrayBuffer: ArrayBuffer, byteOffset: number, endianness: boolean) => XDataStream
86
- }
87
-
88
- export type MP4ArrayBuffer = ArrayBuffer & {fileStart: number};
89
-
90
-
91
- export interface TrackOptions {
92
- timescale: number;
93
- width: number;
94
- height: number;
95
- nb_samples: number;
96
- avcDecoderConfigRecord: AllowSharedBufferSource | undefined;
97
- }
98
-
99
- export interface SampleOptions {
100
- duration: number;
101
- dts: number;
102
- cts: number;
103
- is_sync: boolean;
104
- }
105
-
106
- export interface MP4File {
107
- onMoovStart?: () => void;
108
- onReady?: (info: MP4Info) => void;
109
- onError?: (e: string) => void;
110
-
111
- appendBuffer(data: MP4ArrayBuffer): number;
112
- start(): void;
113
- stop(): void;
114
- flush(): void;
115
- addTrack(trackOptions: TrackOptions): MP4Track;
116
- addSample(track: MP4Track, data: ArrayBuffer, sampleOptions: SampleOptions):void;
117
- save(file: string):void;
118
- }
119
-
120
- export class XDataStream {
121
- static BIG_ENDIAN: boolean;
122
- static LITTLE_ENDIAN: boolean;
123
- buffer?: ArrayBuffer;
124
- constructor(arrayBuffer: ArrayBuffer, byteOffset: number, endianness: boolean) {}
125
- // TODO: Complete interface
126
- }
127
-
128
- export interface Trak {
129
- mdia?: {
130
- minf?: {
131
- stbl?: {
132
- stsd?: {
133
- entries: {
134
- avcC?: {
135
- write: (stream: XDataStream) => void
136
- }
137
- hvcC?: {
138
- write: (stream: XDataStream) => void
139
- }
140
- }[]
141
- }
142
- }
143
- }
144
- }
145
- // TODO: Complete interface
146
- }
147
- export default mp4box as MP4Box;
148
- export const DataStreamx = mp4box.DataStream as XDataStream