zhui-plus 1.0.0 → 1.0.10

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.

Potentially problematic release.


This version of zhui-plus might be problematic. Click here for more details.

Files changed (820) hide show
  1. package/dist/Heatmap.js +689 -0
  2. package/dist/WSPlayer/PlaySDKInterface.js +1 -0
  3. package/dist/WSPlayer/WSPlayer.js +1 -0
  4. package/dist/WSPlayer/audioTalkWorker.js +1 -0
  5. package/dist/WSPlayer/commonThread/libH264Enc.js +21 -0
  6. package/dist/WSPlayer/commonThread/libH264Enc.wasm +0 -0
  7. package/dist/WSPlayer/commonThread/libIVSDrawer.js +21 -0
  8. package/dist/WSPlayer/commonThread/libIVSDrawer.wasm +0 -0
  9. package/dist/WSPlayer/commonThread/libRenderEngine.js +21 -0
  10. package/dist/WSPlayer/commonThread/libRenderEngine.wasm +0 -0
  11. package/dist/WSPlayer/commonThread/libmavasp_litepacket.data +50 -0
  12. package/dist/WSPlayer/commonThread/libmavasp_litepacket.js +21 -0
  13. package/dist/WSPlayer/commonThread/libmavasp_litepacket.wasm +0 -0
  14. package/dist/WSPlayer/icon/IotComboBackGround-alarm.png +0 -0
  15. package/dist/WSPlayer/icon/IotComboBackGround.png +0 -0
  16. package/dist/WSPlayer/icon/RecordHover.svg +13 -0
  17. package/dist/WSPlayer/icon/RecordNormal.svg +13 -0
  18. package/dist/WSPlayer/icon/Recording.svg +15 -0
  19. package/dist/WSPlayer/icon/arrow-b.svg +9 -0
  20. package/dist/WSPlayer/icon/arrow-l.svg +9 -0
  21. package/dist/WSPlayer/icon/arrow-lb.svg +10 -0
  22. package/dist/WSPlayer/icon/arrow-lt.svg +10 -0
  23. package/dist/WSPlayer/icon/arrow-r.svg +9 -0
  24. package/dist/WSPlayer/icon/arrow-rb.svg +10 -0
  25. package/dist/WSPlayer/icon/arrow-rt.svg +10 -0
  26. package/dist/WSPlayer/icon/arrow-t.svg +9 -0
  27. package/dist/WSPlayer/icon/close-all-hover.svg +18 -0
  28. package/dist/WSPlayer/icon/close-all.svg +18 -0
  29. package/dist/WSPlayer/icon/close.svg +16 -0
  30. package/dist/WSPlayer/icon/close_hover.svg +16 -0
  31. package/dist/WSPlayer/icon/default.png +0 -0
  32. package/dist/WSPlayer/icon/draw-triangle_off.svg +14 -0
  33. package/dist/WSPlayer/icon/draw-triangle_off_hover.svg +14 -0
  34. package/dist/WSPlayer/icon/draw-triangle_on.svg +15 -0
  35. package/dist/WSPlayer/icon/draw-triangle_on_hover.svg +15 -0
  36. package/dist/WSPlayer/icon/drops.png +0 -0
  37. package/dist/WSPlayer/icon/fullscreen-hover.svg +13 -0
  38. package/dist/WSPlayer/icon/fullscreen.svg +13 -0
  39. package/dist/WSPlayer/icon/hide-pantilt-on.svg +13 -0
  40. package/dist/WSPlayer/icon/hide-pantilt.svg +13 -0
  41. package/dist/WSPlayer/icon/mobile-speed-control-icon.svg +13 -0
  42. package/dist/WSPlayer/icon/more.svg +13 -0
  43. package/dist/WSPlayer/icon/play-h.png +0 -0
  44. package/dist/WSPlayer/icon/play-n.png +0 -0
  45. package/dist/WSPlayer/icon/play-p.png +0 -0
  46. package/dist/WSPlayer/icon/ptz-icon1.svg +4 -0
  47. package/dist/WSPlayer/icon/ptz-icon2.svg +13 -0
  48. package/dist/WSPlayer/icon/ptz-icon3.svg +10 -0
  49. package/dist/WSPlayer/icon/ptz-icon4.svg +10 -0
  50. package/dist/WSPlayer/icon/ptz-icon5.svg +12 -0
  51. package/dist/WSPlayer/icon/ptz-icon6.svg +14 -0
  52. package/dist/WSPlayer/icon/ptz-select-hover.svg +3 -0
  53. package/dist/WSPlayer/icon/ptz-select.svg +3 -0
  54. package/dist/WSPlayer/icon/record_pause.svg +5 -0
  55. package/dist/WSPlayer/icon/record_play.svg +5 -0
  56. package/dist/WSPlayer/icon/refresh-replay.svg +11 -0
  57. package/dist/WSPlayer/icon/refresh-replay_hover.svg +11 -0
  58. package/dist/WSPlayer/icon/screen-more-icon.svg +15 -0
  59. package/dist/WSPlayer/icon/screen_1.svg +11 -0
  60. package/dist/WSPlayer/icon/screen_16.svg +18 -0
  61. package/dist/WSPlayer/icon/screen_16_hover.svg +18 -0
  62. package/dist/WSPlayer/icon/screen_1_hover.svg +11 -0
  63. package/dist/WSPlayer/icon/screen_2.svg +18 -0
  64. package/dist/WSPlayer/icon/screen_25.svg +19 -0
  65. package/dist/WSPlayer/icon/screen_25_hover.svg +19 -0
  66. package/dist/WSPlayer/icon/screen_2_hover.svg +18 -0
  67. package/dist/WSPlayer/icon/screen_3.svg +13 -0
  68. package/dist/WSPlayer/icon/screen_3_hover.svg +13 -0
  69. package/dist/WSPlayer/icon/screen_4.svg +12 -0
  70. package/dist/WSPlayer/icon/screen_4_hover.svg +12 -0
  71. package/dist/WSPlayer/icon/screen_6.svg +16 -0
  72. package/dist/WSPlayer/icon/screen_6_hover.svg +16 -0
  73. package/dist/WSPlayer/icon/screen_8.svg +18 -0
  74. package/dist/WSPlayer/icon/screen_8_hover.svg +18 -0
  75. package/dist/WSPlayer/icon/screen_9.svg +17 -0
  76. package/dist/WSPlayer/icon/screen_9_hover.svg +17 -0
  77. package/dist/WSPlayer/icon/screen_custom_division.svg +9 -0
  78. package/dist/WSPlayer/icon/screen_custom_division_hover.svg +9 -0
  79. package/dist/WSPlayer/icon/screen_custom_division_merge.svg +3 -0
  80. package/dist/WSPlayer/icon/screen_custom_division_split.svg +6 -0
  81. package/dist/WSPlayer/icon/snapshot.svg +38 -0
  82. package/dist/WSPlayer/icon/snapshot_hover.svg +38 -0
  83. package/dist/WSPlayer/icon/speed_left.svg +15 -0
  84. package/dist/WSPlayer/icon/speed_right.svg +15 -0
  85. package/dist/WSPlayer/icon/spread.png +0 -0
  86. package/dist/WSPlayer/icon/tag-left-alarm.png +0 -0
  87. package/dist/WSPlayer/icon/tag-left-normal.png +0 -0
  88. package/dist/WSPlayer/icon/tag-middle-alarm.png +0 -0
  89. package/dist/WSPlayer/icon/tag-middle-normal.png +0 -0
  90. package/dist/WSPlayer/icon/tag-right-alarm.png +0 -0
  91. package/dist/WSPlayer/icon/tag-right-normal.png +0 -0
  92. package/dist/WSPlayer/icon/talk-off-hover.svg +11 -0
  93. package/dist/WSPlayer/icon/talk-off.svg +11 -0
  94. package/dist/WSPlayer/icon/talk-on.svg +9 -0
  95. package/dist/WSPlayer/icon/voice-have.svg +43 -0
  96. package/dist/WSPlayer/icon/voice-have_hover.svg +43 -0
  97. package/dist/WSPlayer/icon/voice-null.svg +38 -0
  98. package/dist/WSPlayer/icon/voice-null_hover.svg +38 -0
  99. package/dist/WSPlayer/icon/ws-ctrl-ellipsis-hover.svg +14 -0
  100. package/dist/WSPlayer/icon/ws-ctrl-ellipsis.svg +14 -0
  101. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-b-bg.png +0 -0
  102. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-bg.png +0 -0
  103. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-l-bg.png +0 -0
  104. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-lb-bg.png +0 -0
  105. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-lt-bg.png +0 -0
  106. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-r-bg.png +0 -0
  107. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-rb-bg.png +0 -0
  108. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-rt-bg.png +0 -0
  109. package/dist/WSPlayer/icon/wsplayer-mobile-pantilt-t-bg.png +0 -0
  110. package/dist/WSPlayer/jquery-3.6.0.min.js +2 -0
  111. package/dist/WSPlayer/multiThread/libStreamClient.js +21 -0
  112. package/dist/WSPlayer/multiThread/libStreamClient.wasm +0 -0
  113. package/dist/WSPlayer/multiThread/libStreamClient.worker.js +1 -0
  114. package/dist/WSPlayer/multiThread/libplay.data +0 -0
  115. package/dist/WSPlayer/multiThread/libplay.js +1 -0
  116. package/dist/WSPlayer/multiThread/libplay.wasm +0 -0
  117. package/dist/WSPlayer/multiThread/libplay.worker.js +1 -0
  118. package/dist/WSPlayer/player.css +1490 -0
  119. package/dist/WSPlayer/singleThread/VideoDecodeWorker.js +1439 -0
  120. package/dist/WSPlayer/singleThread/libStreamClient.js +21 -0
  121. package/dist/WSPlayer/singleThread/libStreamClient.wasm +0 -0
  122. package/dist/WSPlayer/singleThread/libplay.data +0 -0
  123. package/dist/WSPlayer/singleThread/libplay.js +1 -0
  124. package/dist/WSPlayer/singleThread/libplay.wasm +0 -0
  125. package/dist/WSPlayer/window.division.css +80 -0
  126. package/dist/index.js +467 -0
  127. package/dist/locale/af.js +193 -0
  128. package/dist/locale/af.min.js +3 -0
  129. package/dist/locale/af.min.js.map +1 -0
  130. package/dist/locale/af.min.mjs +3 -0
  131. package/dist/locale/af.min.mjs.map +1 -0
  132. package/dist/locale/af.mjs +186 -0
  133. package/dist/locale/ar-eg.js +193 -0
  134. package/dist/locale/ar-eg.min.js +3 -0
  135. package/dist/locale/ar-eg.min.js.map +1 -0
  136. package/dist/locale/ar-eg.min.mjs +3 -0
  137. package/dist/locale/ar-eg.min.mjs.map +1 -0
  138. package/dist/locale/ar-eg.mjs +186 -0
  139. package/dist/locale/ar.js +193 -0
  140. package/dist/locale/ar.min.js +3 -0
  141. package/dist/locale/ar.min.js.map +1 -0
  142. package/dist/locale/ar.min.mjs +3 -0
  143. package/dist/locale/ar.min.mjs.map +1 -0
  144. package/dist/locale/ar.mjs +186 -0
  145. package/dist/locale/az.js +194 -0
  146. package/dist/locale/az.min.js +3 -0
  147. package/dist/locale/az.min.js.map +1 -0
  148. package/dist/locale/az.min.mjs +3 -0
  149. package/dist/locale/az.min.mjs.map +1 -0
  150. package/dist/locale/az.mjs +187 -0
  151. package/dist/locale/bg.js +193 -0
  152. package/dist/locale/bg.min.js +3 -0
  153. package/dist/locale/bg.min.js.map +1 -0
  154. package/dist/locale/bg.min.mjs +3 -0
  155. package/dist/locale/bg.min.mjs.map +1 -0
  156. package/dist/locale/bg.mjs +186 -0
  157. package/dist/locale/bn.js +193 -0
  158. package/dist/locale/bn.min.js +3 -0
  159. package/dist/locale/bn.min.js.map +1 -0
  160. package/dist/locale/bn.min.mjs +3 -0
  161. package/dist/locale/bn.min.mjs.map +1 -0
  162. package/dist/locale/bn.mjs +186 -0
  163. package/dist/locale/ca.js +193 -0
  164. package/dist/locale/ca.min.js +3 -0
  165. package/dist/locale/ca.min.js.map +1 -0
  166. package/dist/locale/ca.min.mjs +3 -0
  167. package/dist/locale/ca.min.mjs.map +1 -0
  168. package/dist/locale/ca.mjs +186 -0
  169. package/dist/locale/ckb.js +193 -0
  170. package/dist/locale/ckb.min.js +3 -0
  171. package/dist/locale/ckb.min.js.map +1 -0
  172. package/dist/locale/ckb.min.mjs +3 -0
  173. package/dist/locale/ckb.min.mjs.map +1 -0
  174. package/dist/locale/ckb.mjs +186 -0
  175. package/dist/locale/cs.js +195 -0
  176. package/dist/locale/cs.min.js +3 -0
  177. package/dist/locale/cs.min.js.map +1 -0
  178. package/dist/locale/cs.min.mjs +3 -0
  179. package/dist/locale/cs.min.mjs.map +1 -0
  180. package/dist/locale/cs.mjs +188 -0
  181. package/dist/locale/da.js +193 -0
  182. package/dist/locale/da.min.js +3 -0
  183. package/dist/locale/da.min.js.map +1 -0
  184. package/dist/locale/da.min.mjs +3 -0
  185. package/dist/locale/da.min.mjs.map +1 -0
  186. package/dist/locale/da.mjs +186 -0
  187. package/dist/locale/de.js +195 -0
  188. package/dist/locale/de.min.js +3 -0
  189. package/dist/locale/de.min.js.map +1 -0
  190. package/dist/locale/de.min.mjs +3 -0
  191. package/dist/locale/de.min.mjs.map +1 -0
  192. package/dist/locale/de.mjs +188 -0
  193. package/dist/locale/el.js +193 -0
  194. package/dist/locale/el.min.js +3 -0
  195. package/dist/locale/el.min.js.map +1 -0
  196. package/dist/locale/el.min.mjs +3 -0
  197. package/dist/locale/el.min.mjs.map +1 -0
  198. package/dist/locale/el.mjs +186 -0
  199. package/dist/locale/en.js +193 -0
  200. package/dist/locale/en.min.js +3 -0
  201. package/dist/locale/en.min.js.map +1 -0
  202. package/dist/locale/en.min.mjs +3 -0
  203. package/dist/locale/en.min.mjs.map +1 -0
  204. package/dist/locale/en.mjs +186 -0
  205. package/dist/locale/eo.js +193 -0
  206. package/dist/locale/eo.min.js +3 -0
  207. package/dist/locale/eo.min.js.map +1 -0
  208. package/dist/locale/eo.min.mjs +3 -0
  209. package/dist/locale/eo.min.mjs.map +1 -0
  210. package/dist/locale/eo.mjs +186 -0
  211. package/dist/locale/es.js +193 -0
  212. package/dist/locale/es.min.js +3 -0
  213. package/dist/locale/es.min.js.map +1 -0
  214. package/dist/locale/es.min.mjs +3 -0
  215. package/dist/locale/es.min.mjs.map +1 -0
  216. package/dist/locale/es.mjs +186 -0
  217. package/dist/locale/et.js +193 -0
  218. package/dist/locale/et.min.js +3 -0
  219. package/dist/locale/et.min.js.map +1 -0
  220. package/dist/locale/et.min.mjs +3 -0
  221. package/dist/locale/et.min.mjs.map +1 -0
  222. package/dist/locale/et.mjs +186 -0
  223. package/dist/locale/eu.js +193 -0
  224. package/dist/locale/eu.min.js +3 -0
  225. package/dist/locale/eu.min.js.map +1 -0
  226. package/dist/locale/eu.min.mjs +3 -0
  227. package/dist/locale/eu.min.mjs.map +1 -0
  228. package/dist/locale/eu.mjs +186 -0
  229. package/dist/locale/fa.js +193 -0
  230. package/dist/locale/fa.min.js +3 -0
  231. package/dist/locale/fa.min.js.map +1 -0
  232. package/dist/locale/fa.min.mjs +3 -0
  233. package/dist/locale/fa.min.mjs.map +1 -0
  234. package/dist/locale/fa.mjs +186 -0
  235. package/dist/locale/fi.js +193 -0
  236. package/dist/locale/fi.min.js +3 -0
  237. package/dist/locale/fi.min.js.map +1 -0
  238. package/dist/locale/fi.min.mjs +3 -0
  239. package/dist/locale/fi.min.mjs.map +1 -0
  240. package/dist/locale/fi.mjs +186 -0
  241. package/dist/locale/fr.js +193 -0
  242. package/dist/locale/fr.min.js +3 -0
  243. package/dist/locale/fr.min.js.map +1 -0
  244. package/dist/locale/fr.min.mjs +3 -0
  245. package/dist/locale/fr.min.mjs.map +1 -0
  246. package/dist/locale/fr.mjs +186 -0
  247. package/dist/locale/he.js +193 -0
  248. package/dist/locale/he.min.js +3 -0
  249. package/dist/locale/he.min.js.map +1 -0
  250. package/dist/locale/he.min.mjs +3 -0
  251. package/dist/locale/he.min.mjs.map +1 -0
  252. package/dist/locale/he.mjs +186 -0
  253. package/dist/locale/hi.js +193 -0
  254. package/dist/locale/hi.min.js +3 -0
  255. package/dist/locale/hi.min.js.map +1 -0
  256. package/dist/locale/hi.min.mjs +3 -0
  257. package/dist/locale/hi.min.mjs.map +1 -0
  258. package/dist/locale/hi.mjs +186 -0
  259. package/dist/locale/hr.js +193 -0
  260. package/dist/locale/hr.min.js +3 -0
  261. package/dist/locale/hr.min.js.map +1 -0
  262. package/dist/locale/hr.min.mjs +3 -0
  263. package/dist/locale/hr.min.mjs.map +1 -0
  264. package/dist/locale/hr.mjs +186 -0
  265. package/dist/locale/hu.js +193 -0
  266. package/dist/locale/hu.min.js +3 -0
  267. package/dist/locale/hu.min.js.map +1 -0
  268. package/dist/locale/hu.min.mjs +3 -0
  269. package/dist/locale/hu.min.mjs.map +1 -0
  270. package/dist/locale/hu.mjs +186 -0
  271. package/dist/locale/hy-am.js +193 -0
  272. package/dist/locale/hy-am.min.js +3 -0
  273. package/dist/locale/hy-am.min.js.map +1 -0
  274. package/dist/locale/hy-am.min.mjs +3 -0
  275. package/dist/locale/hy-am.min.mjs.map +1 -0
  276. package/dist/locale/hy-am.mjs +186 -0
  277. package/dist/locale/id.js +193 -0
  278. package/dist/locale/id.min.js +3 -0
  279. package/dist/locale/id.min.js.map +1 -0
  280. package/dist/locale/id.min.mjs +3 -0
  281. package/dist/locale/id.min.mjs.map +1 -0
  282. package/dist/locale/id.mjs +186 -0
  283. package/dist/locale/it.js +193 -0
  284. package/dist/locale/it.min.js +3 -0
  285. package/dist/locale/it.min.js.map +1 -0
  286. package/dist/locale/it.min.mjs +3 -0
  287. package/dist/locale/it.min.mjs.map +1 -0
  288. package/dist/locale/it.mjs +186 -0
  289. package/dist/locale/ja.js +193 -0
  290. package/dist/locale/ja.min.js +3 -0
  291. package/dist/locale/ja.min.js.map +1 -0
  292. package/dist/locale/ja.min.mjs +3 -0
  293. package/dist/locale/ja.min.mjs.map +1 -0
  294. package/dist/locale/ja.mjs +186 -0
  295. package/dist/locale/kk.js +193 -0
  296. package/dist/locale/kk.min.js +3 -0
  297. package/dist/locale/kk.min.js.map +1 -0
  298. package/dist/locale/kk.min.mjs +3 -0
  299. package/dist/locale/kk.min.mjs.map +1 -0
  300. package/dist/locale/kk.mjs +186 -0
  301. package/dist/locale/km.js +193 -0
  302. package/dist/locale/km.min.js +3 -0
  303. package/dist/locale/km.min.js.map +1 -0
  304. package/dist/locale/km.min.mjs +3 -0
  305. package/dist/locale/km.min.mjs.map +1 -0
  306. package/dist/locale/km.mjs +186 -0
  307. package/dist/locale/ko.js +193 -0
  308. package/dist/locale/ko.min.js +3 -0
  309. package/dist/locale/ko.min.js.map +1 -0
  310. package/dist/locale/ko.min.mjs +3 -0
  311. package/dist/locale/ko.min.mjs.map +1 -0
  312. package/dist/locale/ko.mjs +186 -0
  313. package/dist/locale/ku.js +193 -0
  314. package/dist/locale/ku.min.js +3 -0
  315. package/dist/locale/ku.min.js.map +1 -0
  316. package/dist/locale/ku.min.mjs +3 -0
  317. package/dist/locale/ku.min.mjs.map +1 -0
  318. package/dist/locale/ku.mjs +186 -0
  319. package/dist/locale/ky.js +193 -0
  320. package/dist/locale/ky.min.js +3 -0
  321. package/dist/locale/ky.min.js.map +1 -0
  322. package/dist/locale/ky.min.mjs +3 -0
  323. package/dist/locale/ky.min.mjs.map +1 -0
  324. package/dist/locale/ky.mjs +186 -0
  325. package/dist/locale/lo.js +193 -0
  326. package/dist/locale/lo.min.js +3 -0
  327. package/dist/locale/lo.min.js.map +1 -0
  328. package/dist/locale/lo.min.mjs +3 -0
  329. package/dist/locale/lo.min.mjs.map +1 -0
  330. package/dist/locale/lo.mjs +186 -0
  331. package/dist/locale/lt.js +193 -0
  332. package/dist/locale/lt.min.js +3 -0
  333. package/dist/locale/lt.min.js.map +1 -0
  334. package/dist/locale/lt.min.mjs +3 -0
  335. package/dist/locale/lt.min.mjs.map +1 -0
  336. package/dist/locale/lt.mjs +186 -0
  337. package/dist/locale/lv.js +193 -0
  338. package/dist/locale/lv.min.js +3 -0
  339. package/dist/locale/lv.min.js.map +1 -0
  340. package/dist/locale/lv.min.mjs +3 -0
  341. package/dist/locale/lv.min.mjs.map +1 -0
  342. package/dist/locale/lv.mjs +186 -0
  343. package/dist/locale/mg.js +193 -0
  344. package/dist/locale/mg.min.js +3 -0
  345. package/dist/locale/mg.min.js.map +1 -0
  346. package/dist/locale/mg.min.mjs +3 -0
  347. package/dist/locale/mg.min.mjs.map +1 -0
  348. package/dist/locale/mg.mjs +186 -0
  349. package/dist/locale/mn.js +193 -0
  350. package/dist/locale/mn.min.js +3 -0
  351. package/dist/locale/mn.min.js.map +1 -0
  352. package/dist/locale/mn.min.mjs +3 -0
  353. package/dist/locale/mn.min.mjs.map +1 -0
  354. package/dist/locale/mn.mjs +186 -0
  355. package/dist/locale/ms.js +195 -0
  356. package/dist/locale/ms.min.js +3 -0
  357. package/dist/locale/ms.min.js.map +1 -0
  358. package/dist/locale/ms.min.mjs +3 -0
  359. package/dist/locale/ms.min.mjs.map +1 -0
  360. package/dist/locale/ms.mjs +188 -0
  361. package/dist/locale/my.js +193 -0
  362. package/dist/locale/my.min.js +3 -0
  363. package/dist/locale/my.min.js.map +1 -0
  364. package/dist/locale/my.min.mjs +3 -0
  365. package/dist/locale/my.min.mjs.map +1 -0
  366. package/dist/locale/my.mjs +186 -0
  367. package/dist/locale/nb-no.js +193 -0
  368. package/dist/locale/nb-no.min.js +3 -0
  369. package/dist/locale/nb-no.min.js.map +1 -0
  370. package/dist/locale/nb-no.min.mjs +3 -0
  371. package/dist/locale/nb-no.min.mjs.map +1 -0
  372. package/dist/locale/nb-no.mjs +186 -0
  373. package/dist/locale/nl.js +193 -0
  374. package/dist/locale/nl.min.js +3 -0
  375. package/dist/locale/nl.min.js.map +1 -0
  376. package/dist/locale/nl.min.mjs +3 -0
  377. package/dist/locale/nl.min.mjs.map +1 -0
  378. package/dist/locale/nl.mjs +186 -0
  379. package/dist/locale/no.js +193 -0
  380. package/dist/locale/no.min.js +3 -0
  381. package/dist/locale/no.min.js.map +1 -0
  382. package/dist/locale/no.min.mjs +3 -0
  383. package/dist/locale/no.min.mjs.map +1 -0
  384. package/dist/locale/no.mjs +186 -0
  385. package/dist/locale/pa.js +193 -0
  386. package/dist/locale/pa.min.js +3 -0
  387. package/dist/locale/pa.min.js.map +1 -0
  388. package/dist/locale/pa.min.mjs +3 -0
  389. package/dist/locale/pa.min.mjs.map +1 -0
  390. package/dist/locale/pa.mjs +186 -0
  391. package/dist/locale/pl.js +193 -0
  392. package/dist/locale/pl.min.js +3 -0
  393. package/dist/locale/pl.min.js.map +1 -0
  394. package/dist/locale/pl.min.mjs +3 -0
  395. package/dist/locale/pl.min.mjs.map +1 -0
  396. package/dist/locale/pl.mjs +186 -0
  397. package/dist/locale/pt-br.js +193 -0
  398. package/dist/locale/pt-br.min.js +3 -0
  399. package/dist/locale/pt-br.min.js.map +1 -0
  400. package/dist/locale/pt-br.min.mjs +3 -0
  401. package/dist/locale/pt-br.min.mjs.map +1 -0
  402. package/dist/locale/pt-br.mjs +186 -0
  403. package/dist/locale/pt.js +193 -0
  404. package/dist/locale/pt.min.js +3 -0
  405. package/dist/locale/pt.min.js.map +1 -0
  406. package/dist/locale/pt.min.mjs +3 -0
  407. package/dist/locale/pt.min.mjs.map +1 -0
  408. package/dist/locale/pt.mjs +186 -0
  409. package/dist/locale/ro.js +193 -0
  410. package/dist/locale/ro.min.js +3 -0
  411. package/dist/locale/ro.min.js.map +1 -0
  412. package/dist/locale/ro.min.mjs +3 -0
  413. package/dist/locale/ro.min.mjs.map +1 -0
  414. package/dist/locale/ro.mjs +186 -0
  415. package/dist/locale/ru.js +193 -0
  416. package/dist/locale/ru.min.js +3 -0
  417. package/dist/locale/ru.min.js.map +1 -0
  418. package/dist/locale/ru.min.mjs +3 -0
  419. package/dist/locale/ru.min.mjs.map +1 -0
  420. package/dist/locale/ru.mjs +186 -0
  421. package/dist/locale/sk.js +195 -0
  422. package/dist/locale/sk.min.js +3 -0
  423. package/dist/locale/sk.min.js.map +1 -0
  424. package/dist/locale/sk.min.mjs +3 -0
  425. package/dist/locale/sk.min.mjs.map +1 -0
  426. package/dist/locale/sk.mjs +188 -0
  427. package/dist/locale/sl.js +193 -0
  428. package/dist/locale/sl.min.js +3 -0
  429. package/dist/locale/sl.min.js.map +1 -0
  430. package/dist/locale/sl.min.mjs +3 -0
  431. package/dist/locale/sl.min.mjs.map +1 -0
  432. package/dist/locale/sl.mjs +186 -0
  433. package/dist/locale/sr.js +193 -0
  434. package/dist/locale/sr.min.js +3 -0
  435. package/dist/locale/sr.min.js.map +1 -0
  436. package/dist/locale/sr.min.mjs +3 -0
  437. package/dist/locale/sr.min.mjs.map +1 -0
  438. package/dist/locale/sr.mjs +186 -0
  439. package/dist/locale/sv.js +193 -0
  440. package/dist/locale/sv.min.js +3 -0
  441. package/dist/locale/sv.min.js.map +1 -0
  442. package/dist/locale/sv.min.mjs +3 -0
  443. package/dist/locale/sv.min.mjs.map +1 -0
  444. package/dist/locale/sv.mjs +186 -0
  445. package/dist/locale/sw.js +193 -0
  446. package/dist/locale/sw.min.js +3 -0
  447. package/dist/locale/sw.min.js.map +1 -0
  448. package/dist/locale/sw.min.mjs +3 -0
  449. package/dist/locale/sw.min.mjs.map +1 -0
  450. package/dist/locale/sw.mjs +186 -0
  451. package/dist/locale/ta.js +193 -0
  452. package/dist/locale/ta.min.js +3 -0
  453. package/dist/locale/ta.min.js.map +1 -0
  454. package/dist/locale/ta.min.mjs +3 -0
  455. package/dist/locale/ta.min.mjs.map +1 -0
  456. package/dist/locale/ta.mjs +186 -0
  457. package/dist/locale/te.js +193 -0
  458. package/dist/locale/te.min.js +3 -0
  459. package/dist/locale/te.min.js.map +1 -0
  460. package/dist/locale/te.min.mjs +3 -0
  461. package/dist/locale/te.min.mjs.map +1 -0
  462. package/dist/locale/te.mjs +186 -0
  463. package/dist/locale/th.js +193 -0
  464. package/dist/locale/th.min.js +3 -0
  465. package/dist/locale/th.min.js.map +1 -0
  466. package/dist/locale/th.min.mjs +3 -0
  467. package/dist/locale/th.min.mjs.map +1 -0
  468. package/dist/locale/th.mjs +186 -0
  469. package/dist/locale/tk.js +193 -0
  470. package/dist/locale/tk.min.js +3 -0
  471. package/dist/locale/tk.min.js.map +1 -0
  472. package/dist/locale/tk.min.mjs +3 -0
  473. package/dist/locale/tk.min.mjs.map +1 -0
  474. package/dist/locale/tk.mjs +186 -0
  475. package/dist/locale/tr.js +193 -0
  476. package/dist/locale/tr.min.js +3 -0
  477. package/dist/locale/tr.min.js.map +1 -0
  478. package/dist/locale/tr.min.mjs +3 -0
  479. package/dist/locale/tr.min.mjs.map +1 -0
  480. package/dist/locale/tr.mjs +186 -0
  481. package/dist/locale/ug-cn.js +193 -0
  482. package/dist/locale/ug-cn.min.js +3 -0
  483. package/dist/locale/ug-cn.min.js.map +1 -0
  484. package/dist/locale/ug-cn.min.mjs +3 -0
  485. package/dist/locale/ug-cn.min.mjs.map +1 -0
  486. package/dist/locale/ug-cn.mjs +186 -0
  487. package/dist/locale/uk.js +193 -0
  488. package/dist/locale/uk.min.js +3 -0
  489. package/dist/locale/uk.min.js.map +1 -0
  490. package/dist/locale/uk.min.mjs +3 -0
  491. package/dist/locale/uk.min.mjs.map +1 -0
  492. package/dist/locale/uk.mjs +186 -0
  493. package/dist/locale/uz-uz.js +193 -0
  494. package/dist/locale/uz-uz.min.js +3 -0
  495. package/dist/locale/uz-uz.min.js.map +1 -0
  496. package/dist/locale/uz-uz.min.mjs +3 -0
  497. package/dist/locale/uz-uz.min.mjs.map +1 -0
  498. package/dist/locale/uz-uz.mjs +186 -0
  499. package/dist/locale/vi.js +193 -0
  500. package/dist/locale/vi.min.js +3 -0
  501. package/dist/locale/vi.min.js.map +1 -0
  502. package/dist/locale/vi.min.mjs +3 -0
  503. package/dist/locale/vi.min.mjs.map +1 -0
  504. package/dist/locale/vi.mjs +186 -0
  505. package/dist/locale/zh-cn.js +193 -0
  506. package/dist/locale/zh-cn.min.js +3 -0
  507. package/dist/locale/zh-cn.min.js.map +1 -0
  508. package/dist/locale/zh-cn.min.mjs +3 -0
  509. package/dist/locale/zh-cn.min.mjs.map +1 -0
  510. package/dist/locale/zh-cn.mjs +186 -0
  511. package/dist/locale/zh-hk.js +193 -0
  512. package/dist/locale/zh-hk.min.js +3 -0
  513. package/dist/locale/zh-hk.min.js.map +1 -0
  514. package/dist/locale/zh-hk.min.mjs +3 -0
  515. package/dist/locale/zh-hk.min.mjs.map +1 -0
  516. package/dist/locale/zh-hk.mjs +186 -0
  517. package/dist/locale/zh-mo.js +193 -0
  518. package/dist/locale/zh-mo.min.js +3 -0
  519. package/dist/locale/zh-mo.min.js.map +1 -0
  520. package/dist/locale/zh-mo.min.mjs +3 -0
  521. package/dist/locale/zh-mo.min.mjs.map +1 -0
  522. package/dist/locale/zh-mo.mjs +186 -0
  523. package/dist/locale/zh-tw.js +193 -0
  524. package/dist/locale/zh-tw.min.js +3 -0
  525. package/dist/locale/zh-tw.min.js.map +1 -0
  526. package/dist/locale/zh-tw.min.mjs +3 -0
  527. package/dist/locale/zh-tw.min.mjs.map +1 -0
  528. package/dist/locale/zh-tw.mjs +186 -0
  529. package/dist/style.css +1 -1
  530. package/dist/test/demo.docx +0 -0
  531. package/dist/test/demo.et +0 -0
  532. package/dist/test/demo.ofd +0 -0
  533. package/dist/test/demo.pdf +0 -0
  534. package/dist/test/test.ofd +0 -0
  535. package/dist/test/unzip.ofd +0 -0
  536. package/dist/test/zip.ofd +0 -0
  537. package/dist/types/auto-imports.d.ts +9 -0
  538. package/dist/types/components.d.ts +55 -0
  539. package/dist/zhui-plus.cjs.js +1 -0
  540. package/dist/zhui-plus.es.js +2 -0
  541. package/dist/zhui.svg +1 -0
  542. package/package.json +90 -4
  543. package/packages/components/AI/index.ts +10 -0
  544. package/packages/components/AI/src/zh-aiChat.vue +841 -0
  545. package/packages/components/badge/__tests__/badge.test.ts +38 -0
  546. package/packages/components/badge/index.ts +10 -0
  547. package/packages/components/badge/src/zh-badge.vue +86 -0
  548. package/packages/components/badge/style.scss +1 -0
  549. package/packages/components/button/__tests__/button.test.ts +94 -0
  550. package/packages/components/button/__tests__/buttonGroup.test.ts +46 -0
  551. package/packages/components/button/index.ts +11 -0
  552. package/packages/components/button/src/zh-button-group.vue +50 -0
  553. package/packages/components/button/src/zh-button.vue +152 -0
  554. package/packages/components/button/style/index.css +140 -0
  555. package/packages/components/charts/geo.json +11147 -0
  556. package/packages/components/charts/index.ts +35 -0
  557. package/packages/components/charts/src/zh-barChart.vue +97 -0
  558. package/packages/components/charts/src/zh-baseChart.vue +196 -0
  559. package/packages/components/charts/src/zh-lineBarChart.vue +113 -0
  560. package/packages/components/charts/src/zh-lineChart.vue +93 -0
  561. package/packages/components/charts/src/zh-mapChart.vue +214 -0
  562. package/packages/components/charts/src/zh-pictorialBar.vue +72 -0
  563. package/packages/components/charts/src/zh-pieChart.vue +67 -0
  564. package/packages/components/charts/src/zh-radarChart.vue +131 -0
  565. package/packages/components/charts/src/zh-scatterChart.vue +152 -0
  566. package/packages/components/chat/index.ts +10 -0
  567. package/packages/components/chat/src/zh-chat.vue +889 -0
  568. package/packages/components/container/index.ts +18 -0
  569. package/packages/components/container/src/zh-aside.vue +34 -0
  570. package/packages/components/container/src/zh-container.vue +45 -0
  571. package/packages/components/container/src/zh-footer.vue +33 -0
  572. package/packages/components/container/src/zh-header.vue +34 -0
  573. package/packages/components/container/src/zh-main.vue +26 -0
  574. package/packages/components/directive/focus.ts +14 -0
  575. package/packages/components/directive/idCard.ts +12 -0
  576. package/packages/components/directive/index.ts +19 -0
  577. package/packages/components/directive/number.ts +10 -0
  578. package/packages/components/directive/permission.ts +57 -0
  579. package/packages/components/directive/phone.ts +12 -0
  580. package/packages/components/drawer/index.ts +10 -0
  581. package/packages/components/drawer/src/zh-drawer.vue +78 -0
  582. package/packages/components/drawer/style/animation.scss +35 -0
  583. package/packages/components/drawer/style/index.scss +52 -0
  584. package/packages/components/drawer/style/media.scss +6 -0
  585. package/packages/components/fileViewer/index.ts +9 -0
  586. package/packages/components/fileViewer/src/liteofd/annotLayer.ts +203 -0
  587. package/packages/components/fileViewer/src/liteofd/asn1js/LICENSE +15 -0
  588. package/packages/components/fileViewer/src/liteofd/asn1js/README.md +108 -0
  589. package/packages/components/fileViewer/src/liteofd/asn1js/asn1.js +627 -0
  590. package/packages/components/fileViewer/src/liteofd/asn1js/base64.js +103 -0
  591. package/packages/components/fileViewer/src/liteofd/asn1js/defs.js +138 -0
  592. package/packages/components/fileViewer/src/liteofd/asn1js/dumpASN1.js +79 -0
  593. package/packages/components/fileViewer/src/liteofd/asn1js/hex.js +69 -0
  594. package/packages/components/fileViewer/src/liteofd/asn1js/int10.js +106 -0
  595. package/packages/components/fileViewer/src/liteofd/asn1js/oids.js +2725 -0
  596. package/packages/components/fileViewer/src/liteofd/asn1js/rfcdef.js +10377 -0
  597. package/packages/components/fileViewer/src/liteofd/attrType.ts +173 -0
  598. package/packages/components/fileViewer/src/liteofd/contentLayer.ts +203 -0
  599. package/packages/components/fileViewer/src/liteofd/elements/AnnotationPathSvg.ts +122 -0
  600. package/packages/components/fileViewer/src/liteofd/elements/BaseSvg.ts +6 -0
  601. package/packages/components/fileViewer/src/liteofd/elements/ImageSvg.ts +212 -0
  602. package/packages/components/fileViewer/src/liteofd/elements/PathSvg.ts +460 -0
  603. package/packages/components/fileViewer/src/liteofd/elements/SignatureElement.ts +231 -0
  604. package/packages/components/fileViewer/src/liteofd/elements/TextSvg.ts +235 -0
  605. package/packages/components/fileViewer/src/liteofd/elements/ofdAnnotationElement.ts +133 -0
  606. package/packages/components/fileViewer/src/liteofd/elements/ofdPageContainer.ts +183 -0
  607. package/packages/components/fileViewer/src/liteofd/elements/ofdPageRender.ts +71 -0
  608. package/packages/components/fileViewer/src/liteofd/elements/signObject.json +10084 -0
  609. package/packages/components/fileViewer/src/liteofd/elements/signature.json +381 -0
  610. package/packages/components/fileViewer/src/liteofd/font/arithmetic_decoder.js +182 -0
  611. package/packages/components/fileViewer/src/liteofd/font/ascii_85_stream.js +98 -0
  612. package/packages/components/fileViewer/src/liteofd/font/ascii_hex_stream.js +79 -0
  613. package/packages/components/fileViewer/src/liteofd/font/base_stream.js +110 -0
  614. package/packages/components/fileViewer/src/liteofd/font/bidi.js +440 -0
  615. package/packages/components/fileViewer/src/liteofd/font/binary_cmap.js +326 -0
  616. package/packages/components/fileViewer/src/liteofd/font/calibri_factors.js +309 -0
  617. package/packages/components/fileViewer/src/liteofd/font/ccitt.js +1059 -0
  618. package/packages/components/fileViewer/src/liteofd/font/ccitt_stream.js +60 -0
  619. package/packages/components/fileViewer/src/liteofd/font/cff_font.js +139 -0
  620. package/packages/components/fileViewer/src/liteofd/font/cff_parser.js +1940 -0
  621. package/packages/components/fileViewer/src/liteofd/font/charsets.js +119 -0
  622. package/packages/components/fileViewer/src/liteofd/font/chunked_stream.js +94 -0
  623. package/packages/components/fileViewer/src/liteofd/font/cmap.js +726 -0
  624. package/packages/components/fileViewer/src/liteofd/font/colorspace.js +1336 -0
  625. package/packages/components/fileViewer/src/liteofd/font/core_utils.js +636 -0
  626. package/packages/components/fileViewer/src/liteofd/font/decode_stream.js +177 -0
  627. package/packages/components/fileViewer/src/liteofd/font/differences.js +906 -0
  628. package/packages/components/fileViewer/src/liteofd/font/encodings.js +301 -0
  629. package/packages/components/fileViewer/src/liteofd/font/flate_stream.js +413 -0
  630. package/packages/components/fileViewer/src/liteofd/font/font_loader.js +455 -0
  631. package/packages/components/fileViewer/src/liteofd/font/font_renderer.js +900 -0
  632. package/packages/components/fileViewer/src/liteofd/font/font_substitutions.js +553 -0
  633. package/packages/components/fileViewer/src/liteofd/font/fonts copy.js +3391 -0
  634. package/packages/components/fileViewer/src/liteofd/font/fonts.js +3585 -0
  635. package/packages/components/fileViewer/src/liteofd/font/fonts_utils.js +178 -0
  636. package/packages/components/fileViewer/src/liteofd/font/function.js +1241 -0
  637. package/packages/components/fileViewer/src/liteofd/font/glyf.js +701 -0
  638. package/packages/components/fileViewer/src/liteofd/font/glyphlist.js +4557 -0
  639. package/packages/components/fileViewer/src/liteofd/font/helvetica_factors.js +352 -0
  640. package/packages/components/fileViewer/src/liteofd/font/image.js +986 -0
  641. package/packages/components/fileViewer/src/liteofd/font/image_resizer.js +398 -0
  642. package/packages/components/fileViewer/src/liteofd/font/image_utils.js +286 -0
  643. package/packages/components/fileViewer/src/liteofd/font/jbig2_stream.js +74 -0
  644. package/packages/components/fileViewer/src/liteofd/font/jpeg_stream.js +106 -0
  645. package/packages/components/fileViewer/src/liteofd/font/jpg.js +1590 -0
  646. package/packages/components/fileViewer/src/liteofd/font/jpx.js +2349 -0
  647. package/packages/components/fileViewer/src/liteofd/font/jpx_stream.js +87 -0
  648. package/packages/components/fileViewer/src/liteofd/font/liberationsans_widths.js +429 -0
  649. package/packages/components/fileViewer/src/liteofd/font/lzw_stream.js +150 -0
  650. package/packages/components/fileViewer/src/liteofd/font/metrics.d.ts +1 -0
  651. package/packages/components/fileViewer/src/liteofd/font/metrics.js +3057 -0
  652. package/packages/components/fileViewer/src/liteofd/font/murmurhash3.js +135 -0
  653. package/packages/components/fileViewer/src/liteofd/font/myriadpro_factors.js +291 -0
  654. package/packages/components/fileViewer/src/liteofd/font/ofd_stream.js +402 -0
  655. package/packages/components/fileViewer/src/liteofd/font/opentype_file_builder.js +154 -0
  656. package/packages/components/fileViewer/src/liteofd/font/parser.js +1409 -0
  657. package/packages/components/fileViewer/src/liteofd/font/pattern.js +1005 -0
  658. package/packages/components/fileViewer/src/liteofd/font/predictor_stream.js +234 -0
  659. package/packages/components/fileViewer/src/liteofd/font/primitives.js +354 -0
  660. package/packages/components/fileViewer/src/liteofd/font/properties.json +2110 -0
  661. package/packages/components/fileViewer/src/liteofd/font/ps_parser.js +268 -0
  662. package/packages/components/fileViewer/src/liteofd/font/run_length_stream.js +61 -0
  663. package/packages/components/fileViewer/src/liteofd/font/segoeui_factors.js +308 -0
  664. package/packages/components/fileViewer/src/liteofd/font/standard_fonts.js +915 -0
  665. package/packages/components/fileViewer/src/liteofd/font/stream.js +99 -0
  666. package/packages/components/fileViewer/src/liteofd/font/to_unicode_map.js +111 -0
  667. package/packages/components/fileViewer/src/liteofd/font/translatedFont.js +3125 -0
  668. package/packages/components/fileViewer/src/liteofd/font/type1_font.js +443 -0
  669. package/packages/components/fileViewer/src/liteofd/font/type1_parser.js +804 -0
  670. package/packages/components/fileViewer/src/liteofd/font/unicode.js +274 -0
  671. package/packages/components/fileViewer/src/liteofd/font/util.js +1159 -0
  672. package/packages/components/fileViewer/src/liteofd/font/xfa_fonts.js +296 -0
  673. package/packages/components/fileViewer/src/liteofd/jbig2/arithmetic_decoder.js +183 -0
  674. package/packages/components/fileViewer/src/liteofd/jbig2/ccitt.js +1070 -0
  675. package/packages/components/fileViewer/src/liteofd/jbig2/core_utils.js +180 -0
  676. package/packages/components/fileViewer/src/liteofd/jbig2/is_node.js +27 -0
  677. package/packages/components/fileViewer/src/liteofd/jbig2/jbig2.js +2589 -0
  678. package/packages/components/fileViewer/src/liteofd/jbig2/jbig2_stream.js +81 -0
  679. package/packages/components/fileViewer/src/liteofd/jbig2/primitives.js +371 -0
  680. package/packages/components/fileViewer/src/liteofd/jbig2/stream.js +1348 -0
  681. package/packages/components/fileViewer/src/liteofd/jbig2/util.js +970 -0
  682. package/packages/components/fileViewer/src/liteofd/layer.ts +12 -0
  683. package/packages/components/fileViewer/src/liteofd/liteOfd.ts +185 -0
  684. package/packages/components/fileViewer/src/liteofd/ofdActions.ts +29 -0
  685. package/packages/components/fileViewer/src/liteofd/ofdCanvas.ts +19 -0
  686. package/packages/components/fileViewer/src/liteofd/ofdData.ts +28 -0
  687. package/packages/components/fileViewer/src/liteofd/ofdDocument.ts +109 -0
  688. package/packages/components/fileViewer/src/liteofd/ofdFont.ts +425 -0
  689. package/packages/components/fileViewer/src/liteofd/ofdRender.ts +259 -0
  690. package/packages/components/fileViewer/src/liteofd/ofdWriter.ts +142 -0
  691. package/packages/components/fileViewer/src/liteofd/ofdtools.ts +43 -0
  692. package/packages/components/fileViewer/src/liteofd/parser.ts +499 -0
  693. package/packages/components/fileViewer/src/liteofd/promiseCapability.ts +47 -0
  694. package/packages/components/fileViewer/src/liteofd/utils/commonFont.ts +15 -0
  695. package/packages/components/fileViewer/src/liteofd/utils/elementUtils.ts +362 -0
  696. package/packages/components/fileViewer/src/liteofd/utils/jsonToXml.ts +95 -0
  697. package/packages/components/fileViewer/src/liteofd/utils/ofdUtils.ts +301 -0
  698. package/packages/components/fileViewer/src/liteofd/utils/signatureUtil.ts +246 -0
  699. package/packages/components/fileViewer/src/liteofd/utils/sm3.ts +235 -0
  700. package/packages/components/fileViewer/src/liteofd/utils/utils.ts +489 -0
  701. package/packages/components/fileViewer/src/liteofd/utils/verify_signature_util.ts +41 -0
  702. package/packages/components/fileViewer/src/ofd/CircleLoading.vue +64 -0
  703. package/packages/components/fileViewer/src/ofd/OfdPreview.vue +456 -0
  704. package/packages/components/fileViewer/src/ofd/OfdViewer.vue +211 -0
  705. package/packages/components/fileViewer/src/ofd/PageIndicator.vue +88 -0
  706. package/packages/components/fileViewer/src/ofd/RatioIndicator.vue +271 -0
  707. package/packages/components/fileViewer/src/ofd/ToolTip.vue +81 -0
  708. package/packages/components/fileViewer/src/zh-fileViewer.vue +426 -0
  709. package/packages/components/form/index.ts +11 -0
  710. package/packages/components/form/src/zh-form-item.vue +299 -0
  711. package/packages/components/form/src/zh-form.vue +90 -0
  712. package/packages/components/hideNumber/index.ts +9 -0
  713. package/packages/components/hideNumber/src/zh-hide-number.vue +37 -0
  714. package/packages/components/icon/index.ts +10 -0
  715. package/packages/components/icon/src/zh-icon.vue +32 -0
  716. package/packages/components/image/index.ts +9 -0
  717. package/packages/components/image/src/zh-image.vue +245 -0
  718. package/packages/components/index.ts +112 -0
  719. package/packages/components/input/index.ts +10 -0
  720. package/packages/components/input/src/input.com.ts +30 -0
  721. package/packages/components/input/src/input.type.ts +1 -0
  722. package/packages/components/input/src/zh-input.vue +92 -0
  723. package/packages/components/input/style/index.scss +30 -0
  724. package/packages/components/layout/index.ts +12 -0
  725. package/packages/components/layout/src/zh-col.tsx +81 -0
  726. package/packages/components/layout/src/zh-row.tsx +58 -0
  727. package/packages/components/layout/style/row.scss +6 -0
  728. package/packages/components/map/index.ts +18 -0
  729. package/packages/components/map/src/zh-amap.vue +999 -0
  730. package/packages/components/map/src/zh-bmap.vue +1578 -0
  731. package/packages/components/map/src/zh-omap.vue +1522 -0
  732. package/packages/components/map/src/zh-smap.vue +1555 -0
  733. package/packages/components/map/src/zh-tmap.vue +1058 -0
  734. package/packages/components/message/index.ts +8 -0
  735. package/packages/components/message/src/data.com.ts +61 -0
  736. package/packages/components/message/src/message-icon.vue +60 -0
  737. package/packages/components/message/src/message.ts +89 -0
  738. package/packages/components/message/src/message.type.ts +40 -0
  739. package/packages/components/message/src/zh-message.vue +133 -0
  740. package/packages/components/message-box/index.ts +12 -0
  741. package/packages/components/message-box/src/messageBox.help.ts +40 -0
  742. package/packages/components/message-box/src/messageBox.ts +126 -0
  743. package/packages/components/message-box/src/zh-message-box.vue +94 -0
  744. package/packages/components/message-box/style/index.css +29 -0
  745. package/packages/components/noData/index.ts +9 -0
  746. package/packages/components/noData/src/zh-no-data.vue +42 -0
  747. package/packages/components/operationColumn/index.ts +9 -0
  748. package/packages/components/operationColumn/src/zh-operationColumn.vue +113 -0
  749. package/packages/components/provider/index.ts +11 -0
  750. package/packages/components/provider/src/zh-authControl.vue +28 -0
  751. package/packages/components/provider/src/zh-authProvider.vue +36 -0
  752. package/packages/components/qrcode/index.ts +9 -0
  753. package/packages/components/qrcode/src/zh-qrcode.vue +271 -0
  754. package/packages/components/radio/index.ts +10 -0
  755. package/packages/components/radio/src/zh-radio.vue +86 -0
  756. package/packages/components/searchForm/index.ts +9 -0
  757. package/packages/components/searchForm/src/zh-search-form.vue +340 -0
  758. package/packages/components/signature/index.ts +10 -0
  759. package/packages/components/signature/src/zh-signature.vue +355 -0
  760. package/packages/components/switch/index.ts +10 -0
  761. package/packages/components/switch/src/zh-switch.vue +162 -0
  762. package/packages/components/table/index.ts +10 -0
  763. package/packages/components/table/src/types.ts +62 -0
  764. package/packages/components/table/src/zh-table.vue +220 -0
  765. package/packages/components/upload/index.ts +15 -0
  766. package/packages/components/upload/src/zh-cupload.vue +147 -0
  767. package/packages/components/upload/src/zh-upload.vue +258 -0
  768. package/packages/components/upload/src/zh-uploadCard.vue +176 -0
  769. package/packages/components/upload/src/zh-uploadDialog.vue +165 -0
  770. package/packages/components/videoPlayer/index.ts +12 -0
  771. package/packages/components/videoPlayer/src/PlayerManager.js +706 -0
  772. package/packages/components/videoPlayer/src/api.js +354 -0
  773. package/packages/components/videoPlayer/src/errorHandler.ts +39 -0
  774. package/packages/components/videoPlayer/src/resourceLoader.ts +68 -0
  775. package/packages/components/videoPlayer/src/useDahuaPlayer.ts +242 -0
  776. package/packages/components/videoPlayer/src/zh-dhPlayer.vue +119 -0
  777. package/packages/components/videoPlayer/src/zh-hlsPlayer.vue +575 -0
  778. package/packages/resolver/index.ts +324 -0
  779. package/packages/styles/_element.scss +324 -0
  780. package/packages/styles/_variable.scss +136 -0
  781. package/packages/styles/index.scss +3 -0
  782. package/packages/tokens/tokens.ts +2 -0
  783. package/packages/types/form.ts +205 -0
  784. package/packages/types/index.ts +4 -0
  785. package/packages/types/player.ts +80 -0
  786. package/packages/types/provider.ts +4 -0
  787. package/packages/types/searchForm.ts +24 -0
  788. package/packages/utils/common/__tests__/common.test.ts +12 -0
  789. package/packages/utils/common/common.ts +68 -0
  790. package/packages/utils/constant.ts +12 -0
  791. package/packages/utils/copy.ts +20 -0
  792. package/packages/utils/data.ts +62 -0
  793. package/packages/utils/echarts/echarts.ts +34 -0
  794. package/packages/utils/event.ts +37 -0
  795. package/packages/utils/hooks/__tests__/hooks.test.ts +24 -0
  796. package/packages/utils/hooks/data.ts +100 -0
  797. package/packages/utils/hooks/hooks.util.ts +39 -0
  798. package/packages/utils/hooks/index.ts +1 -0
  799. package/packages/utils/hooks/useBreakpoint.ts +89 -0
  800. package/packages/utils/hooks/useEcharts.ts +56 -0
  801. package/packages/utils/hooks/useEventListener.ts +57 -0
  802. package/packages/utils/hooks/useLegendProcessor.ts +92 -0
  803. package/packages/utils/hooks/usePermission.ts +22 -0
  804. package/packages/utils/hooks/useTimeout.ts +45 -0
  805. package/packages/utils/is.ts +79 -0
  806. package/packages/utils/utils.ts +136 -0
  807. package/packages/utils/vue/util-modal.vue +61 -0
  808. package/types/auto-imports.d.ts +9 -0
  809. package/types/component.d.ts +6 -0
  810. package/types/components.d.ts +131 -0
  811. package/types/defaults.d.ts +5 -0
  812. package/types/el-components.d.ts +23 -0
  813. package/types/global.d.ts +130 -0
  814. package/types/index.d.ts +11 -0
  815. package/types/zh-components.d.ts +23 -0
  816. package/types/zhui.d.ts +76 -0
  817. package/.idea/workspace.xml +0 -72
  818. package/README.md +0 -1
  819. package/dist/zh-ui.es.js +0 -56706
  820. package/dist/zh-ui.umd.js +0 -67
@@ -0,0 +1,2349 @@
1
+ /* Copyright 2012 Mozilla Foundation
2
+ *
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+
16
+ import { BaseException, info, unreachable, warn } from "./util.js";
17
+ import { log2, readUint16, readUint32 } from "./core_utils.js";
18
+ import { ArithmeticDecoder } from "./arithmetic_decoder.js";
19
+
20
+ class JpxError extends BaseException {
21
+ constructor(msg) {
22
+ super(`JPX error: ${msg}`, "JpxError");
23
+ }
24
+ }
25
+
26
+ // Table E.1
27
+ const SubbandsGainLog2 = {
28
+ LL: 0,
29
+ LH: 1,
30
+ HL: 1,
31
+ HH: 2,
32
+ };
33
+
34
+ class JpxImage {
35
+ constructor() {
36
+ this.failOnCorruptedImage = false;
37
+ }
38
+
39
+ parse(data) {
40
+ const head = readUint16(data, 0);
41
+ // No box header, immediate start of codestream (SOC)
42
+ if (head === 0xff4f) {
43
+ this.parseCodestream(data, 0, data.length);
44
+ return;
45
+ }
46
+
47
+ const length = data.length;
48
+ let position = 0;
49
+ while (position < length) {
50
+ let headerSize = 8;
51
+ let lbox = readUint32(data, position);
52
+ const tbox = readUint32(data, position + 4);
53
+ position += headerSize;
54
+ if (lbox === 1) {
55
+ // XLBox: read UInt64 according to spec.
56
+ // JavaScript's int precision of 53 bit should be sufficient here.
57
+ lbox =
58
+ readUint32(data, position) * 4294967296 +
59
+ readUint32(data, position + 4);
60
+ position += 8;
61
+ headerSize += 8;
62
+ }
63
+ if (lbox === 0) {
64
+ lbox = length - position + headerSize;
65
+ }
66
+ if (lbox < headerSize) {
67
+ throw new JpxError("Invalid box field size");
68
+ }
69
+ const dataLength = lbox - headerSize;
70
+ let jumpDataLength = true;
71
+ switch (tbox) {
72
+ case 0x6a703268: // 'jp2h'
73
+ jumpDataLength = false; // parsing child boxes
74
+ break;
75
+ case 0x636f6c72: // 'colr'
76
+ // Colorspaces are not used, the CS from the PDF is used.
77
+ const method = data[position];
78
+ if (method === 1) {
79
+ // enumerated colorspace
80
+ const colorspace = readUint32(data, position + 3);
81
+ switch (colorspace) {
82
+ case 16: // this indicates a sRGB colorspace
83
+ case 17: // this indicates a grayscale colorspace
84
+ case 18: // this indicates a YUV colorspace
85
+ break;
86
+ default:
87
+ warn("Unknown colorspace " + colorspace);
88
+ break;
89
+ }
90
+ } else if (method === 2) {
91
+ info("ICC profile not supported");
92
+ }
93
+ break;
94
+ case 0x6a703263: // 'jp2c'
95
+ this.parseCodestream(data, position, position + dataLength);
96
+ break;
97
+ case 0x6a502020: // 'jP\024\024'
98
+ if (readUint32(data, position) !== 0x0d0a870a) {
99
+ warn("Invalid JP2 signature");
100
+ }
101
+ break;
102
+ // The following header types are valid but currently not used:
103
+ case 0x6a501a1a: // 'jP\032\032'
104
+ case 0x66747970: // 'ftyp'
105
+ case 0x72726571: // 'rreq'
106
+ case 0x72657320: // 'res '
107
+ case 0x69686472: // 'ihdr'
108
+ break;
109
+ default:
110
+ const headerType = String.fromCharCode(
111
+ (tbox >> 24) & 0xff,
112
+ (tbox >> 16) & 0xff,
113
+ (tbox >> 8) & 0xff,
114
+ tbox & 0xff
115
+ );
116
+ warn(`Unsupported header type ${tbox} (${headerType}).`);
117
+ break;
118
+ }
119
+ if (jumpDataLength) {
120
+ position += dataLength;
121
+ }
122
+ }
123
+ }
124
+
125
+ parseImageProperties(stream) {
126
+ let newByte = stream.getByte();
127
+ while (newByte >= 0) {
128
+ const oldByte = newByte;
129
+ newByte = stream.getByte();
130
+ const code = (oldByte << 8) | newByte;
131
+ // Image and tile size (SIZ)
132
+ if (code === 0xff51) {
133
+ stream.skip(4);
134
+ const Xsiz = stream.getInt32() >>> 0; // Byte 4
135
+ const Ysiz = stream.getInt32() >>> 0; // Byte 8
136
+ const XOsiz = stream.getInt32() >>> 0; // Byte 12
137
+ const YOsiz = stream.getInt32() >>> 0; // Byte 16
138
+ stream.skip(16);
139
+ const Csiz = stream.getUint16(); // Byte 36
140
+ this.width = Xsiz - XOsiz;
141
+ this.height = Ysiz - YOsiz;
142
+ this.componentsCount = Csiz;
143
+ // Results are always returned as `Uint8ClampedArray`s.
144
+ this.bitsPerComponent = 8;
145
+ return;
146
+ }
147
+ }
148
+ throw new JpxError("No size marker found in JPX stream");
149
+ }
150
+
151
+ parseCodestream(data, start, end) {
152
+ const context = {};
153
+ let doNotRecover = false;
154
+ try {
155
+ let position = start;
156
+ while (position + 1 < end) {
157
+ const code = readUint16(data, position);
158
+ position += 2;
159
+
160
+ let length = 0,
161
+ j,
162
+ sqcd,
163
+ spqcds,
164
+ spqcdSize,
165
+ scalarExpounded,
166
+ tile;
167
+ switch (code) {
168
+ case 0xff4f: // Start of codestream (SOC)
169
+ context.mainHeader = true;
170
+ break;
171
+ case 0xffd9: // End of codestream (EOC)
172
+ break;
173
+ case 0xff51: // Image and tile size (SIZ)
174
+ length = readUint16(data, position);
175
+ const siz = {};
176
+ siz.Xsiz = readUint32(data, position + 4);
177
+ siz.Ysiz = readUint32(data, position + 8);
178
+ siz.XOsiz = readUint32(data, position + 12);
179
+ siz.YOsiz = readUint32(data, position + 16);
180
+ siz.XTsiz = readUint32(data, position + 20);
181
+ siz.YTsiz = readUint32(data, position + 24);
182
+ siz.XTOsiz = readUint32(data, position + 28);
183
+ siz.YTOsiz = readUint32(data, position + 32);
184
+ const componentsCount = readUint16(data, position + 36);
185
+ siz.Csiz = componentsCount;
186
+ const components = [];
187
+ j = position + 38;
188
+ for (let i = 0; i < componentsCount; i++) {
189
+ const component = {
190
+ precision: (data[j] & 0x7f) + 1,
191
+ isSigned: !!(data[j] & 0x80),
192
+ XRsiz: data[j + 1],
193
+ YRsiz: data[j + 2],
194
+ };
195
+ j += 3;
196
+ calculateComponentDimensions(component, siz);
197
+ components.push(component);
198
+ }
199
+ context.SIZ = siz;
200
+ context.components = components;
201
+ calculateTileGrids(context, components);
202
+ context.QCC = [];
203
+ context.COC = [];
204
+ break;
205
+ case 0xff5c: // Quantization default (QCD)
206
+ length = readUint16(data, position);
207
+ const qcd = {};
208
+ j = position + 2;
209
+ sqcd = data[j++];
210
+ switch (sqcd & 0x1f) {
211
+ case 0:
212
+ spqcdSize = 8;
213
+ scalarExpounded = true;
214
+ break;
215
+ case 1:
216
+ spqcdSize = 16;
217
+ scalarExpounded = false;
218
+ break;
219
+ case 2:
220
+ spqcdSize = 16;
221
+ scalarExpounded = true;
222
+ break;
223
+ default:
224
+ throw new Error("Invalid SQcd value " + sqcd);
225
+ }
226
+ qcd.noQuantization = spqcdSize === 8;
227
+ qcd.scalarExpounded = scalarExpounded;
228
+ qcd.guardBits = sqcd >> 5;
229
+ spqcds = [];
230
+ while (j < length + position) {
231
+ const spqcd = {};
232
+ if (spqcdSize === 8) {
233
+ spqcd.epsilon = data[j++] >> 3;
234
+ spqcd.mu = 0;
235
+ } else {
236
+ spqcd.epsilon = data[j] >> 3;
237
+ spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
238
+ j += 2;
239
+ }
240
+ spqcds.push(spqcd);
241
+ }
242
+ qcd.SPqcds = spqcds;
243
+ if (context.mainHeader) {
244
+ context.QCD = qcd;
245
+ } else {
246
+ context.currentTile.QCD = qcd;
247
+ context.currentTile.QCC = [];
248
+ }
249
+ break;
250
+ case 0xff5d: // Quantization component (QCC)
251
+ length = readUint16(data, position);
252
+ const qcc = {};
253
+ j = position + 2;
254
+ let cqcc;
255
+ if (context.SIZ.Csiz < 257) {
256
+ cqcc = data[j++];
257
+ } else {
258
+ cqcc = readUint16(data, j);
259
+ j += 2;
260
+ }
261
+ sqcd = data[j++];
262
+ switch (sqcd & 0x1f) {
263
+ case 0:
264
+ spqcdSize = 8;
265
+ scalarExpounded = true;
266
+ break;
267
+ case 1:
268
+ spqcdSize = 16;
269
+ scalarExpounded = false;
270
+ break;
271
+ case 2:
272
+ spqcdSize = 16;
273
+ scalarExpounded = true;
274
+ break;
275
+ default:
276
+ throw new Error("Invalid SQcd value " + sqcd);
277
+ }
278
+ qcc.noQuantization = spqcdSize === 8;
279
+ qcc.scalarExpounded = scalarExpounded;
280
+ qcc.guardBits = sqcd >> 5;
281
+ spqcds = [];
282
+ while (j < length + position) {
283
+ const spqcd = {};
284
+ if (spqcdSize === 8) {
285
+ spqcd.epsilon = data[j++] >> 3;
286
+ spqcd.mu = 0;
287
+ } else {
288
+ spqcd.epsilon = data[j] >> 3;
289
+ spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
290
+ j += 2;
291
+ }
292
+ spqcds.push(spqcd);
293
+ }
294
+ qcc.SPqcds = spqcds;
295
+ if (context.mainHeader) {
296
+ context.QCC[cqcc] = qcc;
297
+ } else {
298
+ context.currentTile.QCC[cqcc] = qcc;
299
+ }
300
+ break;
301
+ case 0xff52: // Coding style default (COD)
302
+ length = readUint16(data, position);
303
+ const cod = {};
304
+ j = position + 2;
305
+ const scod = data[j++];
306
+ cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
307
+ cod.sopMarkerUsed = !!(scod & 2);
308
+ cod.ephMarkerUsed = !!(scod & 4);
309
+ cod.progressionOrder = data[j++];
310
+ cod.layersCount = readUint16(data, j);
311
+ j += 2;
312
+ cod.multipleComponentTransform = data[j++];
313
+
314
+ cod.decompositionLevelsCount = data[j++];
315
+ cod.xcb = (data[j++] & 0xf) + 2;
316
+ cod.ycb = (data[j++] & 0xf) + 2;
317
+ const blockStyle = data[j++];
318
+ cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
319
+ cod.resetContextProbabilities = !!(blockStyle & 2);
320
+ cod.terminationOnEachCodingPass = !!(blockStyle & 4);
321
+ cod.verticallyStripe = !!(blockStyle & 8);
322
+ cod.predictableTermination = !!(blockStyle & 16);
323
+ cod.segmentationSymbolUsed = !!(blockStyle & 32);
324
+ cod.reversibleTransformation = data[j++];
325
+ if (cod.entropyCoderWithCustomPrecincts) {
326
+ const precinctsSizes = [];
327
+ while (j < length + position) {
328
+ const precinctsSize = data[j++];
329
+ precinctsSizes.push({
330
+ PPx: precinctsSize & 0xf,
331
+ PPy: precinctsSize >> 4,
332
+ });
333
+ }
334
+ cod.precinctsSizes = precinctsSizes;
335
+ }
336
+ const unsupported = [];
337
+ if (cod.selectiveArithmeticCodingBypass) {
338
+ unsupported.push("selectiveArithmeticCodingBypass");
339
+ }
340
+ if (cod.terminationOnEachCodingPass) {
341
+ unsupported.push("terminationOnEachCodingPass");
342
+ }
343
+ if (cod.verticallyStripe) {
344
+ unsupported.push("verticallyStripe");
345
+ }
346
+ if (cod.predictableTermination) {
347
+ unsupported.push("predictableTermination");
348
+ }
349
+ if (unsupported.length > 0) {
350
+ doNotRecover = true;
351
+ warn(`JPX: Unsupported COD options (${unsupported.join(", ")}).`);
352
+ }
353
+ if (context.mainHeader) {
354
+ context.COD = cod;
355
+ } else {
356
+ context.currentTile.COD = cod;
357
+ context.currentTile.COC = [];
358
+ }
359
+ break;
360
+ case 0xff90: // Start of tile-part (SOT)
361
+ length = readUint16(data, position);
362
+ tile = {};
363
+ tile.index = readUint16(data, position + 2);
364
+ tile.length = readUint32(data, position + 4);
365
+ tile.dataEnd = tile.length + position - 2;
366
+ tile.partIndex = data[position + 8];
367
+ tile.partsCount = data[position + 9];
368
+
369
+ context.mainHeader = false;
370
+ if (tile.partIndex === 0) {
371
+ // reset component specific settings
372
+ tile.COD = context.COD;
373
+ tile.COC = context.COC.slice(0); // clone of the global COC
374
+ tile.QCD = context.QCD;
375
+ tile.QCC = context.QCC.slice(0); // clone of the global COC
376
+ }
377
+ context.currentTile = tile;
378
+ break;
379
+ case 0xff93: // Start of data (SOD)
380
+ tile = context.currentTile;
381
+ if (tile.partIndex === 0) {
382
+ initializeTile(context, tile.index);
383
+ buildPackets(context);
384
+ }
385
+
386
+ // moving to the end of the data
387
+ length = tile.dataEnd - position;
388
+ parseTilePackets(context, data, position, length);
389
+ break;
390
+ case 0xff53: // Coding style component (COC)
391
+ warn("JPX: Codestream code 0xFF53 (COC) is not implemented.");
392
+ /* falls through */
393
+ case 0xff55: // Tile-part lengths, main header (TLM)
394
+ case 0xff57: // Packet length, main header (PLM)
395
+ case 0xff58: // Packet length, tile-part header (PLT)
396
+ case 0xff64: // Comment (COM)
397
+ length = readUint16(data, position);
398
+ // skipping content
399
+ break;
400
+ default:
401
+ throw new Error("Unknown codestream code: " + code.toString(16));
402
+ }
403
+ position += length;
404
+ }
405
+ } catch (e) {
406
+ if (doNotRecover || this.failOnCorruptedImage) {
407
+ throw new JpxError(e.message);
408
+ } else {
409
+ warn(`JPX: Trying to recover from: "${e.message}".`);
410
+ }
411
+ }
412
+ this.tiles = transformComponents(context);
413
+ this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
414
+ this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
415
+ this.componentsCount = context.SIZ.Csiz;
416
+ }
417
+ }
418
+
419
+ function calculateComponentDimensions(component, siz) {
420
+ // Section B.2 Component mapping
421
+ component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
422
+ component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
423
+ component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
424
+ component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
425
+ component.width = component.x1 - component.x0;
426
+ component.height = component.y1 - component.y0;
427
+ }
428
+ function calculateTileGrids(context, components) {
429
+ const siz = context.SIZ;
430
+ // Section B.3 Division into tile and tile-components
431
+ const tiles = [];
432
+ let tile;
433
+ const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
434
+ const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
435
+ for (let q = 0; q < numYtiles; q++) {
436
+ for (let p = 0; p < numXtiles; p++) {
437
+ tile = {};
438
+ tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
439
+ tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
440
+ tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
441
+ tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
442
+ tile.width = tile.tx1 - tile.tx0;
443
+ tile.height = tile.ty1 - tile.ty0;
444
+ tile.components = [];
445
+ tiles.push(tile);
446
+ }
447
+ }
448
+ context.tiles = tiles;
449
+
450
+ const componentsCount = siz.Csiz;
451
+ for (let i = 0, ii = componentsCount; i < ii; i++) {
452
+ const component = components[i];
453
+ for (let j = 0, jj = tiles.length; j < jj; j++) {
454
+ const tileComponent = {};
455
+ tile = tiles[j];
456
+ tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
457
+ tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
458
+ tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
459
+ tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
460
+ tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
461
+ tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
462
+ tile.components[i] = tileComponent;
463
+ }
464
+ }
465
+ }
466
+ function getBlocksDimensions(context, component, r) {
467
+ const codOrCoc = component.codingStyleParameters;
468
+ const result = {};
469
+ if (!codOrCoc.entropyCoderWithCustomPrecincts) {
470
+ result.PPx = 15;
471
+ result.PPy = 15;
472
+ } else {
473
+ result.PPx = codOrCoc.precinctsSizes[r].PPx;
474
+ result.PPy = codOrCoc.precinctsSizes[r].PPy;
475
+ }
476
+ // calculate codeblock size as described in section B.7
477
+ result.xcb_ =
478
+ r > 0
479
+ ? Math.min(codOrCoc.xcb, result.PPx - 1)
480
+ : Math.min(codOrCoc.xcb, result.PPx);
481
+ result.ycb_ =
482
+ r > 0
483
+ ? Math.min(codOrCoc.ycb, result.PPy - 1)
484
+ : Math.min(codOrCoc.ycb, result.PPy);
485
+ return result;
486
+ }
487
+ function buildPrecincts(context, resolution, dimensions) {
488
+ // Section B.6 Division resolution to precincts
489
+ const precinctWidth = 1 << dimensions.PPx;
490
+ const precinctHeight = 1 << dimensions.PPy;
491
+ // Jasper introduces codeblock groups for mapping each subband codeblocks
492
+ // to precincts. Precinct partition divides a resolution according to width
493
+ // and height parameters. The subband that belongs to the resolution level
494
+ // has a different size than the level, unless it is the zero resolution.
495
+
496
+ // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding:
497
+ // The precinct partitioning for a particular subband is derived from a
498
+ // partitioning of its parent LL band (i.e., the LL band at the next higher
499
+ // resolution level)... The LL band associated with each resolution level is
500
+ // divided into precincts... Each of the resulting precinct regions is then
501
+ // mapped into its child subbands (if any) at the next lower resolution
502
+ // level. This is accomplished by using the coordinate transformation
503
+ // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the
504
+ // coordinates of a point in the LL band and child subband, respectively.
505
+ const isZeroRes = resolution.resLevel === 0;
506
+ const precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1));
507
+ const precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1));
508
+ const numprecinctswide =
509
+ resolution.trx1 > resolution.trx0
510
+ ? Math.ceil(resolution.trx1 / precinctWidth) -
511
+ Math.floor(resolution.trx0 / precinctWidth)
512
+ : 0;
513
+ const numprecinctshigh =
514
+ resolution.try1 > resolution.try0
515
+ ? Math.ceil(resolution.try1 / precinctHeight) -
516
+ Math.floor(resolution.try0 / precinctHeight)
517
+ : 0;
518
+ const numprecincts = numprecinctswide * numprecinctshigh;
519
+
520
+ resolution.precinctParameters = {
521
+ precinctWidth,
522
+ precinctHeight,
523
+ numprecinctswide,
524
+ numprecinctshigh,
525
+ numprecincts,
526
+ precinctWidthInSubband,
527
+ precinctHeightInSubband,
528
+ };
529
+ }
530
+ function buildCodeblocks(context, subband, dimensions) {
531
+ // Section B.7 Division sub-band into code-blocks
532
+ const xcb_ = dimensions.xcb_;
533
+ const ycb_ = dimensions.ycb_;
534
+ const codeblockWidth = 1 << xcb_;
535
+ const codeblockHeight = 1 << ycb_;
536
+ const cbx0 = subband.tbx0 >> xcb_;
537
+ const cby0 = subband.tby0 >> ycb_;
538
+ const cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_;
539
+ const cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_;
540
+ const precinctParameters = subband.resolution.precinctParameters;
541
+ const codeblocks = [];
542
+ const precincts = [];
543
+ let i, j, codeblock, precinctNumber;
544
+ for (j = cby0; j < cby1; j++) {
545
+ for (i = cbx0; i < cbx1; i++) {
546
+ codeblock = {
547
+ cbx: i,
548
+ cby: j,
549
+ tbx0: codeblockWidth * i,
550
+ tby0: codeblockHeight * j,
551
+ tbx1: codeblockWidth * (i + 1),
552
+ tby1: codeblockHeight * (j + 1),
553
+ };
554
+
555
+ codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
556
+ codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
557
+ codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
558
+ codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
559
+
560
+ // Calculate precinct number for this codeblock, codeblock position
561
+ // should be relative to its subband, use actual dimension and position
562
+ // See comment about codeblock group width and height
563
+ const pi = Math.floor(
564
+ (codeblock.tbx0_ - subband.tbx0) /
565
+ precinctParameters.precinctWidthInSubband
566
+ );
567
+ const pj = Math.floor(
568
+ (codeblock.tby0_ - subband.tby0) /
569
+ precinctParameters.precinctHeightInSubband
570
+ );
571
+ precinctNumber = pi + pj * precinctParameters.numprecinctswide;
572
+
573
+ codeblock.precinctNumber = precinctNumber;
574
+ codeblock.subbandType = subband.type;
575
+ codeblock.Lblock = 3;
576
+
577
+ if (
578
+ codeblock.tbx1_ <= codeblock.tbx0_ ||
579
+ codeblock.tby1_ <= codeblock.tby0_
580
+ ) {
581
+ continue;
582
+ }
583
+ codeblocks.push(codeblock);
584
+ // building precinct for the sub-band
585
+ let precinct = precincts[precinctNumber];
586
+ if (precinct !== undefined) {
587
+ if (i < precinct.cbxMin) {
588
+ precinct.cbxMin = i;
589
+ } else if (i > precinct.cbxMax) {
590
+ precinct.cbxMax = i;
591
+ }
592
+ if (j < precinct.cbyMin) {
593
+ precinct.cbxMin = j;
594
+ } else if (j > precinct.cbyMax) {
595
+ precinct.cbyMax = j;
596
+ }
597
+ } else {
598
+ precincts[precinctNumber] = precinct = {
599
+ cbxMin: i,
600
+ cbyMin: j,
601
+ cbxMax: i,
602
+ cbyMax: j,
603
+ };
604
+ }
605
+ codeblock.precinct = precinct;
606
+ }
607
+ }
608
+ subband.codeblockParameters = {
609
+ codeblockWidth: xcb_,
610
+ codeblockHeight: ycb_,
611
+ numcodeblockwide: cbx1 - cbx0 + 1,
612
+ numcodeblockhigh: cby1 - cby0 + 1,
613
+ };
614
+ subband.codeblocks = codeblocks;
615
+ subband.precincts = precincts;
616
+ }
617
+ function createPacket(resolution, precinctNumber, layerNumber) {
618
+ const precinctCodeblocks = [];
619
+ // Section B.10.8 Order of info in packet
620
+ const subbands = resolution.subbands;
621
+ // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence
622
+ for (let i = 0, ii = subbands.length; i < ii; i++) {
623
+ const subband = subbands[i];
624
+ const codeblocks = subband.codeblocks;
625
+ for (let j = 0, jj = codeblocks.length; j < jj; j++) {
626
+ const codeblock = codeblocks[j];
627
+ if (codeblock.precinctNumber !== precinctNumber) {
628
+ continue;
629
+ }
630
+ precinctCodeblocks.push(codeblock);
631
+ }
632
+ }
633
+ return {
634
+ layerNumber,
635
+ codeblocks: precinctCodeblocks,
636
+ };
637
+ }
638
+ function LayerResolutionComponentPositionIterator(context) {
639
+ const siz = context.SIZ;
640
+ const tileIndex = context.currentTile.index;
641
+ const tile = context.tiles[tileIndex];
642
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
643
+ const componentsCount = siz.Csiz;
644
+ let maxDecompositionLevelsCount = 0;
645
+ for (let q = 0; q < componentsCount; q++) {
646
+ maxDecompositionLevelsCount = Math.max(
647
+ maxDecompositionLevelsCount,
648
+ tile.components[q].codingStyleParameters.decompositionLevelsCount
649
+ );
650
+ }
651
+
652
+ let l = 0,
653
+ r = 0,
654
+ i = 0,
655
+ k = 0;
656
+
657
+ this.nextPacket = function JpxImage_nextPacket() {
658
+ // Section B.12.1.1 Layer-resolution-component-position
659
+ for (; l < layersCount; l++) {
660
+ for (; r <= maxDecompositionLevelsCount; r++) {
661
+ for (; i < componentsCount; i++) {
662
+ const component = tile.components[i];
663
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
664
+ continue;
665
+ }
666
+
667
+ const resolution = component.resolutions[r];
668
+ const numprecincts = resolution.precinctParameters.numprecincts;
669
+ for (; k < numprecincts; ) {
670
+ const packet = createPacket(resolution, k, l);
671
+ k++;
672
+ return packet;
673
+ }
674
+ k = 0;
675
+ }
676
+ i = 0;
677
+ }
678
+ r = 0;
679
+ }
680
+ throw new JpxError("Out of packets");
681
+ };
682
+ }
683
+ function ResolutionLayerComponentPositionIterator(context) {
684
+ const siz = context.SIZ;
685
+ const tileIndex = context.currentTile.index;
686
+ const tile = context.tiles[tileIndex];
687
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
688
+ const componentsCount = siz.Csiz;
689
+ let maxDecompositionLevelsCount = 0;
690
+ for (let q = 0; q < componentsCount; q++) {
691
+ maxDecompositionLevelsCount = Math.max(
692
+ maxDecompositionLevelsCount,
693
+ tile.components[q].codingStyleParameters.decompositionLevelsCount
694
+ );
695
+ }
696
+
697
+ let r = 0,
698
+ l = 0,
699
+ i = 0,
700
+ k = 0;
701
+
702
+ this.nextPacket = function JpxImage_nextPacket() {
703
+ // Section B.12.1.2 Resolution-layer-component-position
704
+ for (; r <= maxDecompositionLevelsCount; r++) {
705
+ for (; l < layersCount; l++) {
706
+ for (; i < componentsCount; i++) {
707
+ const component = tile.components[i];
708
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
709
+ continue;
710
+ }
711
+
712
+ const resolution = component.resolutions[r];
713
+ const numprecincts = resolution.precinctParameters.numprecincts;
714
+ for (; k < numprecincts; ) {
715
+ const packet = createPacket(resolution, k, l);
716
+ k++;
717
+ return packet;
718
+ }
719
+ k = 0;
720
+ }
721
+ i = 0;
722
+ }
723
+ l = 0;
724
+ }
725
+ throw new JpxError("Out of packets");
726
+ };
727
+ }
728
+ function ResolutionPositionComponentLayerIterator(context) {
729
+ const siz = context.SIZ;
730
+ const tileIndex = context.currentTile.index;
731
+ const tile = context.tiles[tileIndex];
732
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
733
+ const componentsCount = siz.Csiz;
734
+ let l, r, c, p;
735
+ let maxDecompositionLevelsCount = 0;
736
+ for (c = 0; c < componentsCount; c++) {
737
+ const component = tile.components[c];
738
+ maxDecompositionLevelsCount = Math.max(
739
+ maxDecompositionLevelsCount,
740
+ component.codingStyleParameters.decompositionLevelsCount
741
+ );
742
+ }
743
+ const maxNumPrecinctsInLevel = new Int32Array(
744
+ maxDecompositionLevelsCount + 1
745
+ );
746
+ for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
747
+ let maxNumPrecincts = 0;
748
+ for (c = 0; c < componentsCount; ++c) {
749
+ const resolutions = tile.components[c].resolutions;
750
+ if (r < resolutions.length) {
751
+ maxNumPrecincts = Math.max(
752
+ maxNumPrecincts,
753
+ resolutions[r].precinctParameters.numprecincts
754
+ );
755
+ }
756
+ }
757
+ maxNumPrecinctsInLevel[r] = maxNumPrecincts;
758
+ }
759
+ l = 0;
760
+ r = 0;
761
+ c = 0;
762
+ p = 0;
763
+
764
+ this.nextPacket = function JpxImage_nextPacket() {
765
+ // Section B.12.1.3 Resolution-position-component-layer
766
+ for (; r <= maxDecompositionLevelsCount; r++) {
767
+ for (; p < maxNumPrecinctsInLevel[r]; p++) {
768
+ for (; c < componentsCount; c++) {
769
+ const component = tile.components[c];
770
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
771
+ continue;
772
+ }
773
+ const resolution = component.resolutions[r];
774
+ const numprecincts = resolution.precinctParameters.numprecincts;
775
+ if (p >= numprecincts) {
776
+ continue;
777
+ }
778
+ for (; l < layersCount; ) {
779
+ const packet = createPacket(resolution, p, l);
780
+ l++;
781
+ return packet;
782
+ }
783
+ l = 0;
784
+ }
785
+ c = 0;
786
+ }
787
+ p = 0;
788
+ }
789
+ throw new JpxError("Out of packets");
790
+ };
791
+ }
792
+ function PositionComponentResolutionLayerIterator(context) {
793
+ const siz = context.SIZ;
794
+ const tileIndex = context.currentTile.index;
795
+ const tile = context.tiles[tileIndex];
796
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
797
+ const componentsCount = siz.Csiz;
798
+ const precinctsSizes = getPrecinctSizesInImageScale(tile);
799
+ const precinctsIterationSizes = precinctsSizes;
800
+ let l = 0,
801
+ r = 0,
802
+ c = 0,
803
+ px = 0,
804
+ py = 0;
805
+
806
+ this.nextPacket = function JpxImage_nextPacket() {
807
+ // Section B.12.1.4 Position-component-resolution-layer
808
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
809
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
810
+ for (; c < componentsCount; c++) {
811
+ const component = tile.components[c];
812
+ const decompositionLevelsCount =
813
+ component.codingStyleParameters.decompositionLevelsCount;
814
+ for (; r <= decompositionLevelsCount; r++) {
815
+ const resolution = component.resolutions[r];
816
+ const sizeInImageScale =
817
+ precinctsSizes.components[c].resolutions[r];
818
+ const k = getPrecinctIndexIfExist(
819
+ px,
820
+ py,
821
+ sizeInImageScale,
822
+ precinctsIterationSizes,
823
+ resolution
824
+ );
825
+ if (k === null) {
826
+ continue;
827
+ }
828
+ for (; l < layersCount; ) {
829
+ const packet = createPacket(resolution, k, l);
830
+ l++;
831
+ return packet;
832
+ }
833
+ l = 0;
834
+ }
835
+ r = 0;
836
+ }
837
+ c = 0;
838
+ }
839
+ px = 0;
840
+ }
841
+ throw new JpxError("Out of packets");
842
+ };
843
+ }
844
+ function ComponentPositionResolutionLayerIterator(context) {
845
+ const siz = context.SIZ;
846
+ const tileIndex = context.currentTile.index;
847
+ const tile = context.tiles[tileIndex];
848
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
849
+ const componentsCount = siz.Csiz;
850
+ const precinctsSizes = getPrecinctSizesInImageScale(tile);
851
+ let l = 0,
852
+ r = 0,
853
+ c = 0,
854
+ px = 0,
855
+ py = 0;
856
+
857
+ this.nextPacket = function JpxImage_nextPacket() {
858
+ // Section B.12.1.5 Component-position-resolution-layer
859
+ for (; c < componentsCount; ++c) {
860
+ const component = tile.components[c];
861
+ const precinctsIterationSizes = precinctsSizes.components[c];
862
+ const decompositionLevelsCount =
863
+ component.codingStyleParameters.decompositionLevelsCount;
864
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
865
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
866
+ for (; r <= decompositionLevelsCount; r++) {
867
+ const resolution = component.resolutions[r];
868
+ const sizeInImageScale = precinctsIterationSizes.resolutions[r];
869
+ const k = getPrecinctIndexIfExist(
870
+ px,
871
+ py,
872
+ sizeInImageScale,
873
+ precinctsIterationSizes,
874
+ resolution
875
+ );
876
+ if (k === null) {
877
+ continue;
878
+ }
879
+ for (; l < layersCount; ) {
880
+ const packet = createPacket(resolution, k, l);
881
+ l++;
882
+ return packet;
883
+ }
884
+ l = 0;
885
+ }
886
+ r = 0;
887
+ }
888
+ px = 0;
889
+ }
890
+ py = 0;
891
+ }
892
+ throw new JpxError("Out of packets");
893
+ };
894
+ }
895
+ function getPrecinctIndexIfExist(
896
+ pxIndex,
897
+ pyIndex,
898
+ sizeInImageScale,
899
+ precinctIterationSizes,
900
+ resolution
901
+ ) {
902
+ const posX = pxIndex * precinctIterationSizes.minWidth;
903
+ const posY = pyIndex * precinctIterationSizes.minHeight;
904
+ if (
905
+ posX % sizeInImageScale.width !== 0 ||
906
+ posY % sizeInImageScale.height !== 0
907
+ ) {
908
+ return null;
909
+ }
910
+ const startPrecinctRowIndex =
911
+ (posY / sizeInImageScale.width) *
912
+ resolution.precinctParameters.numprecinctswide;
913
+ return posX / sizeInImageScale.height + startPrecinctRowIndex;
914
+ }
915
+ function getPrecinctSizesInImageScale(tile) {
916
+ const componentsCount = tile.components.length;
917
+ let minWidth = Number.MAX_VALUE;
918
+ let minHeight = Number.MAX_VALUE;
919
+ let maxNumWide = 0;
920
+ let maxNumHigh = 0;
921
+ const sizePerComponent = new Array(componentsCount);
922
+ for (let c = 0; c < componentsCount; c++) {
923
+ const component = tile.components[c];
924
+ const decompositionLevelsCount =
925
+ component.codingStyleParameters.decompositionLevelsCount;
926
+ const sizePerResolution = new Array(decompositionLevelsCount + 1);
927
+ let minWidthCurrentComponent = Number.MAX_VALUE;
928
+ let minHeightCurrentComponent = Number.MAX_VALUE;
929
+ let maxNumWideCurrentComponent = 0;
930
+ let maxNumHighCurrentComponent = 0;
931
+ let scale = 1;
932
+ for (let r = decompositionLevelsCount; r >= 0; --r) {
933
+ const resolution = component.resolutions[r];
934
+ const widthCurrentResolution =
935
+ scale * resolution.precinctParameters.precinctWidth;
936
+ const heightCurrentResolution =
937
+ scale * resolution.precinctParameters.precinctHeight;
938
+ minWidthCurrentComponent = Math.min(
939
+ minWidthCurrentComponent,
940
+ widthCurrentResolution
941
+ );
942
+ minHeightCurrentComponent = Math.min(
943
+ minHeightCurrentComponent,
944
+ heightCurrentResolution
945
+ );
946
+ maxNumWideCurrentComponent = Math.max(
947
+ maxNumWideCurrentComponent,
948
+ resolution.precinctParameters.numprecinctswide
949
+ );
950
+ maxNumHighCurrentComponent = Math.max(
951
+ maxNumHighCurrentComponent,
952
+ resolution.precinctParameters.numprecinctshigh
953
+ );
954
+ sizePerResolution[r] = {
955
+ width: widthCurrentResolution,
956
+ height: heightCurrentResolution,
957
+ };
958
+ scale <<= 1;
959
+ }
960
+ minWidth = Math.min(minWidth, minWidthCurrentComponent);
961
+ minHeight = Math.min(minHeight, minHeightCurrentComponent);
962
+ maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
963
+ maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
964
+ sizePerComponent[c] = {
965
+ resolutions: sizePerResolution,
966
+ minWidth: minWidthCurrentComponent,
967
+ minHeight: minHeightCurrentComponent,
968
+ maxNumWide: maxNumWideCurrentComponent,
969
+ maxNumHigh: maxNumHighCurrentComponent,
970
+ };
971
+ }
972
+ return {
973
+ components: sizePerComponent,
974
+ minWidth,
975
+ minHeight,
976
+ maxNumWide,
977
+ maxNumHigh,
978
+ };
979
+ }
980
+ function buildPackets(context) {
981
+ const siz = context.SIZ;
982
+ const tileIndex = context.currentTile.index;
983
+ const tile = context.tiles[tileIndex];
984
+ const componentsCount = siz.Csiz;
985
+ // Creating resolutions and sub-bands for each component
986
+ for (let c = 0; c < componentsCount; c++) {
987
+ const component = tile.components[c];
988
+ const decompositionLevelsCount =
989
+ component.codingStyleParameters.decompositionLevelsCount;
990
+ // Section B.5 Resolution levels and sub-bands
991
+ const resolutions = [];
992
+ const subbands = [];
993
+ for (let r = 0; r <= decompositionLevelsCount; r++) {
994
+ const blocksDimensions = getBlocksDimensions(context, component, r);
995
+ const resolution = {};
996
+ const scale = 1 << (decompositionLevelsCount - r);
997
+ resolution.trx0 = Math.ceil(component.tcx0 / scale);
998
+ resolution.try0 = Math.ceil(component.tcy0 / scale);
999
+ resolution.trx1 = Math.ceil(component.tcx1 / scale);
1000
+ resolution.try1 = Math.ceil(component.tcy1 / scale);
1001
+ resolution.resLevel = r;
1002
+ buildPrecincts(context, resolution, blocksDimensions);
1003
+ resolutions.push(resolution);
1004
+
1005
+ let subband;
1006
+ if (r === 0) {
1007
+ // one sub-band (LL) with last decomposition
1008
+ subband = {};
1009
+ subband.type = "LL";
1010
+ subband.tbx0 = Math.ceil(component.tcx0 / scale);
1011
+ subband.tby0 = Math.ceil(component.tcy0 / scale);
1012
+ subband.tbx1 = Math.ceil(component.tcx1 / scale);
1013
+ subband.tby1 = Math.ceil(component.tcy1 / scale);
1014
+ subband.resolution = resolution;
1015
+ buildCodeblocks(context, subband, blocksDimensions);
1016
+ subbands.push(subband);
1017
+ resolution.subbands = [subband];
1018
+ } else {
1019
+ const bscale = 1 << (decompositionLevelsCount - r + 1);
1020
+ const resolutionSubbands = [];
1021
+ // three sub-bands (HL, LH and HH) with rest of decompositions
1022
+ subband = {};
1023
+ subband.type = "HL";
1024
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
1025
+ subband.tby0 = Math.ceil(component.tcy0 / bscale);
1026
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
1027
+ subband.tby1 = Math.ceil(component.tcy1 / bscale);
1028
+ subband.resolution = resolution;
1029
+ buildCodeblocks(context, subband, blocksDimensions);
1030
+ subbands.push(subband);
1031
+ resolutionSubbands.push(subband);
1032
+
1033
+ subband = {};
1034
+ subband.type = "LH";
1035
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale);
1036
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
1037
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale);
1038
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
1039
+ subband.resolution = resolution;
1040
+ buildCodeblocks(context, subband, blocksDimensions);
1041
+ subbands.push(subband);
1042
+ resolutionSubbands.push(subband);
1043
+
1044
+ subband = {};
1045
+ subband.type = "HH";
1046
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
1047
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
1048
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
1049
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
1050
+ subband.resolution = resolution;
1051
+ buildCodeblocks(context, subband, blocksDimensions);
1052
+ subbands.push(subband);
1053
+ resolutionSubbands.push(subband);
1054
+
1055
+ resolution.subbands = resolutionSubbands;
1056
+ }
1057
+ }
1058
+ component.resolutions = resolutions;
1059
+ component.subbands = subbands;
1060
+ }
1061
+ // Generate the packets sequence
1062
+ const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
1063
+ switch (progressionOrder) {
1064
+ case 0:
1065
+ tile.packetsIterator = new LayerResolutionComponentPositionIterator(
1066
+ context
1067
+ );
1068
+ break;
1069
+ case 1:
1070
+ tile.packetsIterator = new ResolutionLayerComponentPositionIterator(
1071
+ context
1072
+ );
1073
+ break;
1074
+ case 2:
1075
+ tile.packetsIterator = new ResolutionPositionComponentLayerIterator(
1076
+ context
1077
+ );
1078
+ break;
1079
+ case 3:
1080
+ tile.packetsIterator = new PositionComponentResolutionLayerIterator(
1081
+ context
1082
+ );
1083
+ break;
1084
+ case 4:
1085
+ tile.packetsIterator = new ComponentPositionResolutionLayerIterator(
1086
+ context
1087
+ );
1088
+ break;
1089
+ default:
1090
+ throw new JpxError(`Unsupported progression order ${progressionOrder}`);
1091
+ }
1092
+ }
1093
+ function parseTilePackets(context, data, offset, dataLength) {
1094
+ let position = 0;
1095
+ let buffer,
1096
+ bufferSize = 0,
1097
+ skipNextBit = false;
1098
+ function readBits(count) {
1099
+ while (bufferSize < count) {
1100
+ const b = data[offset + position];
1101
+ position++;
1102
+ if (skipNextBit) {
1103
+ buffer = (buffer << 7) | b;
1104
+ bufferSize += 7;
1105
+ skipNextBit = false;
1106
+ } else {
1107
+ buffer = (buffer << 8) | b;
1108
+ bufferSize += 8;
1109
+ }
1110
+ if (b === 0xff) {
1111
+ skipNextBit = true;
1112
+ }
1113
+ }
1114
+ bufferSize -= count;
1115
+ return (buffer >>> bufferSize) & ((1 << count) - 1);
1116
+ }
1117
+ function skipMarkerIfEqual(value) {
1118
+ if (
1119
+ data[offset + position - 1] === 0xff &&
1120
+ data[offset + position] === value
1121
+ ) {
1122
+ skipBytes(1);
1123
+ return true;
1124
+ } else if (
1125
+ data[offset + position] === 0xff &&
1126
+ data[offset + position + 1] === value
1127
+ ) {
1128
+ skipBytes(2);
1129
+ return true;
1130
+ }
1131
+ return false;
1132
+ }
1133
+ function skipBytes(count) {
1134
+ position += count;
1135
+ }
1136
+ function alignToByte() {
1137
+ bufferSize = 0;
1138
+ if (skipNextBit) {
1139
+ position++;
1140
+ skipNextBit = false;
1141
+ }
1142
+ }
1143
+ function readCodingpasses() {
1144
+ if (readBits(1) === 0) {
1145
+ return 1;
1146
+ }
1147
+ if (readBits(1) === 0) {
1148
+ return 2;
1149
+ }
1150
+ let value = readBits(2);
1151
+ if (value < 3) {
1152
+ return value + 3;
1153
+ }
1154
+ value = readBits(5);
1155
+ if (value < 31) {
1156
+ return value + 6;
1157
+ }
1158
+ value = readBits(7);
1159
+ return value + 37;
1160
+ }
1161
+ const tileIndex = context.currentTile.index;
1162
+ const tile = context.tiles[tileIndex];
1163
+ const sopMarkerUsed = context.COD.sopMarkerUsed;
1164
+ const ephMarkerUsed = context.COD.ephMarkerUsed;
1165
+ const packetsIterator = tile.packetsIterator;
1166
+ while (position < dataLength) {
1167
+ alignToByte();
1168
+ if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
1169
+ // Skip also marker segment length and packet sequence ID
1170
+ skipBytes(4);
1171
+ }
1172
+ const packet = packetsIterator.nextPacket();
1173
+ if (!readBits(1)) {
1174
+ continue;
1175
+ }
1176
+ const layerNumber = packet.layerNumber,
1177
+ queue = [];
1178
+ let codeblock;
1179
+ for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) {
1180
+ codeblock = packet.codeblocks[i];
1181
+ let precinct = codeblock.precinct;
1182
+ const codeblockColumn = codeblock.cbx - precinct.cbxMin;
1183
+ const codeblockRow = codeblock.cby - precinct.cbyMin;
1184
+ let codeblockIncluded = false;
1185
+ let firstTimeInclusion = false;
1186
+ let valueReady, zeroBitPlanesTree;
1187
+ if (codeblock.included !== undefined) {
1188
+ codeblockIncluded = !!readBits(1);
1189
+ } else {
1190
+ // reading inclusion tree
1191
+ precinct = codeblock.precinct;
1192
+ let inclusionTree;
1193
+ if (precinct.inclusionTree !== undefined) {
1194
+ inclusionTree = precinct.inclusionTree;
1195
+ } else {
1196
+ // building inclusion and zero bit-planes trees
1197
+ const width = precinct.cbxMax - precinct.cbxMin + 1;
1198
+ const height = precinct.cbyMax - precinct.cbyMin + 1;
1199
+ inclusionTree = new InclusionTree(width, height, layerNumber);
1200
+ zeroBitPlanesTree = new TagTree(width, height);
1201
+ precinct.inclusionTree = inclusionTree;
1202
+ precinct.zeroBitPlanesTree = zeroBitPlanesTree;
1203
+ for (let l = 0; l < layerNumber; l++) {
1204
+ if (readBits(1) !== 0) {
1205
+ throw new JpxError("Invalid tag tree");
1206
+ }
1207
+ }
1208
+ }
1209
+
1210
+ if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
1211
+ while (true) {
1212
+ if (readBits(1)) {
1213
+ valueReady = !inclusionTree.nextLevel();
1214
+ if (valueReady) {
1215
+ codeblock.included = true;
1216
+ codeblockIncluded = firstTimeInclusion = true;
1217
+ break;
1218
+ }
1219
+ } else {
1220
+ inclusionTree.incrementValue(layerNumber);
1221
+ break;
1222
+ }
1223
+ }
1224
+ }
1225
+ }
1226
+ if (!codeblockIncluded) {
1227
+ continue;
1228
+ }
1229
+ if (firstTimeInclusion) {
1230
+ zeroBitPlanesTree = precinct.zeroBitPlanesTree;
1231
+ zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
1232
+ while (true) {
1233
+ if (readBits(1)) {
1234
+ valueReady = !zeroBitPlanesTree.nextLevel();
1235
+ if (valueReady) {
1236
+ break;
1237
+ }
1238
+ } else {
1239
+ zeroBitPlanesTree.incrementValue();
1240
+ }
1241
+ }
1242
+ codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
1243
+ }
1244
+ const codingpasses = readCodingpasses();
1245
+ while (readBits(1)) {
1246
+ codeblock.Lblock++;
1247
+ }
1248
+ const codingpassesLog2 = log2(codingpasses);
1249
+ // rounding down log2
1250
+ const bits =
1251
+ (codingpasses < 1 << codingpassesLog2
1252
+ ? codingpassesLog2 - 1
1253
+ : codingpassesLog2) + codeblock.Lblock;
1254
+ const codedDataLength = readBits(bits);
1255
+ queue.push({
1256
+ codeblock,
1257
+ codingpasses,
1258
+ dataLength: codedDataLength,
1259
+ });
1260
+ }
1261
+ alignToByte();
1262
+ if (ephMarkerUsed) {
1263
+ skipMarkerIfEqual(0x92);
1264
+ }
1265
+ while (queue.length > 0) {
1266
+ const packetItem = queue.shift();
1267
+ codeblock = packetItem.codeblock;
1268
+ if (codeblock.data === undefined) {
1269
+ codeblock.data = [];
1270
+ }
1271
+ codeblock.data.push({
1272
+ data,
1273
+ start: offset + position,
1274
+ end: offset + position + packetItem.dataLength,
1275
+ codingpasses: packetItem.codingpasses,
1276
+ });
1277
+ position += packetItem.dataLength;
1278
+ }
1279
+ }
1280
+ return position;
1281
+ }
1282
+ function copyCoefficients(
1283
+ coefficients,
1284
+ levelWidth,
1285
+ levelHeight,
1286
+ subband,
1287
+ delta,
1288
+ mb,
1289
+ reversible,
1290
+ segmentationSymbolUsed,
1291
+ resetContextProbabilities
1292
+ ) {
1293
+ const x0 = subband.tbx0;
1294
+ const y0 = subband.tby0;
1295
+ const width = subband.tbx1 - subband.tbx0;
1296
+ const codeblocks = subband.codeblocks;
1297
+ const right = subband.type.charAt(0) === "H" ? 1 : 0;
1298
+ const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
1299
+
1300
+ for (let i = 0, ii = codeblocks.length; i < ii; ++i) {
1301
+ const codeblock = codeblocks[i];
1302
+ const blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
1303
+ const blockHeight = codeblock.tby1_ - codeblock.tby0_;
1304
+ if (blockWidth === 0 || blockHeight === 0) {
1305
+ continue;
1306
+ }
1307
+ if (codeblock.data === undefined) {
1308
+ continue;
1309
+ }
1310
+
1311
+ const bitModel = new BitModel(
1312
+ blockWidth,
1313
+ blockHeight,
1314
+ codeblock.subbandType,
1315
+ codeblock.zeroBitPlanes,
1316
+ mb
1317
+ );
1318
+ let currentCodingpassType = 2; // first bit plane starts from cleanup
1319
+
1320
+ // collect data
1321
+ const data = codeblock.data;
1322
+ let totalLength = 0,
1323
+ codingpasses = 0;
1324
+ let j, jj, dataItem;
1325
+ for (j = 0, jj = data.length; j < jj; j++) {
1326
+ dataItem = data[j];
1327
+ totalLength += dataItem.end - dataItem.start;
1328
+ codingpasses += dataItem.codingpasses;
1329
+ }
1330
+ const encodedData = new Uint8Array(totalLength);
1331
+ let position = 0;
1332
+ for (j = 0, jj = data.length; j < jj; j++) {
1333
+ dataItem = data[j];
1334
+ const chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
1335
+ encodedData.set(chunk, position);
1336
+ position += chunk.length;
1337
+ }
1338
+ // decoding the item
1339
+ const decoder = new ArithmeticDecoder(encodedData, 0, totalLength);
1340
+ bitModel.setDecoder(decoder);
1341
+
1342
+ for (j = 0; j < codingpasses; j++) {
1343
+ switch (currentCodingpassType) {
1344
+ case 0:
1345
+ bitModel.runSignificancePropagationPass();
1346
+ break;
1347
+ case 1:
1348
+ bitModel.runMagnitudeRefinementPass();
1349
+ break;
1350
+ case 2:
1351
+ bitModel.runCleanupPass();
1352
+ if (segmentationSymbolUsed) {
1353
+ bitModel.checkSegmentationSymbol();
1354
+ }
1355
+ break;
1356
+ }
1357
+
1358
+ if (resetContextProbabilities) {
1359
+ bitModel.reset();
1360
+ }
1361
+
1362
+ currentCodingpassType = (currentCodingpassType + 1) % 3;
1363
+ }
1364
+
1365
+ let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
1366
+ const sign = bitModel.coefficentsSign;
1367
+ const magnitude = bitModel.coefficentsMagnitude;
1368
+ const bitsDecoded = bitModel.bitsDecoded;
1369
+ const magnitudeCorrection = reversible ? 0 : 0.5;
1370
+ let k, n, nb;
1371
+ position = 0;
1372
+ // Do the interleaving of Section F.3.3 here, so we do not need
1373
+ // to copy later. LL level is not interleaved, just copied.
1374
+ const interleave = subband.type !== "LL";
1375
+ for (j = 0; j < blockHeight; j++) {
1376
+ const row = (offset / width) | 0; // row in the non-interleaved subband
1377
+ const levelOffset = 2 * row * (levelWidth - width) + right + bottom;
1378
+ for (k = 0; k < blockWidth; k++) {
1379
+ n = magnitude[position];
1380
+ if (n !== 0) {
1381
+ n = (n + magnitudeCorrection) * delta;
1382
+ if (sign[position] !== 0) {
1383
+ n = -n;
1384
+ }
1385
+ nb = bitsDecoded[position];
1386
+ const pos = interleave ? levelOffset + (offset << 1) : offset;
1387
+ coefficients[pos] = reversible && nb >= mb ? n : n * (1 << (mb - nb));
1388
+ }
1389
+ offset++;
1390
+ position++;
1391
+ }
1392
+ offset += width - blockWidth;
1393
+ }
1394
+ }
1395
+ }
1396
+ function transformTile(context, tile, c) {
1397
+ const component = tile.components[c];
1398
+ const codingStyleParameters = component.codingStyleParameters;
1399
+ const quantizationParameters = component.quantizationParameters;
1400
+ const decompositionLevelsCount =
1401
+ codingStyleParameters.decompositionLevelsCount;
1402
+ const spqcds = quantizationParameters.SPqcds;
1403
+ const scalarExpounded = quantizationParameters.scalarExpounded;
1404
+ const guardBits = quantizationParameters.guardBits;
1405
+ const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
1406
+ const resetContextProbabilities =
1407
+ codingStyleParameters.resetContextProbabilities;
1408
+ const precision = context.components[c].precision;
1409
+
1410
+ const reversible = codingStyleParameters.reversibleTransformation;
1411
+ const transform = reversible
1412
+ ? new ReversibleTransform()
1413
+ : new IrreversibleTransform();
1414
+
1415
+ const subbandCoefficients = [];
1416
+ let b = 0;
1417
+ for (let i = 0; i <= decompositionLevelsCount; i++) {
1418
+ const resolution = component.resolutions[i];
1419
+
1420
+ const width = resolution.trx1 - resolution.trx0;
1421
+ const height = resolution.try1 - resolution.try0;
1422
+ // Allocate space for the whole sublevel.
1423
+ const coefficients = new Float32Array(width * height);
1424
+
1425
+ for (let j = 0, jj = resolution.subbands.length; j < jj; j++) {
1426
+ let mu, epsilon;
1427
+ if (!scalarExpounded) {
1428
+ // formula E-5
1429
+ mu = spqcds[0].mu;
1430
+ epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
1431
+ } else {
1432
+ mu = spqcds[b].mu;
1433
+ epsilon = spqcds[b].epsilon;
1434
+ b++;
1435
+ }
1436
+
1437
+ const subband = resolution.subbands[j];
1438
+ const gainLog2 = SubbandsGainLog2[subband.type];
1439
+
1440
+ // calculate quantization coefficient (Section E.1.1.1)
1441
+ const delta = reversible
1442
+ ? 1
1443
+ : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
1444
+ const mb = guardBits + epsilon - 1;
1445
+
1446
+ // In the first resolution level, copyCoefficients will fill the
1447
+ // whole array with coefficients. In the succeeding passes,
1448
+ // copyCoefficients will consecutively fill in the values that belong
1449
+ // to the interleaved positions of the HL, LH, and HH coefficients.
1450
+ // The LL coefficients will then be interleaved in Transform.iterate().
1451
+ copyCoefficients(
1452
+ coefficients,
1453
+ width,
1454
+ height,
1455
+ subband,
1456
+ delta,
1457
+ mb,
1458
+ reversible,
1459
+ segmentationSymbolUsed,
1460
+ resetContextProbabilities
1461
+ );
1462
+ }
1463
+ subbandCoefficients.push({
1464
+ width,
1465
+ height,
1466
+ items: coefficients,
1467
+ });
1468
+ }
1469
+
1470
+ const result = transform.calculate(
1471
+ subbandCoefficients,
1472
+ component.tcx0,
1473
+ component.tcy0
1474
+ );
1475
+ return {
1476
+ left: component.tcx0,
1477
+ top: component.tcy0,
1478
+ width: result.width,
1479
+ height: result.height,
1480
+ items: result.items,
1481
+ };
1482
+ }
1483
+ function transformComponents(context) {
1484
+ const siz = context.SIZ;
1485
+ const components = context.components;
1486
+ const componentsCount = siz.Csiz;
1487
+ const resultImages = [];
1488
+ for (let i = 0, ii = context.tiles.length; i < ii; i++) {
1489
+ const tile = context.tiles[i];
1490
+ const transformedTiles = [];
1491
+ for (let c = 0; c < componentsCount; c++) {
1492
+ transformedTiles[c] = transformTile(context, tile, c);
1493
+ }
1494
+ const tile0 = transformedTiles[0];
1495
+ const out = new Uint8ClampedArray(tile0.items.length * componentsCount);
1496
+ const result = {
1497
+ left: tile0.left,
1498
+ top: tile0.top,
1499
+ width: tile0.width,
1500
+ height: tile0.height,
1501
+ items: out,
1502
+ };
1503
+
1504
+ // Section G.2.2 Inverse multi component transform
1505
+ let shift, offset;
1506
+ let pos = 0,
1507
+ j,
1508
+ jj,
1509
+ y0,
1510
+ y1,
1511
+ y2;
1512
+ if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
1513
+ const fourComponents = componentsCount === 4;
1514
+ const y0items = transformedTiles[0].items;
1515
+ const y1items = transformedTiles[1].items;
1516
+ const y2items = transformedTiles[2].items;
1517
+ const y3items = fourComponents ? transformedTiles[3].items : null;
1518
+
1519
+ // HACK: The multiple component transform formulas below assume that
1520
+ // all components have the same precision. With this in mind, we
1521
+ // compute shift and offset only once.
1522
+ shift = components[0].precision - 8;
1523
+ offset = (128 << shift) + 0.5;
1524
+
1525
+ const component0 = tile.components[0];
1526
+ const alpha01 = componentsCount - 3;
1527
+ jj = y0items.length;
1528
+ if (!component0.codingStyleParameters.reversibleTransformation) {
1529
+ // inverse irreversible multiple component transform
1530
+ for (j = 0; j < jj; j++, pos += alpha01) {
1531
+ y0 = y0items[j] + offset;
1532
+ y1 = y1items[j];
1533
+ y2 = y2items[j];
1534
+ out[pos++] = (y0 + 1.402 * y2) >> shift;
1535
+ out[pos++] = (y0 - 0.34413 * y1 - 0.71414 * y2) >> shift;
1536
+ out[pos++] = (y0 + 1.772 * y1) >> shift;
1537
+ }
1538
+ } else {
1539
+ // inverse reversible multiple component transform
1540
+ for (j = 0; j < jj; j++, pos += alpha01) {
1541
+ y0 = y0items[j] + offset;
1542
+ y1 = y1items[j];
1543
+ y2 = y2items[j];
1544
+ const g = y0 - ((y2 + y1) >> 2);
1545
+
1546
+ out[pos++] = (g + y2) >> shift;
1547
+ out[pos++] = g >> shift;
1548
+ out[pos++] = (g + y1) >> shift;
1549
+ }
1550
+ }
1551
+ if (fourComponents) {
1552
+ for (j = 0, pos = 3; j < jj; j++, pos += 4) {
1553
+ out[pos] = (y3items[j] + offset) >> shift;
1554
+ }
1555
+ }
1556
+ } else {
1557
+ // no multi-component transform
1558
+ for (let c = 0; c < componentsCount; c++) {
1559
+ const items = transformedTiles[c].items;
1560
+ shift = components[c].precision - 8;
1561
+ offset = (128 << shift) + 0.5;
1562
+ for (pos = c, j = 0, jj = items.length; j < jj; j++) {
1563
+ out[pos] = (items[j] + offset) >> shift;
1564
+ pos += componentsCount;
1565
+ }
1566
+ }
1567
+ }
1568
+ resultImages.push(result);
1569
+ }
1570
+ return resultImages;
1571
+ }
1572
+ function initializeTile(context, tileIndex) {
1573
+ const siz = context.SIZ;
1574
+ const componentsCount = siz.Csiz;
1575
+ const tile = context.tiles[tileIndex];
1576
+ for (let c = 0; c < componentsCount; c++) {
1577
+ const component = tile.components[c];
1578
+ const qcdOrQcc =
1579
+ context.currentTile.QCC[c] !== undefined
1580
+ ? context.currentTile.QCC[c]
1581
+ : context.currentTile.QCD;
1582
+ component.quantizationParameters = qcdOrQcc;
1583
+ const codOrCoc =
1584
+ context.currentTile.COC[c] !== undefined
1585
+ ? context.currentTile.COC[c]
1586
+ : context.currentTile.COD;
1587
+ component.codingStyleParameters = codOrCoc;
1588
+ }
1589
+ tile.codingStyleDefaultParameters = context.currentTile.COD;
1590
+ }
1591
+
1592
+ // Section B.10.2 Tag trees
1593
+ class TagTree {
1594
+ constructor(width, height) {
1595
+ const levelsLength = log2(Math.max(width, height)) + 1;
1596
+ this.levels = [];
1597
+ for (let i = 0; i < levelsLength; i++) {
1598
+ const level = {
1599
+ width,
1600
+ height,
1601
+ items: [],
1602
+ };
1603
+ this.levels.push(level);
1604
+ width = Math.ceil(width / 2);
1605
+ height = Math.ceil(height / 2);
1606
+ }
1607
+ }
1608
+
1609
+ reset(i, j) {
1610
+ let currentLevel = 0,
1611
+ value = 0,
1612
+ level;
1613
+ while (currentLevel < this.levels.length) {
1614
+ level = this.levels[currentLevel];
1615
+ const index = i + j * level.width;
1616
+ if (level.items[index] !== undefined) {
1617
+ value = level.items[index];
1618
+ break;
1619
+ }
1620
+ level.index = index;
1621
+ i >>= 1;
1622
+ j >>= 1;
1623
+ currentLevel++;
1624
+ }
1625
+ currentLevel--;
1626
+ level = this.levels[currentLevel];
1627
+ level.items[level.index] = value;
1628
+ this.currentLevel = currentLevel;
1629
+ delete this.value;
1630
+ }
1631
+
1632
+ incrementValue() {
1633
+ const level = this.levels[this.currentLevel];
1634
+ level.items[level.index]++;
1635
+ }
1636
+
1637
+ nextLevel() {
1638
+ let currentLevel = this.currentLevel;
1639
+ let level = this.levels[currentLevel];
1640
+ const value = level.items[level.index];
1641
+ currentLevel--;
1642
+ if (currentLevel < 0) {
1643
+ this.value = value;
1644
+ return false;
1645
+ }
1646
+
1647
+ this.currentLevel = currentLevel;
1648
+ level = this.levels[currentLevel];
1649
+ level.items[level.index] = value;
1650
+ return true;
1651
+ }
1652
+ }
1653
+
1654
+ class InclusionTree {
1655
+ constructor(width, height, defaultValue) {
1656
+ const levelsLength = log2(Math.max(width, height)) + 1;
1657
+ this.levels = [];
1658
+ for (let i = 0; i < levelsLength; i++) {
1659
+ const items = new Uint8Array(width * height);
1660
+ for (let j = 0, jj = items.length; j < jj; j++) {
1661
+ items[j] = defaultValue;
1662
+ }
1663
+
1664
+ const level = {
1665
+ width,
1666
+ height,
1667
+ items,
1668
+ };
1669
+ this.levels.push(level);
1670
+
1671
+ width = Math.ceil(width / 2);
1672
+ height = Math.ceil(height / 2);
1673
+ }
1674
+ }
1675
+
1676
+ reset(i, j, stopValue) {
1677
+ let currentLevel = 0;
1678
+ while (currentLevel < this.levels.length) {
1679
+ const level = this.levels[currentLevel];
1680
+ const index = i + j * level.width;
1681
+ level.index = index;
1682
+ const value = level.items[index];
1683
+
1684
+ if (value === 0xff) {
1685
+ break;
1686
+ }
1687
+
1688
+ if (value > stopValue) {
1689
+ this.currentLevel = currentLevel;
1690
+ // already know about this one, propagating the value to top levels
1691
+ this.propagateValues();
1692
+ return false;
1693
+ }
1694
+
1695
+ i >>= 1;
1696
+ j >>= 1;
1697
+ currentLevel++;
1698
+ }
1699
+ this.currentLevel = currentLevel - 1;
1700
+ return true;
1701
+ }
1702
+
1703
+ incrementValue(stopValue) {
1704
+ const level = this.levels[this.currentLevel];
1705
+ level.items[level.index] = stopValue + 1;
1706
+ this.propagateValues();
1707
+ }
1708
+
1709
+ propagateValues() {
1710
+ let levelIndex = this.currentLevel;
1711
+ let level = this.levels[levelIndex];
1712
+ const currentValue = level.items[level.index];
1713
+ while (--levelIndex >= 0) {
1714
+ level = this.levels[levelIndex];
1715
+ level.items[level.index] = currentValue;
1716
+ }
1717
+ }
1718
+
1719
+ nextLevel() {
1720
+ let currentLevel = this.currentLevel;
1721
+ let level = this.levels[currentLevel];
1722
+ const value = level.items[level.index];
1723
+ level.items[level.index] = 0xff;
1724
+ currentLevel--;
1725
+ if (currentLevel < 0) {
1726
+ return false;
1727
+ }
1728
+
1729
+ this.currentLevel = currentLevel;
1730
+ level = this.levels[currentLevel];
1731
+ level.items[level.index] = value;
1732
+ return true;
1733
+ }
1734
+ }
1735
+
1736
+ // Section D. Coefficient bit modeling
1737
+ class BitModel {
1738
+ static UNIFORM_CONTEXT = 17;
1739
+
1740
+ static RUNLENGTH_CONTEXT = 18;
1741
+
1742
+ // Table D-1
1743
+ // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
1744
+ // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
1745
+ static LLAndLHContextsLabel = new Uint8Array([
1746
+ 0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
1747
+ 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
1748
+ 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8,
1749
+ ]);
1750
+
1751
+ static HLContextLabel = new Uint8Array([
1752
+ 0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
1753
+ 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
1754
+ 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8,
1755
+ ]);
1756
+
1757
+ static HHContextLabel = new Uint8Array([
1758
+ 0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
1759
+ 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
1760
+ 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8,
1761
+ ]);
1762
+
1763
+ constructor(width, height, subband, zeroBitPlanes, mb) {
1764
+ this.width = width;
1765
+ this.height = height;
1766
+
1767
+ let contextLabelTable;
1768
+ if (subband === "HH") {
1769
+ contextLabelTable = BitModel.HHContextLabel;
1770
+ } else if (subband === "HL") {
1771
+ contextLabelTable = BitModel.HLContextLabel;
1772
+ } else {
1773
+ contextLabelTable = BitModel.LLAndLHContextsLabel;
1774
+ }
1775
+ this.contextLabelTable = contextLabelTable;
1776
+
1777
+ const coefficientCount = width * height;
1778
+
1779
+ // coefficients outside the encoding region treated as insignificant
1780
+ // add border state cells for significanceState
1781
+ this.neighborsSignificance = new Uint8Array(coefficientCount);
1782
+ this.coefficentsSign = new Uint8Array(coefficientCount);
1783
+ let coefficentsMagnitude;
1784
+ if (mb > 14) {
1785
+ coefficentsMagnitude = new Uint32Array(coefficientCount);
1786
+ } else if (mb > 6) {
1787
+ coefficentsMagnitude = new Uint16Array(coefficientCount);
1788
+ } else {
1789
+ coefficentsMagnitude = new Uint8Array(coefficientCount);
1790
+ }
1791
+ this.coefficentsMagnitude = coefficentsMagnitude;
1792
+ this.processingFlags = new Uint8Array(coefficientCount);
1793
+
1794
+ const bitsDecoded = new Uint8Array(coefficientCount);
1795
+ if (zeroBitPlanes !== 0) {
1796
+ for (let i = 0; i < coefficientCount; i++) {
1797
+ bitsDecoded[i] = zeroBitPlanes;
1798
+ }
1799
+ }
1800
+ this.bitsDecoded = bitsDecoded;
1801
+
1802
+ this.reset();
1803
+ }
1804
+
1805
+ setDecoder(decoder) {
1806
+ this.decoder = decoder;
1807
+ }
1808
+
1809
+ reset() {
1810
+ // We have 17 contexts that are accessed via context labels,
1811
+ // plus the uniform and runlength context.
1812
+ this.contexts = new Int8Array(19);
1813
+
1814
+ // Contexts are packed into 1 byte:
1815
+ // highest 7 bits carry the index, lowest bit carries mps
1816
+ this.contexts[0] = (4 << 1) | 0;
1817
+ this.contexts[BitModel.UNIFORM_CONTEXT] = (46 << 1) | 0;
1818
+ this.contexts[BitModel.RUNLENGTH_CONTEXT] = (3 << 1) | 0;
1819
+ }
1820
+
1821
+ setNeighborsSignificance(row, column, index) {
1822
+ const neighborsSignificance = this.neighborsSignificance;
1823
+ const width = this.width,
1824
+ height = this.height;
1825
+ const left = column > 0;
1826
+ const right = column + 1 < width;
1827
+ let i;
1828
+
1829
+ if (row > 0) {
1830
+ i = index - width;
1831
+ if (left) {
1832
+ neighborsSignificance[i - 1] += 0x10;
1833
+ }
1834
+ if (right) {
1835
+ neighborsSignificance[i + 1] += 0x10;
1836
+ }
1837
+ neighborsSignificance[i] += 0x04;
1838
+ }
1839
+
1840
+ if (row + 1 < height) {
1841
+ i = index + width;
1842
+ if (left) {
1843
+ neighborsSignificance[i - 1] += 0x10;
1844
+ }
1845
+ if (right) {
1846
+ neighborsSignificance[i + 1] += 0x10;
1847
+ }
1848
+ neighborsSignificance[i] += 0x04;
1849
+ }
1850
+
1851
+ if (left) {
1852
+ neighborsSignificance[index - 1] += 0x01;
1853
+ }
1854
+ if (right) {
1855
+ neighborsSignificance[index + 1] += 0x01;
1856
+ }
1857
+ neighborsSignificance[index] |= 0x80;
1858
+ }
1859
+
1860
+ runSignificancePropagationPass() {
1861
+ const decoder = this.decoder;
1862
+ const width = this.width,
1863
+ height = this.height;
1864
+ const coefficentsMagnitude = this.coefficentsMagnitude;
1865
+ const coefficentsSign = this.coefficentsSign;
1866
+ const neighborsSignificance = this.neighborsSignificance;
1867
+ const processingFlags = this.processingFlags;
1868
+ const contexts = this.contexts;
1869
+ const labels = this.contextLabelTable;
1870
+ const bitsDecoded = this.bitsDecoded;
1871
+ const processedInverseMask = ~1;
1872
+ const processedMask = 1;
1873
+ const firstMagnitudeBitMask = 2;
1874
+
1875
+ for (let i0 = 0; i0 < height; i0 += 4) {
1876
+ for (let j = 0; j < width; j++) {
1877
+ let index = i0 * width + j;
1878
+ for (let i1 = 0; i1 < 4; i1++, index += width) {
1879
+ const i = i0 + i1;
1880
+ if (i >= height) {
1881
+ break;
1882
+ }
1883
+ // clear processed flag first
1884
+ processingFlags[index] &= processedInverseMask;
1885
+
1886
+ if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
1887
+ continue;
1888
+ }
1889
+
1890
+ const contextLabel = labels[neighborsSignificance[index]];
1891
+ const decision = decoder.readBit(contexts, contextLabel);
1892
+ if (decision) {
1893
+ const sign = this.decodeSignBit(i, j, index);
1894
+ coefficentsSign[index] = sign;
1895
+ coefficentsMagnitude[index] = 1;
1896
+ this.setNeighborsSignificance(i, j, index);
1897
+ processingFlags[index] |= firstMagnitudeBitMask;
1898
+ }
1899
+ bitsDecoded[index]++;
1900
+ processingFlags[index] |= processedMask;
1901
+ }
1902
+ }
1903
+ }
1904
+ }
1905
+
1906
+ decodeSignBit(row, column, index) {
1907
+ const width = this.width,
1908
+ height = this.height;
1909
+ const coefficentsMagnitude = this.coefficentsMagnitude;
1910
+ const coefficentsSign = this.coefficentsSign;
1911
+ let contribution, sign0, sign1, significance1;
1912
+ let contextLabel, decoded;
1913
+
1914
+ // calculate horizontal contribution
1915
+ significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
1916
+ if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
1917
+ sign1 = coefficentsSign[index + 1];
1918
+ if (significance1) {
1919
+ sign0 = coefficentsSign[index - 1];
1920
+ contribution = 1 - sign1 - sign0;
1921
+ } else {
1922
+ contribution = 1 - sign1 - sign1;
1923
+ }
1924
+ } else if (significance1) {
1925
+ sign0 = coefficentsSign[index - 1];
1926
+ contribution = 1 - sign0 - sign0;
1927
+ } else {
1928
+ contribution = 0;
1929
+ }
1930
+ const horizontalContribution = 3 * contribution;
1931
+
1932
+ // calculate vertical contribution and combine with the horizontal
1933
+ significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
1934
+ if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
1935
+ sign1 = coefficentsSign[index + width];
1936
+ if (significance1) {
1937
+ sign0 = coefficentsSign[index - width];
1938
+ contribution = 1 - sign1 - sign0 + horizontalContribution;
1939
+ } else {
1940
+ contribution = 1 - sign1 - sign1 + horizontalContribution;
1941
+ }
1942
+ } else if (significance1) {
1943
+ sign0 = coefficentsSign[index - width];
1944
+ contribution = 1 - sign0 - sign0 + horizontalContribution;
1945
+ } else {
1946
+ contribution = horizontalContribution;
1947
+ }
1948
+
1949
+ if (contribution >= 0) {
1950
+ contextLabel = 9 + contribution;
1951
+ decoded = this.decoder.readBit(this.contexts, contextLabel);
1952
+ } else {
1953
+ contextLabel = 9 - contribution;
1954
+ decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
1955
+ }
1956
+ return decoded;
1957
+ }
1958
+
1959
+ runMagnitudeRefinementPass() {
1960
+ const decoder = this.decoder;
1961
+ const width = this.width,
1962
+ height = this.height;
1963
+ const coefficentsMagnitude = this.coefficentsMagnitude;
1964
+ const neighborsSignificance = this.neighborsSignificance;
1965
+ const contexts = this.contexts;
1966
+ const bitsDecoded = this.bitsDecoded;
1967
+ const processingFlags = this.processingFlags;
1968
+ const processedMask = 1;
1969
+ const firstMagnitudeBitMask = 2;
1970
+ const length = width * height;
1971
+ const width4 = width * 4;
1972
+
1973
+ for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) {
1974
+ indexNext = Math.min(length, index0 + width4);
1975
+ for (let j = 0; j < width; j++) {
1976
+ for (let index = index0 + j; index < indexNext; index += width) {
1977
+ // significant but not those that have just become
1978
+ if (
1979
+ !coefficentsMagnitude[index] ||
1980
+ (processingFlags[index] & processedMask) !== 0
1981
+ ) {
1982
+ continue;
1983
+ }
1984
+
1985
+ let contextLabel = 16;
1986
+ if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
1987
+ processingFlags[index] ^= firstMagnitudeBitMask;
1988
+ // first refinement
1989
+ const significance = neighborsSignificance[index] & 127;
1990
+ contextLabel = significance === 0 ? 15 : 14;
1991
+ }
1992
+
1993
+ const bit = decoder.readBit(contexts, contextLabel);
1994
+ coefficentsMagnitude[index] =
1995
+ (coefficentsMagnitude[index] << 1) | bit;
1996
+ bitsDecoded[index]++;
1997
+ processingFlags[index] |= processedMask;
1998
+ }
1999
+ }
2000
+ }
2001
+ }
2002
+
2003
+ runCleanupPass() {
2004
+ const decoder = this.decoder;
2005
+ const width = this.width,
2006
+ height = this.height;
2007
+ const neighborsSignificance = this.neighborsSignificance;
2008
+ const coefficentsMagnitude = this.coefficentsMagnitude;
2009
+ const coefficentsSign = this.coefficentsSign;
2010
+ const contexts = this.contexts;
2011
+ const labels = this.contextLabelTable;
2012
+ const bitsDecoded = this.bitsDecoded;
2013
+ const processingFlags = this.processingFlags;
2014
+ const processedMask = 1;
2015
+ const firstMagnitudeBitMask = 2;
2016
+ const oneRowDown = width;
2017
+ const twoRowsDown = width * 2;
2018
+ const threeRowsDown = width * 3;
2019
+ let iNext;
2020
+ for (let i0 = 0; i0 < height; i0 = iNext) {
2021
+ iNext = Math.min(i0 + 4, height);
2022
+ const indexBase = i0 * width;
2023
+ const checkAllEmpty = i0 + 3 < height;
2024
+ for (let j = 0; j < width; j++) {
2025
+ const index0 = indexBase + j;
2026
+ // using the property: labels[neighborsSignificance[index]] === 0
2027
+ // when neighborsSignificance[index] === 0
2028
+ const allEmpty =
2029
+ checkAllEmpty &&
2030
+ processingFlags[index0] === 0 &&
2031
+ processingFlags[index0 + oneRowDown] === 0 &&
2032
+ processingFlags[index0 + twoRowsDown] === 0 &&
2033
+ processingFlags[index0 + threeRowsDown] === 0 &&
2034
+ neighborsSignificance[index0] === 0 &&
2035
+ neighborsSignificance[index0 + oneRowDown] === 0 &&
2036
+ neighborsSignificance[index0 + twoRowsDown] === 0 &&
2037
+ neighborsSignificance[index0 + threeRowsDown] === 0;
2038
+ let i1 = 0,
2039
+ index = index0;
2040
+ let i = i0,
2041
+ sign;
2042
+ if (allEmpty) {
2043
+ const hasSignificantCoefficent = decoder.readBit(
2044
+ contexts,
2045
+ BitModel.RUNLENGTH_CONTEXT
2046
+ );
2047
+ if (!hasSignificantCoefficent) {
2048
+ bitsDecoded[index0]++;
2049
+ bitsDecoded[index0 + oneRowDown]++;
2050
+ bitsDecoded[index0 + twoRowsDown]++;
2051
+ bitsDecoded[index0 + threeRowsDown]++;
2052
+ continue; // next column
2053
+ }
2054
+ i1 =
2055
+ (decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
2056
+ decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
2057
+ if (i1 !== 0) {
2058
+ i = i0 + i1;
2059
+ index += i1 * width;
2060
+ }
2061
+
2062
+ sign = this.decodeSignBit(i, j, index);
2063
+ coefficentsSign[index] = sign;
2064
+ coefficentsMagnitude[index] = 1;
2065
+ this.setNeighborsSignificance(i, j, index);
2066
+ processingFlags[index] |= firstMagnitudeBitMask;
2067
+
2068
+ index = index0;
2069
+ for (let i2 = i0; i2 <= i; i2++, index += width) {
2070
+ bitsDecoded[index]++;
2071
+ }
2072
+
2073
+ i1++;
2074
+ }
2075
+ for (i = i0 + i1; i < iNext; i++, index += width) {
2076
+ if (
2077
+ coefficentsMagnitude[index] ||
2078
+ (processingFlags[index] & processedMask) !== 0
2079
+ ) {
2080
+ continue;
2081
+ }
2082
+
2083
+ const contextLabel = labels[neighborsSignificance[index]];
2084
+ const decision = decoder.readBit(contexts, contextLabel);
2085
+ if (decision === 1) {
2086
+ sign = this.decodeSignBit(i, j, index);
2087
+ coefficentsSign[index] = sign;
2088
+ coefficentsMagnitude[index] = 1;
2089
+ this.setNeighborsSignificance(i, j, index);
2090
+ processingFlags[index] |= firstMagnitudeBitMask;
2091
+ }
2092
+ bitsDecoded[index]++;
2093
+ }
2094
+ }
2095
+ }
2096
+ }
2097
+
2098
+ checkSegmentationSymbol() {
2099
+ const decoder = this.decoder;
2100
+ const contexts = this.contexts;
2101
+ const symbol =
2102
+ (decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 3) |
2103
+ (decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 2) |
2104
+ (decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
2105
+ decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
2106
+ if (symbol !== 0xa) {
2107
+ throw new JpxError("Invalid segmentation symbol");
2108
+ }
2109
+ }
2110
+ }
2111
+
2112
+ // Section F, Discrete wavelet transformation
2113
+ class Transform {
2114
+ constructor() {
2115
+ if (this.constructor === Transform) {
2116
+ unreachable("Cannot initialize Transform.");
2117
+ }
2118
+ }
2119
+
2120
+ calculate(subbands, u0, v0) {
2121
+ let ll = subbands[0];
2122
+ for (let i = 1, ii = subbands.length; i < ii; i++) {
2123
+ ll = this.iterate(ll, subbands[i], u0, v0);
2124
+ }
2125
+ return ll;
2126
+ }
2127
+
2128
+ extend(buffer, offset, size) {
2129
+ // Section F.3.7 extending... using max extension of 4
2130
+ let i1 = offset - 1,
2131
+ j1 = offset + 1;
2132
+ let i2 = offset + size - 2,
2133
+ j2 = offset + size;
2134
+ buffer[i1--] = buffer[j1++];
2135
+ buffer[j2++] = buffer[i2--];
2136
+ buffer[i1--] = buffer[j1++];
2137
+ buffer[j2++] = buffer[i2--];
2138
+ buffer[i1--] = buffer[j1++];
2139
+ buffer[j2++] = buffer[i2--];
2140
+ buffer[i1] = buffer[j1];
2141
+ buffer[j2] = buffer[i2];
2142
+ }
2143
+
2144
+ filter(x, offset, length) {
2145
+ unreachable("Abstract method `filter` called");
2146
+ }
2147
+
2148
+ iterate(ll, hl_lh_hh, u0, v0) {
2149
+ const llWidth = ll.width,
2150
+ llHeight = ll.height;
2151
+ let llItems = ll.items;
2152
+ const width = hl_lh_hh.width;
2153
+ const height = hl_lh_hh.height;
2154
+ const items = hl_lh_hh.items;
2155
+ let i, j, k, l, u, v;
2156
+
2157
+ // Interleave LL according to Section F.3.3
2158
+ for (k = 0, i = 0; i < llHeight; i++) {
2159
+ l = i * 2 * width;
2160
+ for (j = 0; j < llWidth; j++, k++, l += 2) {
2161
+ items[l] = llItems[k];
2162
+ }
2163
+ }
2164
+ // The LL band is not needed anymore.
2165
+ llItems = ll.items = null;
2166
+
2167
+ const bufferPadding = 4;
2168
+ const rowBuffer = new Float32Array(width + 2 * bufferPadding);
2169
+
2170
+ // Section F.3.4 HOR_SR
2171
+ if (width === 1) {
2172
+ // if width = 1, when u0 even keep items as is, when odd divide by 2
2173
+ if ((u0 & 1) !== 0) {
2174
+ for (v = 0, k = 0; v < height; v++, k += width) {
2175
+ items[k] *= 0.5;
2176
+ }
2177
+ }
2178
+ } else {
2179
+ for (v = 0, k = 0; v < height; v++, k += width) {
2180
+ rowBuffer.set(items.subarray(k, k + width), bufferPadding);
2181
+
2182
+ this.extend(rowBuffer, bufferPadding, width);
2183
+ this.filter(rowBuffer, bufferPadding, width);
2184
+
2185
+ items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
2186
+ }
2187
+ }
2188
+
2189
+ // Accesses to the items array can take long, because it may not fit into
2190
+ // CPU cache and has to be fetched from main memory. Since subsequent
2191
+ // accesses to the items array are not local when reading columns, we
2192
+ // have a cache miss every time. To reduce cache misses, get up to
2193
+ // 'numBuffers' items at a time and store them into the individual
2194
+ // buffers. The colBuffers should be small enough to fit into CPU cache.
2195
+ let numBuffers = 16;
2196
+ const colBuffers = [];
2197
+ for (i = 0; i < numBuffers; i++) {
2198
+ colBuffers.push(new Float32Array(height + 2 * bufferPadding));
2199
+ }
2200
+ let b,
2201
+ currentBuffer = 0;
2202
+ ll = bufferPadding + height;
2203
+
2204
+ // Section F.3.5 VER_SR
2205
+ if (height === 1) {
2206
+ // if height = 1, when v0 even keep items as is, when odd divide by 2
2207
+ if ((v0 & 1) !== 0) {
2208
+ for (u = 0; u < width; u++) {
2209
+ items[u] *= 0.5;
2210
+ }
2211
+ }
2212
+ } else {
2213
+ for (u = 0; u < width; u++) {
2214
+ // if we ran out of buffers, copy several image columns at once
2215
+ if (currentBuffer === 0) {
2216
+ numBuffers = Math.min(width - u, numBuffers);
2217
+ for (k = u, l = bufferPadding; l < ll; k += width, l++) {
2218
+ for (b = 0; b < numBuffers; b++) {
2219
+ colBuffers[b][l] = items[k + b];
2220
+ }
2221
+ }
2222
+ currentBuffer = numBuffers;
2223
+ }
2224
+
2225
+ currentBuffer--;
2226
+ const buffer = colBuffers[currentBuffer];
2227
+ this.extend(buffer, bufferPadding, height);
2228
+ this.filter(buffer, bufferPadding, height);
2229
+
2230
+ // If this is last buffer in this group of buffers, flush all buffers.
2231
+ if (currentBuffer === 0) {
2232
+ k = u - numBuffers + 1;
2233
+ for (l = bufferPadding; l < ll; k += width, l++) {
2234
+ for (b = 0; b < numBuffers; b++) {
2235
+ items[k + b] = colBuffers[b][l];
2236
+ }
2237
+ }
2238
+ }
2239
+ }
2240
+ }
2241
+
2242
+ return { width, height, items };
2243
+ }
2244
+ }
2245
+
2246
+ // Section 3.8.2 Irreversible 9-7 filter
2247
+ class IrreversibleTransform extends Transform {
2248
+ filter(x, offset, length) {
2249
+ const len = length >> 1;
2250
+ offset |= 0;
2251
+ let j, n, current, next;
2252
+
2253
+ const alpha = -1.586134342059924;
2254
+ const beta = -0.052980118572961;
2255
+ const gamma = 0.882911075530934;
2256
+ const delta = 0.443506852043971;
2257
+ const K = 1.230174104914001;
2258
+ const K_ = 1 / K;
2259
+
2260
+ // step 1 is combined with step 3
2261
+
2262
+ // step 2
2263
+ j = offset - 3;
2264
+ for (n = len + 4; n--; j += 2) {
2265
+ x[j] *= K_;
2266
+ }
2267
+
2268
+ // step 1 & 3
2269
+ j = offset - 2;
2270
+ current = delta * x[j - 1];
2271
+ for (n = len + 3; n--; j += 2) {
2272
+ next = delta * x[j + 1];
2273
+ x[j] = K * x[j] - current - next;
2274
+ if (n--) {
2275
+ j += 2;
2276
+ current = delta * x[j + 1];
2277
+ x[j] = K * x[j] - current - next;
2278
+ } else {
2279
+ break;
2280
+ }
2281
+ }
2282
+
2283
+ // step 4
2284
+ j = offset - 1;
2285
+ current = gamma * x[j - 1];
2286
+ for (n = len + 2; n--; j += 2) {
2287
+ next = gamma * x[j + 1];
2288
+ x[j] -= current + next;
2289
+ if (n--) {
2290
+ j += 2;
2291
+ current = gamma * x[j + 1];
2292
+ x[j] -= current + next;
2293
+ } else {
2294
+ break;
2295
+ }
2296
+ }
2297
+
2298
+ // step 5
2299
+ j = offset;
2300
+ current = beta * x[j - 1];
2301
+ for (n = len + 1; n--; j += 2) {
2302
+ next = beta * x[j + 1];
2303
+ x[j] -= current + next;
2304
+ if (n--) {
2305
+ j += 2;
2306
+ current = beta * x[j + 1];
2307
+ x[j] -= current + next;
2308
+ } else {
2309
+ break;
2310
+ }
2311
+ }
2312
+
2313
+ // step 6
2314
+ if (len !== 0) {
2315
+ j = offset + 1;
2316
+ current = alpha * x[j - 1];
2317
+ for (n = len; n--; j += 2) {
2318
+ next = alpha * x[j + 1];
2319
+ x[j] -= current + next;
2320
+ if (n--) {
2321
+ j += 2;
2322
+ current = alpha * x[j + 1];
2323
+ x[j] -= current + next;
2324
+ } else {
2325
+ break;
2326
+ }
2327
+ }
2328
+ }
2329
+ }
2330
+ }
2331
+
2332
+ // Section 3.8.1 Reversible 5-3 filter
2333
+ class ReversibleTransform extends Transform {
2334
+ filter(x, offset, length) {
2335
+ const len = length >> 1;
2336
+ offset |= 0;
2337
+ let j, n;
2338
+
2339
+ for (j = offset, n = len + 1; n--; j += 2) {
2340
+ x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2;
2341
+ }
2342
+
2343
+ for (j = offset + 1, n = len; n--; j += 2) {
2344
+ x[j] += (x[j - 1] + x[j + 1]) >> 1;
2345
+ }
2346
+ }
2347
+ }
2348
+
2349
+ export { JpxImage };