@yume-chan/scrcpy 0.0.18 → 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 (256) hide show
  1. package/CHANGELOG.json +18 -0
  2. package/CHANGELOG.md +10 -1
  3. package/README.md +111 -61
  4. package/bin/scrcpy-server +0 -0
  5. package/bin/version.d.ts +1 -1
  6. package/bin/version.js +1 -1
  7. package/esm/adb/client.d.ts +40 -40
  8. package/esm/adb/client.d.ts.map +1 -1
  9. package/esm/adb/client.js +223 -242
  10. package/esm/adb/client.js.map +1 -1
  11. package/esm/adb/connection.d.ts +48 -46
  12. package/esm/adb/connection.d.ts.map +1 -1
  13. package/esm/adb/connection.js +121 -109
  14. package/esm/adb/connection.js.map +1 -1
  15. package/esm/adb/index.d.ts +3 -3
  16. package/esm/adb/index.js +3 -3
  17. package/esm/adb/options/1_16.d.ts +7 -7
  18. package/esm/adb/options/1_16.d.ts.map +1 -1
  19. package/esm/adb/options/1_16.js +19 -19
  20. package/esm/adb/options/1_16.js.map +1 -1
  21. package/esm/adb/options/1_22.d.ts +7 -7
  22. package/esm/adb/options/1_22.d.ts.map +1 -1
  23. package/esm/adb/options/1_22.js +16 -16
  24. package/esm/adb/options/1_22.js.map +1 -1
  25. package/esm/adb/options/1_26.d.ts +9 -0
  26. package/esm/adb/options/1_26.d.ts.map +1 -0
  27. package/esm/adb/options/1_26.js +11 -0
  28. package/esm/adb/options/1_26.js.map +1 -0
  29. package/esm/adb/options/2_0.d.ts +8 -0
  30. package/esm/adb/options/2_0.d.ts.map +1 -0
  31. package/esm/adb/options/2_0.js +13 -0
  32. package/esm/adb/options/2_0.js.map +1 -0
  33. package/esm/adb/options/index.d.ts +3 -3
  34. package/esm/adb/options/index.js +3 -3
  35. package/esm/adb/options/types.d.ts +23 -23
  36. package/esm/adb/options/types.d.ts.map +1 -1
  37. package/esm/adb/options/types.js +36 -36
  38. package/esm/codec/av1.d.ts +33 -0
  39. package/esm/codec/av1.d.ts.map +1 -0
  40. package/esm/codec/av1.js +35 -0
  41. package/esm/codec/av1.js.map +1 -0
  42. package/esm/codec/h264.d.ts +98 -0
  43. package/esm/codec/h264.d.ts.map +1 -0
  44. package/esm/codec/h264.js +477 -0
  45. package/esm/codec/h264.js.map +1 -0
  46. package/esm/codec/h265.d.ts +36 -0
  47. package/esm/codec/h265.d.ts.map +1 -0
  48. package/esm/codec/h265.js +38 -0
  49. package/esm/codec/h265.js.map +1 -0
  50. package/esm/codec/index.d.ts +4 -0
  51. package/esm/codec/index.d.ts.map +1 -0
  52. package/esm/codec/index.js +4 -0
  53. package/esm/codec/index.js.map +1 -0
  54. package/esm/codec.d.ts +33 -33
  55. package/esm/codec.js +36 -36
  56. package/esm/control/back-or-screen-on.d.ts +2 -2
  57. package/esm/control/back-or-screen-on.d.ts.map +1 -1
  58. package/esm/control/back-or-screen-on.js +1 -1
  59. package/esm/control/basic.d.ts +5 -0
  60. package/esm/control/basic.d.ts.map +1 -0
  61. package/esm/control/basic.js +3 -0
  62. package/esm/control/basic.js.map +1 -0
  63. package/esm/control/hover-helper.d.ts +17 -17
  64. package/esm/control/hover-helper.d.ts.map +1 -1
  65. package/esm/control/hover-helper.js +43 -43
  66. package/esm/control/hover-helper.js.map +1 -1
  67. package/esm/control/index.d.ts +11 -11
  68. package/esm/control/index.js +11 -11
  69. package/esm/control/inject-keycode.d.ts +194 -60
  70. package/esm/control/inject-keycode.d.ts.map +1 -1
  71. package/esm/control/inject-keycode.js +199 -61
  72. package/esm/control/inject-keycode.js.map +1 -1
  73. package/esm/control/inject-scroll.d.ts +2 -2
  74. package/esm/control/inject-scroll.d.ts.map +1 -1
  75. package/esm/control/inject-scroll.js +1 -1
  76. package/esm/control/inject-text.d.ts +8 -8
  77. package/esm/control/inject-text.d.ts.map +1 -1
  78. package/esm/control/inject-text.js +6 -6
  79. package/esm/control/inject-text.js.map +1 -1
  80. package/esm/control/inject-touch.d.ts +37 -37
  81. package/esm/control/inject-touch.d.ts.map +1 -1
  82. package/esm/control/inject-touch.js +62 -62
  83. package/esm/control/rotate-device.d.ts +6 -6
  84. package/esm/control/rotate-device.d.ts.map +1 -1
  85. package/esm/control/rotate-device.js +3 -4
  86. package/esm/control/rotate-device.js.map +1 -1
  87. package/esm/control/serializer.d.ts +35 -33
  88. package/esm/control/serializer.d.ts.map +1 -1
  89. package/esm/control/serializer.js +82 -78
  90. package/esm/control/serializer.js.map +1 -1
  91. package/esm/control/set-clipboard.d.ts +2 -2
  92. package/esm/control/set-clipboard.d.ts.map +1 -1
  93. package/esm/control/set-clipboard.js +1 -1
  94. package/esm/control/set-screen-power-mode.d.ts +11 -11
  95. package/esm/control/set-screen-power-mode.d.ts.map +1 -1
  96. package/esm/control/set-screen-power-mode.js +11 -11
  97. package/esm/control/set-screen-power-mode.js.map +1 -1
  98. package/esm/control/simple.d.ts +5 -0
  99. package/esm/control/simple.d.ts.map +1 -0
  100. package/esm/control/simple.js +3 -0
  101. package/esm/control/simple.js.map +1 -0
  102. package/esm/control/type.d.ts +14 -14
  103. package/esm/control/type.js +18 -18
  104. package/esm/decoder.d.ts +2 -0
  105. package/esm/decoder.d.ts.map +1 -0
  106. package/esm/decoder.js +2 -0
  107. package/esm/decoder.js.map +1 -0
  108. package/esm/device-message/ack-clipboard.d.ts +8 -8
  109. package/esm/device-message/ack-clipboard.d.ts.map +1 -1
  110. package/esm/device-message/ack-clipboard.js +5 -5
  111. package/esm/device-message/clipboard.d.ts +9 -9
  112. package/esm/device-message/clipboard.d.ts.map +1 -1
  113. package/esm/device-message/clipboard.js +6 -6
  114. package/esm/device-message/index.d.ts +4 -4
  115. package/esm/device-message/index.js +4 -4
  116. package/esm/device-message/stream.d.ts +7 -7
  117. package/esm/device-message/stream.js +19 -19
  118. package/esm/device-message/type.d.ts +4 -4
  119. package/esm/device-message/type.js +6 -6
  120. package/esm/index.d.ts +5 -5
  121. package/esm/index.js +5 -5
  122. package/esm/options/1.17.d.ts +3 -0
  123. package/esm/options/1.17.d.ts.map +1 -0
  124. package/esm/options/1.17.js +2 -0
  125. package/esm/options/1.17.js.map +1 -0
  126. package/esm/options/1_16/codec-options.d.ts +20 -19
  127. package/esm/options/1_16/codec-options.d.ts.map +1 -1
  128. package/esm/options/1_16/codec-options.js +25 -25
  129. package/esm/options/1_16/codec-options.js.map +1 -1
  130. package/esm/options/1_16/float-to-uint16.d.ts +5 -0
  131. package/esm/options/1_16/float-to-uint16.d.ts.map +1 -0
  132. package/esm/options/1_16/float-to-uint16.js +27 -0
  133. package/esm/options/1_16/float-to-uint16.js.map +1 -0
  134. package/esm/options/1_16/h264-configuration.d.ts +48 -48
  135. package/esm/options/1_16/h264-configuration.js +413 -413
  136. package/esm/options/1_16/index.d.ts +4 -4
  137. package/esm/options/1_16/index.js +4 -4
  138. package/esm/options/1_16/init.d.ts +66 -0
  139. package/esm/options/1_16/init.d.ts.map +1 -0
  140. package/esm/options/1_16/init.js +16 -0
  141. package/esm/options/1_16/init.js.map +1 -0
  142. package/esm/options/1_16/message.d.ts +32 -0
  143. package/esm/options/1_16/message.d.ts.map +1 -0
  144. package/esm/options/1_16/message.js +37 -0
  145. package/esm/options/1_16/message.js.map +1 -0
  146. package/esm/options/1_16/options.d.ts +102 -93
  147. package/esm/options/1_16/options.d.ts.map +1 -1
  148. package/esm/options/1_16/options.js +189 -189
  149. package/esm/options/1_16/options.js.map +1 -1
  150. package/esm/options/1_16/scroll.d.ts +27 -26
  151. package/esm/options/1_16/scroll.d.ts.map +1 -1
  152. package/esm/options/1_16/scroll.js +55 -55
  153. package/esm/options/1_16/scroll.js.map +1 -1
  154. package/esm/options/1_17.d.ts +32 -0
  155. package/esm/options/1_17.d.ts.map +1 -0
  156. package/esm/options/1_17.js +36 -0
  157. package/esm/options/1_17.js.map +1 -0
  158. package/esm/options/1_18.d.ts +21 -19
  159. package/esm/options/1_18.d.ts.map +1 -1
  160. package/esm/options/1_18.js +45 -45
  161. package/esm/options/1_18.js.map +1 -1
  162. package/esm/options/1_21.d.ts +22 -20
  163. package/esm/options/1_21.d.ts.map +1 -1
  164. package/esm/options/1_21.js +36 -36
  165. package/esm/options/1_21.js.map +1 -1
  166. package/esm/options/1_22/index.d.ts +2 -2
  167. package/esm/options/1_22/index.js +2 -2
  168. package/esm/options/1_22/init.d.ts +17 -0
  169. package/esm/options/1_22/init.d.ts.map +1 -0
  170. package/esm/options/1_22/init.js +2 -0
  171. package/esm/options/1_22/init.js.map +1 -0
  172. package/esm/options/1_22/options.d.ts +29 -28
  173. package/esm/options/1_22/options.d.ts.map +1 -1
  174. package/esm/options/1_22/options.js +25 -25
  175. package/esm/options/1_22/options.js.map +1 -1
  176. package/esm/options/1_22/scroll.d.ts +16 -16
  177. package/esm/options/1_22/scroll.d.ts.map +1 -1
  178. package/esm/options/1_22/scroll.js +14 -14
  179. package/esm/options/1_23.d.ts +12 -11
  180. package/esm/options/1_23.d.ts.map +1 -1
  181. package/esm/options/1_23.js +34 -34
  182. package/esm/options/1_23.js.map +1 -1
  183. package/esm/options/1_24.d.ts +9 -8
  184. package/esm/options/1_24.d.ts.map +1 -1
  185. package/esm/options/1_24.js +12 -12
  186. package/esm/options/1_24.js.map +1 -1
  187. package/esm/options/1_25/index.d.ts +2 -2
  188. package/esm/options/1_25/index.js +2 -2
  189. package/esm/options/1_25/options.d.ts +6 -5
  190. package/esm/options/1_25/options.d.ts.map +1 -1
  191. package/esm/options/1_25/options.js +7 -7
  192. package/esm/options/1_25/options.js.map +1 -1
  193. package/esm/options/1_25/scroll.d.ts +19 -18
  194. package/esm/options/1_25/scroll.d.ts.map +1 -1
  195. package/esm/options/1_25/scroll.js +32 -32
  196. package/esm/options/1_25/scroll.js.map +1 -1
  197. package/esm/options/1_26.d.ts +57 -0
  198. package/esm/options/1_26.d.ts.map +1 -0
  199. package/esm/options/1_26.js +67 -0
  200. package/esm/options/1_26.js.map +1 -0
  201. package/esm/options/2.d.ts +57 -0
  202. package/esm/options/2.d.ts.map +1 -0
  203. package/esm/options/2.js +67 -0
  204. package/esm/options/2.js.map +1 -0
  205. package/esm/options/2_0.d.ts +87 -0
  206. package/esm/options/2_0.d.ts.map +1 -0
  207. package/esm/options/2_0.js +175 -0
  208. package/esm/options/2_0.js.map +1 -0
  209. package/esm/options/codec.d.ts +52 -0
  210. package/esm/options/codec.d.ts.map +1 -0
  211. package/esm/options/codec.js +26 -0
  212. package/esm/options/codec.js.map +1 -0
  213. package/esm/options/index.d.ts +8 -8
  214. package/esm/options/index.js +8 -8
  215. package/esm/options/latest.d.ts +12 -0
  216. package/esm/options/latest.d.ts.map +1 -0
  217. package/esm/options/latest.js +8 -0
  218. package/esm/options/latest.js.map +1 -0
  219. package/esm/options/types.d.ts +46 -46
  220. package/esm/options/types.d.ts.map +1 -1
  221. package/esm/options/types.js +17 -17
  222. package/package.json +11 -10
  223. package/src/adb/client.ts +72 -88
  224. package/src/adb/connection.ts +42 -25
  225. package/src/adb/index.ts +3 -3
  226. package/src/adb/options/1_16.ts +6 -4
  227. package/src/adb/options/1_22.ts +3 -3
  228. package/src/adb/options/index.ts +3 -3
  229. package/src/adb/options/types.ts +10 -10
  230. package/src/control/back-or-screen-on.ts +1 -1
  231. package/src/control/hover-helper.ts +2 -4
  232. package/src/control/inject-keycode.ts +193 -48
  233. package/src/control/inject-scroll.ts +1 -1
  234. package/src/control/inject-text.ts +7 -8
  235. package/src/control/inject-touch.ts +1 -1
  236. package/src/control/rotate-device.ts +7 -6
  237. package/src/control/serializer.ts +29 -26
  238. package/src/control/set-clipboard.ts +1 -1
  239. package/src/control/set-screen-power-mode.ts +7 -8
  240. package/src/device-message/ack-clipboard.ts +1 -1
  241. package/src/device-message/clipboard.ts +1 -1
  242. package/src/index.ts +5 -5
  243. package/src/options/1_16/codec-options.ts +4 -6
  244. package/src/options/1_16/options.ts +17 -12
  245. package/src/options/1_16/scroll.ts +2 -4
  246. package/src/options/1_18.ts +6 -6
  247. package/src/options/1_21.ts +5 -6
  248. package/src/options/1_22/options.ts +3 -2
  249. package/src/options/1_22/scroll.ts +1 -1
  250. package/src/options/1_23.ts +3 -5
  251. package/src/options/1_24.ts +5 -3
  252. package/src/options/1_25/options.ts +3 -2
  253. package/src/options/1_25/scroll.ts +4 -7
  254. package/src/options/index.ts +3 -3
  255. package/src/options/types.ts +8 -8
  256. package/tsconfig.build.tsbuildinfo +1 -1
@@ -0,0 +1,33 @@
1
+ export declare enum AndroidAv1Profile {
2
+ Main8 = 1,
3
+ Main10 = 2,
4
+ Main10Hdr10 = 4096,
5
+ Main10Hdr10Plus = 8192
6
+ }
7
+ export declare enum AndroidAv1Level {
8
+ Level2 = 1,
9
+ Level21 = 2,
10
+ Level22 = 4,
11
+ Level23 = 8,
12
+ Level3 = 16,
13
+ Level31 = 32,
14
+ Level32 = 64,
15
+ Level33 = 128,
16
+ Level4 = 256,
17
+ Level41 = 512,
18
+ Level42 = 1024,
19
+ Level43 = 2048,
20
+ Level5 = 4096,
21
+ Level51 = 8192,
22
+ Level52 = 16384,
23
+ Level53 = 32768,
24
+ Level6 = 65536,
25
+ Level61 = 131072,
26
+ Level62 = 262144,
27
+ Level63 = 524288,
28
+ Level7 = 1048576,
29
+ Level71 = 2097152,
30
+ Level72 = 4194304,
31
+ Level73 = 8388608
32
+ }
33
+ //# sourceMappingURL=av1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"av1.d.ts","sourceRoot":"","sources":["../../src/codec/av1.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IACzB,KAAK,IAAS;IACd,MAAM,IAAS;IACf,WAAW,OAAU;IACrB,eAAe,OAAU;CAC5B;AAED,oBAAY,eAAe;IACvB,MAAM,IAAS;IACf,OAAO,IAAS;IAChB,OAAO,IAAS;IAChB,OAAO,IAAS;IAChB,MAAM,KAAS;IACf,OAAO,KAAS;IAChB,OAAO,KAAS;IAChB,OAAO,MAAS;IAChB,MAAM,MAAS;IACf,OAAO,MAAS;IAChB,OAAO,OAAU;IACjB,OAAO,OAAU;IACjB,MAAM,OAAU;IAChB,OAAO,OAAU;IACjB,OAAO,QAAU;IACjB,OAAO,QAAU;IACjB,MAAM,QAAU;IAChB,OAAO,SAAU;IACjB,OAAO,SAAU;IACjB,OAAO,SAAU;IACjB,MAAM,UAAU;IAChB,OAAO,UAAU;IACjB,OAAO,UAAU;IACjB,OAAO,UAAU;CACpB"}
@@ -0,0 +1,35 @@
1
+ export var AndroidAv1Profile;
2
+ (function (AndroidAv1Profile) {
3
+ AndroidAv1Profile[AndroidAv1Profile["Main8"] = 1] = "Main8";
4
+ AndroidAv1Profile[AndroidAv1Profile["Main10"] = 2] = "Main10";
5
+ AndroidAv1Profile[AndroidAv1Profile["Main10Hdr10"] = 4096] = "Main10Hdr10";
6
+ AndroidAv1Profile[AndroidAv1Profile["Main10Hdr10Plus"] = 8192] = "Main10Hdr10Plus";
7
+ })(AndroidAv1Profile = AndroidAv1Profile || (AndroidAv1Profile = {}));
8
+ export var AndroidAv1Level;
9
+ (function (AndroidAv1Level) {
10
+ AndroidAv1Level[AndroidAv1Level["Level2"] = 1] = "Level2";
11
+ AndroidAv1Level[AndroidAv1Level["Level21"] = 2] = "Level21";
12
+ AndroidAv1Level[AndroidAv1Level["Level22"] = 4] = "Level22";
13
+ AndroidAv1Level[AndroidAv1Level["Level23"] = 8] = "Level23";
14
+ AndroidAv1Level[AndroidAv1Level["Level3"] = 16] = "Level3";
15
+ AndroidAv1Level[AndroidAv1Level["Level31"] = 32] = "Level31";
16
+ AndroidAv1Level[AndroidAv1Level["Level32"] = 64] = "Level32";
17
+ AndroidAv1Level[AndroidAv1Level["Level33"] = 128] = "Level33";
18
+ AndroidAv1Level[AndroidAv1Level["Level4"] = 256] = "Level4";
19
+ AndroidAv1Level[AndroidAv1Level["Level41"] = 512] = "Level41";
20
+ AndroidAv1Level[AndroidAv1Level["Level42"] = 1024] = "Level42";
21
+ AndroidAv1Level[AndroidAv1Level["Level43"] = 2048] = "Level43";
22
+ AndroidAv1Level[AndroidAv1Level["Level5"] = 4096] = "Level5";
23
+ AndroidAv1Level[AndroidAv1Level["Level51"] = 8192] = "Level51";
24
+ AndroidAv1Level[AndroidAv1Level["Level52"] = 16384] = "Level52";
25
+ AndroidAv1Level[AndroidAv1Level["Level53"] = 32768] = "Level53";
26
+ AndroidAv1Level[AndroidAv1Level["Level6"] = 65536] = "Level6";
27
+ AndroidAv1Level[AndroidAv1Level["Level61"] = 131072] = "Level61";
28
+ AndroidAv1Level[AndroidAv1Level["Level62"] = 262144] = "Level62";
29
+ AndroidAv1Level[AndroidAv1Level["Level63"] = 524288] = "Level63";
30
+ AndroidAv1Level[AndroidAv1Level["Level7"] = 1048576] = "Level7";
31
+ AndroidAv1Level[AndroidAv1Level["Level71"] = 2097152] = "Level71";
32
+ AndroidAv1Level[AndroidAv1Level["Level72"] = 4194304] = "Level72";
33
+ AndroidAv1Level[AndroidAv1Level["Level73"] = 8388608] = "Level73";
34
+ })(AndroidAv1Level = AndroidAv1Level || (AndroidAv1Level = {}));
35
+ //# sourceMappingURL=av1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"av1.js","sourceRoot":"","sources":["../../src/codec/av1.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB,2DAAc,CAAA;IACd,6DAAe,CAAA;IACf,0EAAqB,CAAA;IACrB,kFAAyB,CAAA;AAC7B,CAAC,EALW,iBAAiB,GAAjB,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,MAAM,CAAN,IAAY,eAyBX;AAzBD,WAAY,eAAe;IACvB,yDAAe,CAAA;IACf,2DAAgB,CAAA;IAChB,2DAAgB,CAAA;IAChB,2DAAgB,CAAA;IAChB,0DAAe,CAAA;IACf,4DAAgB,CAAA;IAChB,4DAAgB,CAAA;IAChB,6DAAgB,CAAA;IAChB,2DAAe,CAAA;IACf,6DAAgB,CAAA;IAChB,8DAAiB,CAAA;IACjB,8DAAiB,CAAA;IACjB,4DAAgB,CAAA;IAChB,8DAAiB,CAAA;IACjB,+DAAiB,CAAA;IACjB,+DAAiB,CAAA;IACjB,6DAAgB,CAAA;IAChB,gEAAiB,CAAA;IACjB,gEAAiB,CAAA;IACjB,gEAAiB,CAAA;IACjB,+DAAgB,CAAA;IAChB,iEAAiB,CAAA;IACjB,iEAAiB,CAAA;IACjB,iEAAiB,CAAA;AACrB,CAAC,EAzBW,eAAe,GAAf,eAAe,KAAf,eAAe,QAyB1B"}
@@ -0,0 +1,98 @@
1
+ export declare enum AndroidAvcProfile {
2
+ Baseline = 1,
3
+ Main = 2,
4
+ Extended = 4,
5
+ High = 8,
6
+ High10 = 16,
7
+ High422 = 32,
8
+ High444 = 64,
9
+ ConstrainedBaseline = 65536,
10
+ ConstrainedHigh = 524288
11
+ }
12
+ export declare enum AndroidAvcLevel {
13
+ Level1 = 1,
14
+ Level1b = 2,
15
+ Level11 = 4,
16
+ Level12 = 8,
17
+ Level13 = 16,
18
+ Level2 = 32,
19
+ Level21 = 64,
20
+ Level22 = 128,
21
+ Level3 = 256,
22
+ Level31 = 512,
23
+ Level32 = 1024,
24
+ Level4 = 2048,
25
+ Level41 = 4096,
26
+ Level42 = 8192,
27
+ Level5 = 16384,
28
+ Level51 = 32768,
29
+ Level52 = 65536,
30
+ Level6 = 131072,
31
+ Level61 = 262144,
32
+ Level62 = 524288
33
+ }
34
+ /**
35
+ * Split NAL units from a H.264/H.265 Annex B stream.
36
+ *
37
+ * The input is not modified.
38
+ * The returned NAL units are views of the input (no memory allocation nor copy),
39
+ * and still contains emulation prevention bytes.
40
+ *
41
+ * This methods returns a generator, so it can be stopped immediately
42
+ * after the interested NAL unit is found.
43
+ */
44
+ export declare function naluSplit(buffer: Uint8Array): Generator<Uint8Array>;
45
+ /**
46
+ * Remove emulation prevention bytes from a H.264/H.265 NAL Unit.
47
+ *
48
+ * The input is not modified.
49
+ * If the input doesn't contain any emulation prevention bytes,
50
+ * the input is returned as-is.
51
+ * Otherwise, a new `Uint8Array` is created and returned.
52
+ */
53
+ export declare function naluRemoveEmulation(buffer: Uint8Array): Uint8Array;
54
+ export declare function h264ParseSequenceParameterSet(buffer: Uint8Array): {
55
+ profile_idc: number;
56
+ constraint_set: number;
57
+ constraint_set0_flag: boolean;
58
+ constraint_set1_flag: boolean;
59
+ constraint_set2_flag: boolean;
60
+ constraint_set3_flag: boolean;
61
+ constraint_set4_flag: boolean;
62
+ constraint_set5_flag: boolean;
63
+ level_idc: number;
64
+ seq_parameter_set_id: number;
65
+ pic_width_in_mbs_minus1: number;
66
+ pic_height_in_map_units_minus1: number;
67
+ frame_mbs_only_flag: number;
68
+ frame_cropping_flag: boolean;
69
+ frame_crop_left_offset: number;
70
+ frame_crop_right_offset: number;
71
+ frame_crop_top_offset: number;
72
+ frame_crop_bottom_offset: number;
73
+ };
74
+ /**
75
+ * Find Sequence Parameter Set (SPS) and Picture Parameter Set (PPS)
76
+ * from H.264 Annex B formatted data.
77
+ */
78
+ export declare function h264SearchConfiguration(buffer: Uint8Array): {
79
+ sequenceParameterSet: Uint8Array;
80
+ pictureParameterSet: Uint8Array;
81
+ };
82
+ export interface H264Configuration {
83
+ pictureParameterSet: Uint8Array;
84
+ sequenceParameterSet: Uint8Array;
85
+ profileIndex: number;
86
+ constraintSet: number;
87
+ levelIndex: number;
88
+ encodedWidth: number;
89
+ encodedHeight: number;
90
+ cropLeft: number;
91
+ cropRight: number;
92
+ cropTop: number;
93
+ cropBottom: number;
94
+ croppedWidth: number;
95
+ croppedHeight: number;
96
+ }
97
+ export declare function h264ParseConfiguration(data: Uint8Array): H264Configuration;
98
+ //# sourceMappingURL=h264.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h264.d.ts","sourceRoot":"","sources":["../../src/codec/h264.ts"],"names":[],"mappings":"AAKA,oBAAY,iBAAiB;IACzB,QAAQ,IAAS;IACjB,IAAI,IAAS;IACb,QAAQ,IAAS;IACjB,IAAI,IAAS;IACb,MAAM,KAAS;IACf,OAAO,KAAS;IAChB,OAAO,KAAS;IAChB,mBAAmB,QAAU;IAC7B,eAAe,SAAU;CAC5B;AAED,oBAAY,eAAe;IACvB,MAAM,IAAS;IACf,OAAO,IAAS;IAChB,OAAO,IAAS;IAChB,OAAO,IAAS;IAChB,OAAO,KAAS;IAChB,MAAM,KAAS;IACf,OAAO,KAAS;IAChB,OAAO,MAAS;IAChB,MAAM,MAAS;IACf,OAAO,MAAS;IAChB,OAAO,OAAU;IACjB,MAAM,OAAU;IAChB,OAAO,OAAU;IACjB,OAAO,OAAU;IACjB,MAAM,QAAU;IAChB,OAAO,QAAU;IACjB,OAAO,QAAU;IACjB,MAAM,SAAU;IAChB,OAAO,SAAU;IACjB,OAAO,SAAU;CACpB;AAmDD;;;;;;;;;GASG;AACH,wBAAiB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAiFpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,cA0HrD;AAID,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,UAAU;;;;;;;;;;;;;;;;;;;EAsK/D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU;;;EAgCzD;AAED,MAAM,WAAW,iBAAiB;IAC9B,mBAAmB,EAAE,UAAU,CAAC;IAChC,oBAAoB,EAAE,UAAU,CAAC;IAEjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CA6C1E"}
@@ -0,0 +1,477 @@
1
+ // cspell: ignore golomb
2
+ // cspell: ignore qpprime
3
+ // cspell: ignore colour
4
+ // From https://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel
5
+ export var AndroidAvcProfile;
6
+ (function (AndroidAvcProfile) {
7
+ AndroidAvcProfile[AndroidAvcProfile["Baseline"] = 1] = "Baseline";
8
+ AndroidAvcProfile[AndroidAvcProfile["Main"] = 2] = "Main";
9
+ AndroidAvcProfile[AndroidAvcProfile["Extended"] = 4] = "Extended";
10
+ AndroidAvcProfile[AndroidAvcProfile["High"] = 8] = "High";
11
+ AndroidAvcProfile[AndroidAvcProfile["High10"] = 16] = "High10";
12
+ AndroidAvcProfile[AndroidAvcProfile["High422"] = 32] = "High422";
13
+ AndroidAvcProfile[AndroidAvcProfile["High444"] = 64] = "High444";
14
+ AndroidAvcProfile[AndroidAvcProfile["ConstrainedBaseline"] = 65536] = "ConstrainedBaseline";
15
+ AndroidAvcProfile[AndroidAvcProfile["ConstrainedHigh"] = 524288] = "ConstrainedHigh";
16
+ })(AndroidAvcProfile = AndroidAvcProfile || (AndroidAvcProfile = {}));
17
+ export var AndroidAvcLevel;
18
+ (function (AndroidAvcLevel) {
19
+ AndroidAvcLevel[AndroidAvcLevel["Level1"] = 1] = "Level1";
20
+ AndroidAvcLevel[AndroidAvcLevel["Level1b"] = 2] = "Level1b";
21
+ AndroidAvcLevel[AndroidAvcLevel["Level11"] = 4] = "Level11";
22
+ AndroidAvcLevel[AndroidAvcLevel["Level12"] = 8] = "Level12";
23
+ AndroidAvcLevel[AndroidAvcLevel["Level13"] = 16] = "Level13";
24
+ AndroidAvcLevel[AndroidAvcLevel["Level2"] = 32] = "Level2";
25
+ AndroidAvcLevel[AndroidAvcLevel["Level21"] = 64] = "Level21";
26
+ AndroidAvcLevel[AndroidAvcLevel["Level22"] = 128] = "Level22";
27
+ AndroidAvcLevel[AndroidAvcLevel["Level3"] = 256] = "Level3";
28
+ AndroidAvcLevel[AndroidAvcLevel["Level31"] = 512] = "Level31";
29
+ AndroidAvcLevel[AndroidAvcLevel["Level32"] = 1024] = "Level32";
30
+ AndroidAvcLevel[AndroidAvcLevel["Level4"] = 2048] = "Level4";
31
+ AndroidAvcLevel[AndroidAvcLevel["Level41"] = 4096] = "Level41";
32
+ AndroidAvcLevel[AndroidAvcLevel["Level42"] = 8192] = "Level42";
33
+ AndroidAvcLevel[AndroidAvcLevel["Level5"] = 16384] = "Level5";
34
+ AndroidAvcLevel[AndroidAvcLevel["Level51"] = 32768] = "Level51";
35
+ AndroidAvcLevel[AndroidAvcLevel["Level52"] = 65536] = "Level52";
36
+ AndroidAvcLevel[AndroidAvcLevel["Level6"] = 131072] = "Level6";
37
+ AndroidAvcLevel[AndroidAvcLevel["Level61"] = 262144] = "Level61";
38
+ AndroidAvcLevel[AndroidAvcLevel["Level62"] = 524288] = "Level62";
39
+ })(AndroidAvcLevel = AndroidAvcLevel || (AndroidAvcLevel = {}));
40
+ // H.264 has two standards: ITU-T H.264 and ISO/IEC 14496-10
41
+ // they have the same content, and refer themselves as "H.264".
42
+ // The name "AVC" (Advanced Video Coding) is only used in ISO spec name,
43
+ // and other ISO specs referring to H.264.
44
+ // Because this module parses H.264 Annex B format,
45
+ // it's named "h264" instead of "avc".
46
+ class BitReader {
47
+ buffer;
48
+ bytePosition = 0;
49
+ bitPosition = 0;
50
+ constructor(buffer) {
51
+ this.buffer = buffer;
52
+ }
53
+ read(length) {
54
+ let result = 0;
55
+ for (let i = 0; i < length; i += 1) {
56
+ result = (result << 1) | this.next();
57
+ }
58
+ return result;
59
+ }
60
+ next() {
61
+ const value = (this.buffer[this.bytePosition] >> (7 - this.bitPosition)) & 1;
62
+ this.bitPosition += 1;
63
+ if (this.bitPosition === 8) {
64
+ this.bytePosition += 1;
65
+ this.bitPosition = 0;
66
+ }
67
+ return value;
68
+ }
69
+ decodeExponentialGolombNumber() {
70
+ let length = 0;
71
+ while (this.next() === 0) {
72
+ length += 1;
73
+ }
74
+ if (length === 0) {
75
+ return 0;
76
+ }
77
+ return ((1 << length) | this.read(length)) - 1;
78
+ }
79
+ }
80
+ /**
81
+ * Split NAL units from a H.264/H.265 Annex B stream.
82
+ *
83
+ * The input is not modified.
84
+ * The returned NAL units are views of the input (no memory allocation nor copy),
85
+ * and still contains emulation prevention bytes.
86
+ *
87
+ * This methods returns a generator, so it can be stopped immediately
88
+ * after the interested NAL unit is found.
89
+ */
90
+ export function* naluSplit(buffer) {
91
+ // -1 means we haven't found the first start code
92
+ let start = -1;
93
+ // How many `0x00`s in a row we have counted
94
+ let zeroCount = 0;
95
+ let inEmulation = false;
96
+ for (let i = 0; i < buffer.length; i += 1) {
97
+ const byte = buffer[i];
98
+ if (inEmulation) {
99
+ if (byte > 0x03) {
100
+ // `0x00000304` or larger are invalid
101
+ throw new Error("Invalid data");
102
+ }
103
+ inEmulation = false;
104
+ continue;
105
+ }
106
+ if (byte === 0x00) {
107
+ zeroCount += 1;
108
+ continue;
109
+ }
110
+ const prevZeroCount = zeroCount;
111
+ zeroCount = 0;
112
+ if (start === -1) {
113
+ // 0x000001 is the start code
114
+ // But it can be preceded by any number of zeros
115
+ // So 2 is the minimal
116
+ if (prevZeroCount >= 2 && byte === 0x01) {
117
+ // Found start of first NAL unit
118
+ start = i + 1;
119
+ continue;
120
+ }
121
+ // Not begin with start code
122
+ throw new Error("Invalid data");
123
+ }
124
+ if (prevZeroCount < 2) {
125
+ // zero or one `0x00`s are acceptable
126
+ continue;
127
+ }
128
+ if (byte === 0x01) {
129
+ // Found another NAL unit
130
+ yield buffer.subarray(start, i - prevZeroCount);
131
+ start = i + 1;
132
+ continue;
133
+ }
134
+ if (prevZeroCount > 2) {
135
+ // Too much `0x00`s
136
+ throw new Error("Invalid data");
137
+ }
138
+ switch (byte) {
139
+ case 0x02:
140
+ // Didn't find why, but 7.4.1 NAL unit semantics forbids `0x000002` appearing in NAL units
141
+ throw new Error("Invalid data");
142
+ case 0x03:
143
+ // `0x000003` is the "emulation_prevention_three_byte"
144
+ // `0x00000300`, `0x00000301`, `0x00000302` and `0x00000303` represent
145
+ // `0x000000`, `0x000001`, `0x000002` and `0x000003` respectively
146
+ inEmulation = true;
147
+ break;
148
+ default:
149
+ // `0x000004` or larger are as-is
150
+ break;
151
+ }
152
+ }
153
+ if (inEmulation) {
154
+ throw new Error("Invalid data");
155
+ }
156
+ yield buffer.subarray(start, buffer.length);
157
+ }
158
+ /**
159
+ * Remove emulation prevention bytes from a H.264/H.265 NAL Unit.
160
+ *
161
+ * The input is not modified.
162
+ * If the input doesn't contain any emulation prevention bytes,
163
+ * the input is returned as-is.
164
+ * Otherwise, a new `Uint8Array` is created and returned.
165
+ */
166
+ export function naluRemoveEmulation(buffer) {
167
+ // output will be created when first emulation prevention byte is found
168
+ let output;
169
+ let outputOffset = 0;
170
+ let zeroCount = 0;
171
+ let inEmulation = false;
172
+ let i = 0;
173
+ scan: for (; i < buffer.length; i += 1) {
174
+ const byte = buffer[i];
175
+ if (byte === 0x00) {
176
+ zeroCount += 1;
177
+ continue;
178
+ }
179
+ // Current byte is not zero
180
+ const prevZeroCount = zeroCount;
181
+ zeroCount = 0;
182
+ if (prevZeroCount < 2) {
183
+ // zero or one `0x00`s are acceptable
184
+ continue;
185
+ }
186
+ if (byte === 0x01) {
187
+ // Unexpected start code
188
+ throw new Error("Invalid data");
189
+ }
190
+ if (prevZeroCount > 2) {
191
+ // Too much `0x00`s
192
+ throw new Error("Invalid data");
193
+ }
194
+ switch (byte) {
195
+ case 0x02:
196
+ // Didn't find why, but 7.4.1 NAL unit semantics forbids `0x000002` appearing in NAL units
197
+ throw new Error("Invalid data");
198
+ case 0x03:
199
+ // `0x000003` is the "emulation_prevention_three_byte"
200
+ // `0x00000300`, `0x00000301`, `0x00000302` and `0x00000303` represent
201
+ // `0x000000`, `0x000001`, `0x000002` and `0x000003` respectively
202
+ inEmulation = true;
203
+ // Create output and copy the data before the emulation prevention byte
204
+ // Output size is unknown, so we use the input size as an upper bound
205
+ output = new Uint8Array(buffer.length - 1);
206
+ output.set(buffer.subarray(0, i - prevZeroCount));
207
+ outputOffset = i - prevZeroCount + 1;
208
+ break scan;
209
+ default:
210
+ // `0x000004` or larger are as-is
211
+ break;
212
+ }
213
+ }
214
+ if (!output) {
215
+ return buffer;
216
+ }
217
+ // Continue at the byte after the emulation prevention byte
218
+ for (; i < buffer.length; i += 1) {
219
+ const byte = buffer[i];
220
+ output[outputOffset] = byte;
221
+ outputOffset += 1;
222
+ if (inEmulation) {
223
+ if (byte > 0x03) {
224
+ // `0x00000304` or larger are invalid
225
+ throw new Error("Invalid data");
226
+ }
227
+ inEmulation = false;
228
+ continue;
229
+ }
230
+ if (byte === 0x00) {
231
+ zeroCount += 1;
232
+ continue;
233
+ }
234
+ const prevZeroCount = zeroCount;
235
+ zeroCount = 0;
236
+ if (prevZeroCount < 2) {
237
+ // zero or one `0x00`s are acceptable
238
+ continue;
239
+ }
240
+ if (byte === 0x01) {
241
+ // Unexpected start code
242
+ throw new Error("Invalid data");
243
+ }
244
+ if (prevZeroCount > 2) {
245
+ // Too much `0x00`s
246
+ throw new Error("Invalid data");
247
+ }
248
+ switch (byte) {
249
+ case 0x02:
250
+ // Didn't find why, but 7.4.1 NAL unit semantics forbids `0x000002` appearing in NAL units
251
+ throw new Error("Invalid data");
252
+ case 0x03:
253
+ // `0x000003` is the "emulation_prevention_three_byte"
254
+ // `0x00000300`, `0x00000301`, `0x00000302` and `0x00000303` represent
255
+ // `0x000000`, `0x000001`, `0x000002` and `0x000003` respectively
256
+ inEmulation = true;
257
+ // Remove the emulation prevention byte
258
+ outputOffset -= 1;
259
+ break;
260
+ default:
261
+ // `0x000004` or larger are as-is
262
+ break;
263
+ }
264
+ }
265
+ return output.subarray(0, outputOffset);
266
+ }
267
+ // 7.3.2.1.1 Sequence parameter set data syntax
268
+ // Variable names in this method uses the snake_case convention as in the spec for easier referencing.
269
+ export function h264ParseSequenceParameterSet(buffer) {
270
+ const reader = new BitReader(buffer);
271
+ if (reader.next() !== 0) {
272
+ throw new Error("Invalid data");
273
+ }
274
+ const nal_ref_idc = reader.read(2);
275
+ const nal_unit_type = reader.read(5);
276
+ if (nal_unit_type !== 7) {
277
+ throw new Error("Invalid data");
278
+ }
279
+ if (nal_ref_idc === 0) {
280
+ throw new Error("Invalid data");
281
+ }
282
+ const profile_idc = reader.read(8);
283
+ const constraint_set = reader.read(8);
284
+ const constraint_set_reader = new BitReader(new Uint8Array([constraint_set]));
285
+ const constraint_set0_flag = !!constraint_set_reader.next();
286
+ const constraint_set1_flag = !!constraint_set_reader.next();
287
+ const constraint_set2_flag = !!constraint_set_reader.next();
288
+ const constraint_set3_flag = !!constraint_set_reader.next();
289
+ const constraint_set4_flag = !!constraint_set_reader.next();
290
+ const constraint_set5_flag = !!constraint_set_reader.next();
291
+ // reserved_zero_2bits
292
+ if (constraint_set_reader.read(2) !== 0) {
293
+ throw new Error("Invalid data");
294
+ }
295
+ const level_idc = reader.read(8);
296
+ const seq_parameter_set_id = reader.decodeExponentialGolombNumber();
297
+ if (profile_idc === 100 ||
298
+ profile_idc === 110 ||
299
+ profile_idc === 122 ||
300
+ profile_idc === 244 ||
301
+ profile_idc === 44 ||
302
+ profile_idc === 83 ||
303
+ profile_idc === 86 ||
304
+ profile_idc === 118 ||
305
+ profile_idc === 128 ||
306
+ profile_idc === 138 ||
307
+ profile_idc === 139 ||
308
+ profile_idc === 134) {
309
+ const chroma_format_idc = reader.decodeExponentialGolombNumber();
310
+ if (chroma_format_idc === 3) {
311
+ // separate_colour_plane_flag
312
+ reader.next();
313
+ }
314
+ // bit_depth_luma_minus8
315
+ reader.decodeExponentialGolombNumber();
316
+ // bit_depth_chroma_minus8
317
+ reader.decodeExponentialGolombNumber();
318
+ // qpprime_y_zero_transform_bypass_flag
319
+ reader.next();
320
+ const seq_scaling_matrix_present_flag = !!reader.next();
321
+ if (seq_scaling_matrix_present_flag) {
322
+ const seq_scaling_list_present_flag = [];
323
+ for (let i = 0; i < (chroma_format_idc !== 3 ? 8 : 12); i += 1) {
324
+ seq_scaling_list_present_flag[i] = !!reader.next();
325
+ if (seq_scaling_list_present_flag[i])
326
+ if (i < 6) {
327
+ // TODO
328
+ // scaling_list( ScalingList4x4[ i ], 16,
329
+ // UseDefaultScalingMatrix4x4Flag[ i ])
330
+ }
331
+ else {
332
+ // TODO
333
+ // scaling_list( ScalingList8x8[ i − 6 ], 64,
334
+ // UseDefaultScalingMatrix8x8Flag[ i − 6 ] )
335
+ }
336
+ }
337
+ }
338
+ }
339
+ // log2_max_frame_num_minus4
340
+ reader.decodeExponentialGolombNumber();
341
+ const pic_order_cnt_type = reader.decodeExponentialGolombNumber();
342
+ if (pic_order_cnt_type === 0) {
343
+ // log2_max_pic_order_cnt_lsb_minus4
344
+ reader.decodeExponentialGolombNumber();
345
+ }
346
+ else if (pic_order_cnt_type === 1) {
347
+ // delta_pic_order_always_zero_flag
348
+ reader.next();
349
+ // offset_for_non_ref_pic
350
+ reader.decodeExponentialGolombNumber();
351
+ // offset_for_top_to_bottom_field
352
+ reader.decodeExponentialGolombNumber();
353
+ const num_ref_frames_in_pic_order_cnt_cycle = reader.decodeExponentialGolombNumber();
354
+ const offset_for_ref_frame = [];
355
+ for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i += 1) {
356
+ offset_for_ref_frame[i] = reader.decodeExponentialGolombNumber();
357
+ }
358
+ }
359
+ // max_num_ref_frames
360
+ reader.decodeExponentialGolombNumber();
361
+ // gaps_in_frame_num_value_allowed_flag
362
+ reader.next();
363
+ const pic_width_in_mbs_minus1 = reader.decodeExponentialGolombNumber();
364
+ const pic_height_in_map_units_minus1 = reader.decodeExponentialGolombNumber();
365
+ const frame_mbs_only_flag = reader.next();
366
+ if (!frame_mbs_only_flag) {
367
+ // mb_adaptive_frame_field_flag
368
+ reader.next();
369
+ }
370
+ // direct_8x8_inference_flag
371
+ reader.next();
372
+ const frame_cropping_flag = !!reader.next();
373
+ let frame_crop_left_offset;
374
+ let frame_crop_right_offset;
375
+ let frame_crop_top_offset;
376
+ let frame_crop_bottom_offset;
377
+ if (frame_cropping_flag) {
378
+ frame_crop_left_offset = reader.decodeExponentialGolombNumber();
379
+ frame_crop_right_offset = reader.decodeExponentialGolombNumber();
380
+ frame_crop_top_offset = reader.decodeExponentialGolombNumber();
381
+ frame_crop_bottom_offset = reader.decodeExponentialGolombNumber();
382
+ }
383
+ else {
384
+ frame_crop_left_offset = 0;
385
+ frame_crop_right_offset = 0;
386
+ frame_crop_top_offset = 0;
387
+ frame_crop_bottom_offset = 0;
388
+ }
389
+ const vui_parameters_present_flag = !!reader.next();
390
+ if (vui_parameters_present_flag) {
391
+ // TODO
392
+ // vui_parameters( )
393
+ }
394
+ return {
395
+ profile_idc,
396
+ constraint_set,
397
+ constraint_set0_flag,
398
+ constraint_set1_flag,
399
+ constraint_set2_flag,
400
+ constraint_set3_flag,
401
+ constraint_set4_flag,
402
+ constraint_set5_flag,
403
+ level_idc,
404
+ seq_parameter_set_id,
405
+ pic_width_in_mbs_minus1,
406
+ pic_height_in_map_units_minus1,
407
+ frame_mbs_only_flag,
408
+ frame_cropping_flag,
409
+ frame_crop_left_offset,
410
+ frame_crop_right_offset,
411
+ frame_crop_top_offset,
412
+ frame_crop_bottom_offset,
413
+ };
414
+ }
415
+ /**
416
+ * Find Sequence Parameter Set (SPS) and Picture Parameter Set (PPS)
417
+ * from H.264 Annex B formatted data.
418
+ */
419
+ export function h264SearchConfiguration(buffer) {
420
+ let sequenceParameterSet;
421
+ let pictureParameterSet;
422
+ for (const nalu of naluSplit(buffer)) {
423
+ const naluType = nalu[0] & 0x1f;
424
+ switch (naluType) {
425
+ case 7: // Sequence parameter set
426
+ sequenceParameterSet = nalu;
427
+ if (pictureParameterSet) {
428
+ return {
429
+ sequenceParameterSet,
430
+ pictureParameterSet,
431
+ };
432
+ }
433
+ break;
434
+ case 8: // Picture parameter set
435
+ pictureParameterSet = nalu;
436
+ if (sequenceParameterSet) {
437
+ return {
438
+ sequenceParameterSet,
439
+ pictureParameterSet,
440
+ };
441
+ }
442
+ break;
443
+ default:
444
+ // ignore
445
+ break;
446
+ }
447
+ }
448
+ throw new Error("Invalid data");
449
+ }
450
+ export function h264ParseConfiguration(data) {
451
+ const { sequenceParameterSet, pictureParameterSet } = h264SearchConfiguration(data);
452
+ const { profile_idc: profileIndex, constraint_set: constraintSet, level_idc: levelIndex, pic_width_in_mbs_minus1, pic_height_in_map_units_minus1, frame_mbs_only_flag, frame_crop_left_offset, frame_crop_right_offset, frame_crop_top_offset, frame_crop_bottom_offset, } = h264ParseSequenceParameterSet(naluRemoveEmulation(sequenceParameterSet));
453
+ const encodedWidth = (pic_width_in_mbs_minus1 + 1) * 16;
454
+ const encodedHeight = (pic_height_in_map_units_minus1 + 1) * (2 - frame_mbs_only_flag) * 16;
455
+ const cropLeft = frame_crop_left_offset * 2;
456
+ const cropRight = frame_crop_right_offset * 2;
457
+ const cropTop = frame_crop_top_offset * 2;
458
+ const cropBottom = frame_crop_bottom_offset * 2;
459
+ const croppedWidth = encodedWidth - cropLeft - cropRight;
460
+ const croppedHeight = encodedHeight - cropTop - cropBottom;
461
+ return {
462
+ pictureParameterSet,
463
+ sequenceParameterSet,
464
+ profileIndex,
465
+ constraintSet,
466
+ levelIndex,
467
+ encodedWidth,
468
+ encodedHeight,
469
+ cropLeft,
470
+ cropRight,
471
+ cropTop,
472
+ cropBottom,
473
+ croppedWidth,
474
+ croppedHeight,
475
+ };
476
+ }
477
+ //# sourceMappingURL=h264.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h264.js","sourceRoot":"","sources":["../../src/codec/h264.ts"],"names":[],"mappings":"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"}