@yume-chan/scrcpy 0.0.17 → 0.0.19

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 (323) hide show
  1. package/CHANGELOG.json +39 -3
  2. package/CHANGELOG.md +22 -4
  3. package/LICENSE +1 -1
  4. package/README.md +149 -82
  5. package/bin/scrcpy-server +0 -0
  6. package/bin/version.d.ts +1 -1
  7. package/bin/version.js +1 -1
  8. package/esm/adb/client.d.ts +40 -39
  9. package/esm/adb/client.d.ts.map +1 -1
  10. package/esm/adb/client.js +223 -217
  11. package/esm/adb/client.js.map +1 -1
  12. package/esm/adb/connection.d.ts +48 -37
  13. package/esm/adb/connection.d.ts.map +1 -1
  14. package/esm/adb/connection.js +121 -101
  15. package/esm/adb/connection.js.map +1 -1
  16. package/esm/adb/index.d.ts +3 -3
  17. package/esm/adb/index.js +3 -3
  18. package/esm/adb/options/1_16.d.ts +7 -7
  19. package/esm/adb/options/1_16.d.ts.map +1 -1
  20. package/esm/adb/options/1_16.js +19 -19
  21. package/esm/adb/options/1_16.js.map +1 -1
  22. package/esm/adb/options/1_22.d.ts +7 -7
  23. package/esm/adb/options/1_22.d.ts.map +1 -1
  24. package/esm/adb/options/1_22.js +16 -16
  25. package/esm/adb/options/1_22.js.map +1 -1
  26. package/esm/adb/options/1_26.d.ts +9 -0
  27. package/esm/adb/options/1_26.d.ts.map +1 -0
  28. package/esm/adb/options/1_26.js +11 -0
  29. package/esm/adb/options/1_26.js.map +1 -0
  30. package/esm/adb/options/2_0.d.ts +8 -0
  31. package/esm/adb/options/2_0.d.ts.map +1 -0
  32. package/esm/adb/options/2_0.js +13 -0
  33. package/esm/adb/options/2_0.js.map +1 -0
  34. package/esm/adb/options/index.d.ts +3 -3
  35. package/esm/adb/options/index.js +3 -3
  36. package/esm/adb/options/types.d.ts +23 -22
  37. package/esm/adb/options/types.d.ts.map +1 -1
  38. package/esm/adb/options/types.js +36 -29
  39. package/esm/adb/options/types.js.map +1 -1
  40. package/esm/codec/av1.d.ts +33 -0
  41. package/esm/codec/av1.d.ts.map +1 -0
  42. package/esm/codec/av1.js +35 -0
  43. package/esm/codec/av1.js.map +1 -0
  44. package/esm/codec/h264.d.ts +98 -0
  45. package/esm/codec/h264.d.ts.map +1 -0
  46. package/esm/codec/h264.js +477 -0
  47. package/esm/codec/h264.js.map +1 -0
  48. package/esm/codec/h265.d.ts +36 -0
  49. package/esm/codec/h265.d.ts.map +1 -0
  50. package/esm/codec/h265.js +38 -0
  51. package/esm/codec/h265.js.map +1 -0
  52. package/esm/codec/index.d.ts +4 -0
  53. package/esm/codec/index.d.ts.map +1 -0
  54. package/esm/codec/index.js +4 -0
  55. package/esm/codec/index.js.map +1 -0
  56. package/esm/codec.d.ts +33 -33
  57. package/esm/codec.js +36 -36
  58. package/esm/control/back-or-screen-on.d.ts +3 -0
  59. package/esm/control/back-or-screen-on.d.ts.map +1 -0
  60. package/esm/control/back-or-screen-on.js +2 -0
  61. package/esm/control/back-or-screen-on.js.map +1 -0
  62. package/esm/control/basic.d.ts +5 -0
  63. package/esm/control/basic.d.ts.map +1 -0
  64. package/esm/control/basic.js +3 -0
  65. package/esm/control/basic.js.map +1 -0
  66. package/esm/control/hover-helper.d.ts +18 -0
  67. package/esm/control/hover-helper.d.ts.map +1 -0
  68. package/esm/control/hover-helper.js +44 -0
  69. package/esm/control/hover-helper.js.map +1 -0
  70. package/esm/control/index.d.ts +11 -7
  71. package/esm/control/index.d.ts.map +1 -1
  72. package/esm/control/index.js +11 -7
  73. package/esm/control/index.js.map +1 -1
  74. package/esm/control/inject-keycode.d.ts +194 -52
  75. package/esm/control/inject-keycode.d.ts.map +1 -1
  76. package/esm/control/inject-keycode.js +199 -53
  77. package/esm/control/inject-keycode.js.map +1 -1
  78. package/esm/control/inject-scroll.d.ts +3 -0
  79. package/esm/control/inject-scroll.d.ts.map +1 -0
  80. package/esm/control/inject-scroll.js +2 -0
  81. package/esm/control/inject-scroll.js.map +1 -0
  82. package/esm/control/inject-text.d.ts +8 -8
  83. package/esm/control/inject-text.d.ts.map +1 -1
  84. package/esm/control/inject-text.js +6 -6
  85. package/esm/control/inject-text.js.map +1 -1
  86. package/esm/control/inject-touch.d.ts +37 -29
  87. package/esm/control/inject-touch.d.ts.map +1 -1
  88. package/esm/control/inject-touch.js +62 -29
  89. package/esm/control/inject-touch.js.map +1 -1
  90. package/esm/control/rotate-device.d.ts +6 -6
  91. package/esm/control/rotate-device.d.ts.map +1 -1
  92. package/esm/control/rotate-device.js +3 -4
  93. package/esm/control/rotate-device.js.map +1 -1
  94. package/esm/control/serializer.d.ts +35 -22
  95. package/esm/control/serializer.d.ts.map +1 -1
  96. package/esm/control/serializer.js +82 -72
  97. package/esm/control/serializer.js.map +1 -1
  98. package/esm/control/set-clipboard.d.ts +3 -0
  99. package/esm/control/set-clipboard.d.ts.map +1 -0
  100. package/esm/control/set-clipboard.js +2 -0
  101. package/esm/control/set-clipboard.js.map +1 -0
  102. package/esm/control/set-screen-power-mode.d.ts +11 -11
  103. package/esm/control/set-screen-power-mode.d.ts.map +1 -1
  104. package/esm/control/set-screen-power-mode.js +11 -11
  105. package/esm/control/set-screen-power-mode.js.map +1 -1
  106. package/esm/control/simple.d.ts +5 -0
  107. package/esm/control/simple.d.ts.map +1 -0
  108. package/esm/control/simple.js +3 -0
  109. package/esm/control/simple.js.map +1 -0
  110. package/esm/control/type.d.ts +14 -14
  111. package/esm/control/type.js +18 -18
  112. package/esm/decoder.d.ts +2 -0
  113. package/esm/decoder.d.ts.map +1 -0
  114. package/esm/decoder.js +2 -0
  115. package/esm/decoder.js.map +1 -0
  116. package/esm/device-message/ack-clipboard.d.ts +9 -0
  117. package/esm/device-message/ack-clipboard.d.ts.map +1 -0
  118. package/esm/device-message/ack-clipboard.js +6 -0
  119. package/esm/device-message/ack-clipboard.js.map +1 -0
  120. package/esm/device-message/clipboard.d.ts +9 -9
  121. package/esm/device-message/clipboard.d.ts.map +1 -1
  122. package/esm/device-message/clipboard.js +6 -6
  123. package/esm/device-message/clipboard.js.map +1 -1
  124. package/esm/device-message/index.d.ts +4 -3
  125. package/esm/device-message/index.d.ts.map +1 -1
  126. package/esm/device-message/index.js +4 -3
  127. package/esm/device-message/index.js.map +1 -1
  128. package/esm/device-message/stream.d.ts +7 -6
  129. package/esm/device-message/stream.d.ts.map +1 -1
  130. package/esm/device-message/stream.js +19 -15
  131. package/esm/device-message/stream.js.map +1 -1
  132. package/esm/device-message/type.d.ts +4 -4
  133. package/esm/device-message/type.js +6 -6
  134. package/esm/index.d.ts +5 -5
  135. package/esm/index.js +5 -5
  136. package/esm/options/1.17.d.ts +3 -0
  137. package/esm/options/1.17.d.ts.map +1 -0
  138. package/esm/options/1.17.js +2 -0
  139. package/esm/options/1.17.js.map +1 -0
  140. package/esm/options/1_16/codec-options.d.ts +20 -18
  141. package/esm/options/1_16/codec-options.d.ts.map +1 -1
  142. package/esm/options/1_16/codec-options.js +25 -26
  143. package/esm/options/1_16/codec-options.js.map +1 -1
  144. package/esm/options/1_16/float-to-uint16.d.ts +5 -0
  145. package/esm/options/1_16/float-to-uint16.d.ts.map +1 -0
  146. package/esm/options/1_16/float-to-uint16.js +27 -0
  147. package/esm/options/1_16/float-to-uint16.js.map +1 -0
  148. package/esm/options/1_16/h264-configuration.d.ts +49 -0
  149. package/esm/options/1_16/h264-configuration.d.ts.map +1 -0
  150. package/esm/options/1_16/h264-configuration.js +414 -0
  151. package/esm/options/1_16/h264-configuration.js.map +1 -0
  152. package/esm/options/1_16/index.d.ts +4 -3
  153. package/esm/options/1_16/index.d.ts.map +1 -1
  154. package/esm/options/1_16/index.js +4 -3
  155. package/esm/options/1_16/index.js.map +1 -1
  156. package/esm/options/1_16/init.d.ts +66 -0
  157. package/esm/options/1_16/init.d.ts.map +1 -0
  158. package/esm/options/1_16/init.js +16 -0
  159. package/esm/options/1_16/init.js.map +1 -0
  160. package/esm/options/1_16/message.d.ts +32 -0
  161. package/esm/options/1_16/message.d.ts.map +1 -0
  162. package/esm/options/1_16/message.js +37 -0
  163. package/esm/options/1_16/message.js.map +1 -0
  164. package/esm/options/1_16/options.d.ts +102 -96
  165. package/esm/options/1_16/options.d.ts.map +1 -1
  166. package/esm/options/1_16/options.js +189 -187
  167. package/esm/options/1_16/options.js.map +1 -1
  168. package/esm/options/1_16/scroll.d.ts +28 -0
  169. package/esm/options/1_16/scroll.d.ts.map +1 -0
  170. package/esm/options/1_16/scroll.js +56 -0
  171. package/esm/options/1_16/scroll.js.map +1 -0
  172. package/esm/options/1_16/sps.d.ts +1 -1
  173. package/esm/options/1_16/sps.d.ts.map +1 -1
  174. package/esm/options/1_16/sps.js +25 -17
  175. package/esm/options/1_16/sps.js.map +1 -1
  176. package/esm/options/1_17.d.ts +32 -0
  177. package/esm/options/1_17.d.ts.map +1 -0
  178. package/esm/options/1_17.js +36 -0
  179. package/esm/options/1_17.js.map +1 -0
  180. package/esm/options/1_18.d.ts +21 -19
  181. package/esm/options/1_18.d.ts.map +1 -1
  182. package/esm/options/1_18.js +45 -45
  183. package/esm/options/1_18.js.map +1 -1
  184. package/esm/options/1_21.d.ts +22 -9
  185. package/esm/options/1_21.d.ts.map +1 -1
  186. package/esm/options/1_21.js +36 -25
  187. package/esm/options/1_21.js.map +1 -1
  188. package/esm/options/1_22/index.d.ts +3 -0
  189. package/esm/options/1_22/index.d.ts.map +1 -0
  190. package/esm/options/1_22/index.js +3 -0
  191. package/esm/options/1_22/index.js.map +1 -0
  192. package/esm/options/1_22/init.d.ts +17 -0
  193. package/esm/options/1_22/init.d.ts.map +1 -0
  194. package/esm/options/1_22/init.js +2 -0
  195. package/esm/options/1_22/init.js.map +1 -0
  196. package/esm/options/{1_22.d.ts → 1_22/options.d.ts} +30 -40
  197. package/esm/options/1_22/options.d.ts.map +1 -0
  198. package/esm/options/{1_22.js → 1_22/options.js} +26 -30
  199. package/esm/options/1_22/options.js.map +1 -0
  200. package/esm/options/1_22/scroll.d.ts +17 -0
  201. package/esm/options/1_22/scroll.d.ts.map +1 -0
  202. package/esm/options/1_22/scroll.js +15 -0
  203. package/esm/options/1_22/scroll.js.map +1 -0
  204. package/esm/options/1_23.d.ts +12 -11
  205. package/esm/options/1_23.d.ts.map +1 -1
  206. package/esm/options/1_23.js +34 -33
  207. package/esm/options/1_23.js.map +1 -1
  208. package/esm/options/1_24.d.ts +9 -8
  209. package/esm/options/1_24.d.ts.map +1 -1
  210. package/esm/options/1_24.js +12 -12
  211. package/esm/options/1_24.js.map +1 -1
  212. package/esm/options/1_25/index.d.ts +3 -0
  213. package/esm/options/1_25/index.d.ts.map +1 -0
  214. package/esm/options/1_25/index.js +3 -0
  215. package/esm/options/1_25/index.js.map +1 -0
  216. package/esm/options/1_25/options.d.ts +7 -0
  217. package/esm/options/1_25/options.d.ts.map +1 -0
  218. package/esm/options/1_25/options.js +8 -0
  219. package/esm/options/1_25/options.js.map +1 -0
  220. package/esm/options/1_25/scroll.d.ts +20 -0
  221. package/esm/options/1_25/scroll.d.ts.map +1 -0
  222. package/esm/options/1_25/scroll.js +33 -0
  223. package/esm/options/1_25/scroll.js.map +1 -0
  224. package/esm/options/1_26.d.ts +57 -0
  225. package/esm/options/1_26.d.ts.map +1 -0
  226. package/esm/options/1_26.js +67 -0
  227. package/esm/options/1_26.js.map +1 -0
  228. package/esm/options/2.d.ts +57 -0
  229. package/esm/options/2.d.ts.map +1 -0
  230. package/esm/options/2.js +67 -0
  231. package/esm/options/2.js.map +1 -0
  232. package/esm/options/2_0.d.ts +87 -0
  233. package/esm/options/2_0.d.ts.map +1 -0
  234. package/esm/options/2_0.js +175 -0
  235. package/esm/options/2_0.js.map +1 -0
  236. package/esm/options/codec.d.ts +52 -0
  237. package/esm/options/codec.d.ts.map +1 -0
  238. package/esm/options/codec.js +26 -0
  239. package/esm/options/codec.js.map +1 -0
  240. package/esm/options/index.d.ts +8 -7
  241. package/esm/options/index.d.ts.map +1 -1
  242. package/esm/options/index.js +8 -7
  243. package/esm/options/index.js.map +1 -1
  244. package/esm/options/latest.d.ts +12 -0
  245. package/esm/options/latest.d.ts.map +1 -0
  246. package/esm/options/latest.js +8 -0
  247. package/esm/options/latest.js.map +1 -0
  248. package/esm/options/types.d.ts +46 -44
  249. package/esm/options/types.d.ts.map +1 -1
  250. package/esm/options/types.js +17 -15
  251. package/esm/options/types.js.map +1 -1
  252. package/package.json +20 -12
  253. package/scripts/fetch-server.cjs +19 -9
  254. package/src/adb/client.ts +184 -147
  255. package/src/adb/connection.ts +95 -31
  256. package/src/adb/index.ts +3 -3
  257. package/src/adb/options/1_16.ts +15 -6
  258. package/src/adb/options/1_22.ts +12 -6
  259. package/src/adb/options/index.ts +3 -3
  260. package/src/adb/options/types.ts +34 -14
  261. package/src/control/back-or-screen-on.ts +4 -0
  262. package/src/control/hover-helper.ts +54 -0
  263. package/src/control/index.ts +11 -7
  264. package/src/control/inject-keycode.ts +203 -45
  265. package/src/control/inject-scroll.ts +4 -0
  266. package/src/control/inject-text.ts +7 -8
  267. package/src/control/inject-touch.ts +58 -14
  268. package/src/control/rotate-device.ts +7 -6
  269. package/src/control/serializer.ts +111 -43
  270. package/src/control/set-clipboard.ts +4 -0
  271. package/src/control/set-screen-power-mode.ts +7 -8
  272. package/src/device-message/ack-clipboard.ts +10 -0
  273. package/src/device-message/clipboard.ts +8 -8
  274. package/src/device-message/index.ts +4 -3
  275. package/src/device-message/stream.ts +17 -7
  276. package/src/index.ts +5 -5
  277. package/src/options/1_16/codec-options.ts +16 -11
  278. package/src/options/1_16/h264-configuration.ts +485 -0
  279. package/src/options/1_16/index.ts +4 -3
  280. package/src/options/1_16/options.ts +180 -130
  281. package/src/options/1_16/scroll.ts +74 -0
  282. package/src/options/1_18.ts +22 -12
  283. package/src/options/1_21.ts +30 -13
  284. package/src/options/1_22/index.ts +2 -0
  285. package/src/options/{1_22.ts → 1_22/options.ts} +9 -17
  286. package/src/options/1_22/scroll.ts +26 -0
  287. package/src/options/1_23.ts +30 -20
  288. package/src/options/1_24.ts +5 -3
  289. package/src/options/1_25/index.ts +2 -0
  290. package/src/options/1_25/options.ts +13 -0
  291. package/src/options/1_25/scroll.ts +49 -0
  292. package/src/options/index.ts +8 -7
  293. package/src/options/types.ts +36 -19
  294. package/tsconfig.build.json +1 -1
  295. package/tsconfig.build.tsbuildinfo +1 -1
  296. package/esm/decoder/index.d.ts +0 -28
  297. package/esm/decoder/index.d.ts.map +0 -1
  298. package/esm/decoder/index.js +0 -2
  299. package/esm/decoder/index.js.map +0 -1
  300. package/esm/decoder/tinyh264/index.d.ts +0 -20
  301. package/esm/decoder/tinyh264/index.d.ts.map +0 -1
  302. package/esm/decoder/tinyh264/index.js +0 -86
  303. package/esm/decoder/tinyh264/index.js.map +0 -1
  304. package/esm/decoder/tinyh264/worker.d.ts +0 -2
  305. package/esm/decoder/tinyh264/worker.d.ts.map +0 -1
  306. package/esm/decoder/tinyh264/worker.js +0 -3
  307. package/esm/decoder/tinyh264/worker.js.map +0 -1
  308. package/esm/decoder/tinyh264/wrapper.d.ts +0 -21
  309. package/esm/decoder/tinyh264/wrapper.d.ts.map +0 -1
  310. package/esm/decoder/tinyh264/wrapper.js +0 -74
  311. package/esm/decoder/tinyh264/wrapper.js.map +0 -1
  312. package/esm/decoder/types.d.ts +0 -2
  313. package/esm/decoder/types.d.ts.map +0 -1
  314. package/esm/decoder/types.js +0 -2
  315. package/esm/decoder/types.js.map +0 -1
  316. package/esm/decoder/web-codecs/index.d.ts +0 -22
  317. package/esm/decoder/web-codecs/index.d.ts.map +0 -1
  318. package/esm/decoder/web-codecs/index.js +0 -81
  319. package/esm/decoder/web-codecs/index.js.map +0 -1
  320. package/esm/options/1_22.d.ts.map +0 -1
  321. package/esm/options/1_22.js.map +0 -1
  322. package/src/options/1_16/sps.ts +0 -300
  323. package/tsconfig.test.tsbuildinfo +0 -1
@@ -1,86 +0,0 @@
1
- import { PromiseResolver } from '@yume-chan/async';
2
- import { WritableStream } from '@yume-chan/stream-extra';
3
- import { AndroidCodecLevel, AndroidCodecProfile } from '../../codec.js';
4
- import { createTinyH264Wrapper } from './wrapper.js';
5
- let cachedInitializePromise;
6
- function initialize() {
7
- if (!cachedInitializePromise) {
8
- cachedInitializePromise = Promise.all([import('yuv-buffer'), import('yuv-canvas')]).then(([YuvBuffer, { default: YuvCanvas }]) => ({
9
- YuvBuffer, YuvCanvas
10
- }));
11
- }
12
- return cachedInitializePromise;
13
- }
14
- export class TinyH264Decoder {
15
- maxProfile = AndroidCodecProfile.Baseline;
16
- maxLevel = AndroidCodecLevel.Level4;
17
- _renderer;
18
- get renderer() { return this._renderer; }
19
- _frameRendered = 0;
20
- get frameRendered() { return this._frameRendered; }
21
- _writable;
22
- get writable() { return this._writable; }
23
- _yuvCanvas;
24
- _initializer;
25
- constructor() {
26
- initialize();
27
- this._renderer = document.createElement('canvas');
28
- this._writable = new WritableStream({
29
- write: async (packet) => {
30
- switch (packet.type) {
31
- case 'configuration':
32
- this.configure(packet.data);
33
- break;
34
- case 'frame':
35
- if (!this._initializer) {
36
- throw new Error('Decoder not initialized');
37
- }
38
- const wrapper = await this._initializer.promise;
39
- wrapper.feed(packet.data.slice().buffer);
40
- break;
41
- }
42
- }
43
- });
44
- }
45
- async configure(config) {
46
- this.dispose();
47
- this._initializer = new PromiseResolver();
48
- const { YuvBuffer, YuvCanvas } = await initialize();
49
- if (!this._yuvCanvas) {
50
- this._yuvCanvas = YuvCanvas.attach(this._renderer);
51
- ;
52
- }
53
- const { encodedWidth, encodedHeight } = config;
54
- const chromaWidth = encodedWidth / 2;
55
- const chromaHeight = encodedHeight / 2;
56
- this._renderer.width = config.croppedWidth;
57
- this._renderer.height = config.croppedHeight;
58
- const format = YuvBuffer.format({
59
- width: encodedWidth,
60
- height: encodedHeight,
61
- chromaWidth,
62
- chromaHeight,
63
- cropLeft: config.cropLeft,
64
- cropTop: config.cropTop,
65
- cropWidth: config.croppedWidth,
66
- cropHeight: config.croppedHeight,
67
- displayWidth: config.croppedWidth,
68
- displayHeight: config.croppedHeight,
69
- });
70
- const wrapper = await createTinyH264Wrapper();
71
- this._initializer.resolve(wrapper);
72
- const uPlaneOffset = encodedWidth * encodedHeight;
73
- const vPlaneOffset = uPlaneOffset + chromaWidth * chromaHeight;
74
- wrapper.onPictureReady(({ data }) => {
75
- this._frameRendered += 1;
76
- const array = new Uint8Array(data);
77
- const frame = YuvBuffer.frame(format, YuvBuffer.lumaPlane(format, array, encodedWidth, 0), YuvBuffer.chromaPlane(format, array, chromaWidth, uPlaneOffset), YuvBuffer.chromaPlane(format, array, chromaWidth, vPlaneOffset));
78
- this._yuvCanvas.drawFrame(frame);
79
- });
80
- }
81
- dispose() {
82
- this._initializer?.promise.then(wrapper => wrapper.dispose());
83
- this._initializer = undefined;
84
- }
85
- }
86
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/decoder/tinyh264/worker.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import { init } from 'tinyh264';
2
- init();
3
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,EAAE,CAAC"}
@@ -1,21 +0,0 @@
1
- import { AutoDisposable } from '@yume-chan/event';
2
- export interface PictureReadyEventArgs {
3
- renderStateId: number;
4
- width: number;
5
- height: number;
6
- data: ArrayBuffer;
7
- }
8
- export declare class TinyH264Wrapper extends AutoDisposable {
9
- readonly streamId: number;
10
- private readonly pictureReadyEvent;
11
- get onPictureReady(): {
12
- (listener: import("@yume-chan/event").EventListener<PictureReadyEventArgs, unknown, [], unknown>): import("@yume-chan/event").RemoveEventListener;
13
- <TThis, TArgs extends unknown[]>(listener: import("@yume-chan/event").EventListener<PictureReadyEventArgs, TThis, TArgs, unknown>, thisArg: TThis, ...args: TArgs): import("@yume-chan/event").RemoveEventListener;
14
- };
15
- constructor(streamId: number);
16
- private handlePictureReady;
17
- feed(data: ArrayBuffer): void;
18
- dispose(): void;
19
- }
20
- export declare function createTinyH264Wrapper(): Promise<TinyH264Wrapper>;
21
- //# sourceMappingURL=wrapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/decoder/tinyh264/wrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA4B,MAAM,kBAAkB,CAAC;AAO5E,MAAM,WAAW,qBAAqB;IAClC,aAAa,EAAE,MAAM,CAAC;IAEtB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,WAAW,CAAC;CACrB;AAcD,qBAAa,eAAgB,SAAQ,cAAc;IAC/C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAC/E,IAAW,cAAc;;;MAA2C;gBAEjD,QAAQ,EAAE,MAAM;IAOnC,OAAO,CAAC,kBAAkB,CAExB;IAEK,IAAI,CAAC,IAAI,EAAE,WAAW;IAUb,OAAO;CAO1B;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CA8BhE"}
@@ -1,74 +0,0 @@
1
- import { PromiseResolver } from '@yume-chan/async';
2
- import { AutoDisposable, EventEmitter } from '@yume-chan/event';
3
- let worker;
4
- let workerReady = false;
5
- const pendingResolvers = [];
6
- let streamId = 0;
7
- const PICTURE_READY_SUBSCRIPTIONS = new Map();
8
- function subscribePictureReady(streamId, handler) {
9
- PICTURE_READY_SUBSCRIPTIONS.set(streamId, handler);
10
- return {
11
- dispose() {
12
- PICTURE_READY_SUBSCRIPTIONS.delete(streamId);
13
- }
14
- };
15
- }
16
- export class TinyH264Wrapper extends AutoDisposable {
17
- streamId;
18
- pictureReadyEvent = new EventEmitter();
19
- get onPictureReady() { return this.pictureReadyEvent.event; }
20
- constructor(streamId) {
21
- super();
22
- this.streamId = streamId;
23
- this.addDisposable(subscribePictureReady(streamId, this.handlePictureReady));
24
- }
25
- handlePictureReady = (e) => {
26
- this.pictureReadyEvent.fire(e);
27
- };
28
- feed(data) {
29
- worker.postMessage({
30
- type: 'decode',
31
- data: data,
32
- offset: 0,
33
- length: data.byteLength,
34
- renderStateId: this.streamId,
35
- }, [data]);
36
- }
37
- dispose() {
38
- super.dispose();
39
- worker.postMessage({
40
- type: 'release',
41
- renderStateId: this.streamId,
42
- });
43
- }
44
- }
45
- export function createTinyH264Wrapper() {
46
- if (!worker) {
47
- worker = new Worker(new URL('./worker.js', import.meta.url));
48
- worker.addEventListener('message', (e) => {
49
- const { data } = e;
50
- switch (data.type) {
51
- case 'decoderReady':
52
- workerReady = true;
53
- for (const resolver of pendingResolvers) {
54
- resolver.resolve(new TinyH264Wrapper(streamId));
55
- streamId += 1;
56
- }
57
- pendingResolvers.length = 0;
58
- break;
59
- case 'pictureReady':
60
- PICTURE_READY_SUBSCRIPTIONS.get(data.renderStateId)?.(data);
61
- break;
62
- }
63
- });
64
- }
65
- if (!workerReady) {
66
- const resolver = new PromiseResolver();
67
- pendingResolvers.push(resolver);
68
- return resolver.promise;
69
- }
70
- const decoder = new TinyH264Wrapper(streamId);
71
- streamId += 1;
72
- return Promise.resolve(decoder);
73
- }
74
- //# sourceMappingURL=wrapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/decoder/types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/decoder/types.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { WritableStream } from '@yume-chan/stream-extra';
2
- import type { ScrcpyVideoStreamPacket } from '../../options/index.js';
3
- import type { H264Decoder } from '../types.js';
4
- export declare class WebCodecsDecoder implements H264Decoder {
5
- readonly maxProfile: undefined;
6
- readonly maxLevel: undefined;
7
- private _writable;
8
- get writable(): WritableStream<ScrcpyVideoStreamPacket>;
9
- private _renderer;
10
- get renderer(): HTMLCanvasElement;
11
- private _frameRendered;
12
- get frameRendered(): number;
13
- private context;
14
- private decoder;
15
- private lastFrame;
16
- private animationFrame;
17
- constructor();
18
- private render;
19
- private configure;
20
- dispose(): void;
21
- }
22
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAC;AAMlE,qBAAa,gBAAiB,YAAW,WAAW;IAGhD,SAAgB,UAAU,YAAa;IACvC,SAAgB,QAAQ,YAAa;IAErC,OAAO,CAAC,SAAS,CAA0C;IAC3D,IAAW,QAAQ,4CAA6B;IAEhD,OAAO,CAAC,SAAS,CAAoB;IACrC,IAAW,QAAQ,sBAA6B;IAEhD,OAAO,CAAC,cAAc,CAAK;IAC3B,IAAW,aAAa,WAAkC;IAE1D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAe;IAG9B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAa;;IAwCnC,OAAO,CAAC,MAAM,CASZ;IAEF,OAAO,CAAC,SAAS;IAeV,OAAO;CAIjB"}
@@ -1,81 +0,0 @@
1
- import { WritableStream } from '@yume-chan/stream-extra';
2
- function toHex(value) {
3
- return value.toString(16).padStart(2, '0').toUpperCase();
4
- }
5
- export class WebCodecsDecoder {
6
- // Usually, browsers can decode most configurations,
7
- // So let device choose best profile and level for itself.
8
- maxProfile = undefined;
9
- maxLevel = undefined;
10
- _writable;
11
- get writable() { return this._writable; }
12
- _renderer;
13
- get renderer() { return this._renderer; }
14
- _frameRendered = 0;
15
- get frameRendered() { return this._frameRendered; }
16
- context;
17
- decoder;
18
- // Limit FPS to system refresh rate
19
- lastFrame;
20
- animationFrame = 0;
21
- constructor() {
22
- this._renderer = document.createElement('canvas');
23
- this.context = this._renderer.getContext('2d');
24
- this.decoder = new VideoDecoder({
25
- output: (frame) => {
26
- if (this.lastFrame) {
27
- this.lastFrame.close();
28
- }
29
- this.lastFrame = frame;
30
- if (!this.animationFrame) {
31
- // Start render loop on first frame
32
- this.render();
33
- }
34
- },
35
- error() { },
36
- });
37
- this._writable = new WritableStream({
38
- write: async (packet) => {
39
- switch (packet.type) {
40
- case 'configuration':
41
- this.configure(packet.data);
42
- break;
43
- case 'frame':
44
- this.decoder.decode(new EncodedVideoChunk({
45
- // Treat `undefined` as `key`, otherwise won't decode.
46
- type: packet.keyframe === false ? 'delta' : 'key',
47
- timestamp: 0,
48
- data: packet.data,
49
- }));
50
- break;
51
- }
52
- }
53
- });
54
- }
55
- render = () => {
56
- if (this.lastFrame) {
57
- this._frameRendered += 1;
58
- this.context.drawImage(this.lastFrame, 0, 0);
59
- this.lastFrame.close();
60
- this.lastFrame = undefined;
61
- }
62
- this.animationFrame = requestAnimationFrame(this.render);
63
- };
64
- configure(config) {
65
- const { profileIndex, constraintSet, levelIndex } = config;
66
- this._renderer.width = config.croppedWidth;
67
- this._renderer.height = config.croppedHeight;
68
- // https://www.rfc-editor.org/rfc/rfc6381#section-3.3
69
- // ISO Base Media File Format Name Space
70
- const codec = `avc1.${[profileIndex, constraintSet, levelIndex].map(toHex).join('')}`;
71
- this.decoder.configure({
72
- codec: codec,
73
- optimizeForLatency: true,
74
- });
75
- }
76
- dispose() {
77
- cancelAnimationFrame(this.animationFrame);
78
- this.decoder.close();
79
- }
80
- }
81
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_22.d.ts","sourceRoot":"","sources":["../../src/options/1_22.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE1E,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAChE,eAAe,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,oCAAoC;;;;;;;;;wBAGxB,CAAC;AAE1B,oBAAY,oCAAoC,GAC5C,OAAO,oCAAoC,CAAC,OAAO,CAAC,CAAC;AAEzD,qBAAa,iBAAiB,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CAClF,SAAQ,iBAAiB,CAAC,CAAC,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAWvC,eAAe,IAAI,CAAC;IAUpB,mCAAmC,CAC/C,OAAO,EAAE,oCAAoC,GAC9C,UAAU;CAGhB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_22.js","sourceRoot":"","sources":["../../src/options/1_22.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,oCAAoC,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAA8B,MAAM,WAAW,CAAC;AA2B1E,MAAM,CAAC,MAAM,oCAAoC,GAC7C,IAAI,MAAM,EAAE;KACP,MAAM,CAAC,oCAAoC,CAAC;KAC5C,KAAK,CAAC,SAAS,CAAC,CAAC;AAK1B,MAAM,OAAO,iBACT,SAAQ,iBAAoB;IAC5B,YAAmB,IAAoC;QACnD,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,iDAAiD;YACjD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9B;QAED,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEe,eAAe;QAC3B,OAAO;YACH,GAAG,KAAK,CAAC,eAAe,EAAE;YAC1B,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,KAAK;SACxB,CAAC;IACN,CAAC;IAEe,mCAAmC,CAC/C,OAA6C;QAE7C,OAAO,oCAAoC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ"}
@@ -1,300 +0,0 @@
1
- // cspell: ignore golomb
2
- // cspell: ignore qpprime
3
-
4
- class BitReader {
5
- private buffer: Uint8Array;
6
-
7
- private bytePosition = 0;
8
-
9
- private bitPosition = 0;
10
-
11
- public constructor(buffer: Uint8Array) {
12
- this.buffer = buffer;
13
- }
14
-
15
- public read(length: number): number {
16
- let result = 0;
17
- for (let i = 0; i < length; i += 1) {
18
- result = (result << 1) | this.next();
19
- }
20
- return result;
21
- }
22
-
23
- public next(): number {
24
- const value = (this.buffer[this.bytePosition]! >> (7 - this.bitPosition)) & 1;
25
- this.bitPosition += 1;
26
- if (this.bitPosition === 8) {
27
- this.bytePosition += 1;
28
- this.bitPosition = 0;
29
- }
30
- return value;
31
- }
32
-
33
- public decodeExponentialGolombNumber(): number {
34
- let length = 0;
35
- while (this.next() === 0) {
36
- length += 1;
37
- }
38
- if (length === 0) {
39
- return 0;
40
- }
41
- return (1 << length | this.read(length)) - 1;
42
- }
43
- }
44
-
45
- function* iterateNalu(buffer: Uint8Array): Generator<Uint8Array> {
46
- // -1 means we haven't found the first start code
47
- let start = -1;
48
- let writeIndex = 0;
49
-
50
- // How many `0x00`s in a row we have counted
51
- let zeroCount = 0;
52
-
53
- let inEmulation = false;
54
-
55
- for (const byte of buffer) {
56
- buffer[writeIndex] = byte;
57
- writeIndex += 1;
58
-
59
- if (inEmulation) {
60
- if (byte > 0x03) {
61
- // `0x00000304` or larger are invalid
62
- throw new Error('Invalid data');
63
- }
64
-
65
- inEmulation = false;
66
- continue;
67
- }
68
-
69
- if (byte == 0x00) {
70
- zeroCount += 1;
71
- continue;
72
- }
73
-
74
- const lastZeroCount = zeroCount;
75
- zeroCount = 0;
76
-
77
- if (start === -1) {
78
- // 0x000001 is the start code
79
- // But it can be preceded by any number of zeros
80
- // So 2 is the minimal
81
- if (lastZeroCount >= 2 && byte === 0x01) {
82
- // Found start of first NAL unit
83
- writeIndex = 0;
84
- start = 0;
85
- continue;
86
- }
87
-
88
- // Not begin with start code
89
- throw new Error('Invalid data');
90
- }
91
-
92
- if (lastZeroCount < 2) {
93
- // zero or one `0x00`s are acceptable
94
- continue;
95
- }
96
-
97
- if (byte === 0x01) {
98
- // Remove all leading `0x00`s and this `0x01`
99
- writeIndex -= lastZeroCount + 1;
100
-
101
- // Found another NAL unit
102
- yield buffer.subarray(start, writeIndex);
103
-
104
- start = writeIndex;
105
- continue;
106
- }
107
-
108
- if (lastZeroCount > 2) {
109
- // Too much `0x00`s
110
- throw new Error('Invalid data');
111
- }
112
-
113
- switch (byte) {
114
- case 0x02:
115
- // Didn't find why, but 7.4.1 NAL unit semantics forbids `0x000002` appearing in NAL units
116
- throw new Error('Invalid data');
117
- case 0x03:
118
- // `0x000003` is the "emulation_prevention_three_byte"
119
- // `0x00000300`, `0x00000301`, `0x00000302` and `0x00000303` represent
120
- // `0x000000`, `0x000001`, `0x000002` and `0x000003` respectively
121
-
122
- // Remove current byte
123
- writeIndex -= 1;
124
-
125
- inEmulation = true;
126
- break;
127
- default:
128
- // `0x000004` or larger are ok
129
- break;
130
- }
131
- }
132
-
133
- if (inEmulation || zeroCount !== 0) {
134
- throw new Error('Invalid data');
135
- }
136
-
137
- yield buffer.subarray(start, writeIndex);
138
- }
139
-
140
- // 7.3.2.1.1 Sequence parameter set data syntax
141
- export function parse_sequence_parameter_set(buffer: ArrayBuffer) {
142
- for (const nalu of iterateNalu(new Uint8Array(buffer))) {
143
- const reader = new BitReader(nalu);
144
- if (reader.next() !== 0) {
145
- throw new Error('Invalid data');
146
- }
147
-
148
- const nal_ref_idc = reader.read(2);
149
- const nal_unit_type = reader.read(5);
150
-
151
- if (nal_unit_type !== 7) {
152
- continue;
153
- }
154
-
155
- if (nal_ref_idc === 0) {
156
- throw new Error('Invalid data');
157
- }
158
-
159
- const profile_idc = reader.read(8);
160
- const constraint_set = reader.read(8);
161
-
162
- const constraint_set_reader = new BitReader(new Uint8Array([constraint_set]));
163
- const constraint_set0_flag = !!constraint_set_reader.next();
164
- const constraint_set1_flag = !!constraint_set_reader.next();
165
- const constraint_set2_flag = !!constraint_set_reader.next();
166
- const constraint_set3_flag = !!constraint_set_reader.next();
167
- const constraint_set4_flag = !!constraint_set_reader.next();
168
- const constraint_set5_flag = !!constraint_set_reader.next();
169
-
170
- // reserved_zero_2bits
171
- if (constraint_set_reader.read(2) !== 0) {
172
- throw new Error('Invalid data');
173
- }
174
-
175
- const level_idc = reader.read(8);
176
- const seq_parameter_set_id = reader.decodeExponentialGolombNumber();
177
-
178
- if (profile_idc === 100 || profile_idc === 110 ||
179
- profile_idc === 122 || profile_idc === 244 || profile_idc === 44 ||
180
- profile_idc === 83 || profile_idc === 86 || profile_idc === 118 ||
181
- profile_idc === 128 || profile_idc === 138 || profile_idc === 139 ||
182
- profile_idc === 134) {
183
- const chroma_format_idc = reader.decodeExponentialGolombNumber();
184
- if (chroma_format_idc === 3) {
185
- // separate_colour_plane_flag
186
- reader.next();
187
- }
188
-
189
- // bit_depth_luma_minus8
190
- reader.decodeExponentialGolombNumber();
191
- // bit_depth_chroma_minus8
192
- reader.decodeExponentialGolombNumber();
193
-
194
- // qpprime_y_zero_transform_bypass_flag
195
- reader.next();
196
-
197
- const seq_scaling_matrix_present_flag = !!reader.next();
198
- if (seq_scaling_matrix_present_flag) {
199
- const seq_scaling_list_present_flag: boolean[] = [];
200
- for (let i = 0; i < ((chroma_format_idc !== 3) ? 8 : 12); i++) {
201
- seq_scaling_list_present_flag[i] = !!reader.next();
202
- if (seq_scaling_list_present_flag[i])
203
- if (i < 6) {
204
- // TODO
205
- // scaling_list( ScalingList4x4[ i ], 16,
206
- // UseDefaultScalingMatrix4x4Flag[ i ])
207
- } else {
208
- // TODO
209
- // scaling_list( ScalingList8x8[ i − 6 ], 64,
210
- // UseDefaultScalingMatrix8x8Flag[ i − 6 ] )
211
- }
212
- }
213
- }
214
- }
215
-
216
- // log2_max_frame_num_minus4
217
- reader.decodeExponentialGolombNumber();
218
- const pic_order_cnt_type = reader.decodeExponentialGolombNumber();
219
- if (pic_order_cnt_type === 0) {
220
- // log2_max_pic_order_cnt_lsb_minus4
221
- reader.decodeExponentialGolombNumber();
222
- } else if (pic_order_cnt_type === 1) {
223
- // delta_pic_order_always_zero_flag
224
- reader.next();
225
- // offset_for_non_ref_pic
226
- reader.decodeExponentialGolombNumber();
227
- // offset_for_top_to_bottom_field
228
- reader.decodeExponentialGolombNumber();
229
- const num_ref_frames_in_pic_order_cnt_cycle = reader.decodeExponentialGolombNumber();
230
- const offset_for_ref_frame: number[] = [];
231
- for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {
232
- offset_for_ref_frame[i] = reader.decodeExponentialGolombNumber();
233
- }
234
- }
235
-
236
- // max_num_ref_frames
237
- reader.decodeExponentialGolombNumber();
238
- // gaps_in_frame_num_value_allowed_flag
239
- reader.next();
240
- const pic_width_in_mbs_minus1 = reader.decodeExponentialGolombNumber();
241
- const pic_height_in_map_units_minus1 = reader.decodeExponentialGolombNumber();
242
-
243
- const frame_mbs_only_flag = reader.next();
244
- if (!frame_mbs_only_flag) {
245
- // mb_adaptive_frame_field_flag
246
- reader.next();
247
- }
248
-
249
- // direct_8x8_inference_flag
250
- reader.next();
251
-
252
- const frame_cropping_flag = !!reader.next();
253
- let frame_crop_left_offset: number;
254
- let frame_crop_right_offset: number;
255
- let frame_crop_top_offset: number;
256
- let frame_crop_bottom_offset: number;
257
- if (frame_cropping_flag) {
258
- frame_crop_left_offset = reader.decodeExponentialGolombNumber();
259
- frame_crop_right_offset = reader.decodeExponentialGolombNumber();
260
- frame_crop_top_offset = reader.decodeExponentialGolombNumber();
261
- frame_crop_bottom_offset = reader.decodeExponentialGolombNumber();
262
- } else {
263
- frame_crop_left_offset = 0;
264
- frame_crop_right_offset = 0;
265
- frame_crop_top_offset = 0;
266
- frame_crop_bottom_offset = 0;
267
- }
268
-
269
- const vui_parameters_present_flag = !!reader.next();
270
- if (vui_parameters_present_flag) {
271
- // TODO
272
- // vui_parameters( )
273
- }
274
-
275
- return {
276
- profile_idc,
277
- constraint_set,
278
- constraint_set0_flag,
279
- constraint_set1_flag,
280
- constraint_set2_flag,
281
- constraint_set3_flag,
282
- constraint_set4_flag,
283
- constraint_set5_flag,
284
- level_idc,
285
- seq_parameter_set_id,
286
- pic_width_in_mbs_minus1,
287
- pic_height_in_map_units_minus1,
288
- frame_mbs_only_flag,
289
- frame_cropping_flag,
290
- frame_crop_left_offset,
291
- frame_crop_right_offset,
292
- frame_crop_top_offset,
293
- frame_crop_bottom_offset,
294
- };
295
- }
296
-
297
- throw new Error('Invalid data');
298
- }
299
-
300
- export type SequenceParameterSet = ReturnType<typeof parse_sequence_parameter_set>;