bfg-common 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (782) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +49 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/prettier.xml +6 -0
  5. package/.idea/uikit.iml +12 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/.prettierrc +5 -0
  8. package/PROJECT_STRUCTURE.md +42 -0
  9. package/README.md +42 -0
  10. package/assets/img/bg1.jpeg +0 -0
  11. package/assets/img/bg2.jpeg +0 -0
  12. package/assets/img/icons/icon-cps-dark-mode.png +0 -0
  13. package/assets/img/icons/icon-cps.png +0 -0
  14. package/assets/img/icons/icon-datastore.svg +1 -0
  15. package/assets/img/icons/icon-hcs.svg +4 -0
  16. package/assets/img/icons/icon-life-m-dark.svg +4 -0
  17. package/assets/img/icons/icon-life-m-light.svg +4 -0
  18. package/assets/img/icons/icon-ro-dark.svg +2 -0
  19. package/assets/img/icons/icon-ro-light.svg +3 -0
  20. package/assets/img/icons/icons-sprite-dark-1.svg +1 -0
  21. package/assets/img/icons/icons-sprite-dark-2.svg +1 -0
  22. package/assets/img/icons/icons-sprite-dark-3.svg +1 -0
  23. package/assets/img/icons/icons-sprite-dark-4.svg +1 -0
  24. package/assets/img/icons/icons-sprite-dark-5.svg +1 -0
  25. package/assets/img/icons/icons-sprite-light-1.svg +1 -0
  26. package/assets/img/icons/icons-sprite-light-2.svg +1 -0
  27. package/assets/img/icons/icons-sprite-light-3.svg +1 -0
  28. package/assets/img/icons/icons-sprite-light-4.svg +1 -0
  29. package/assets/img/icons/icons-sprite-light-5.svg +1 -0
  30. package/assets/img/icons/info.svg +8 -0
  31. package/assets/img/icons/sprite.png +0 -0
  32. package/assets/img/icons/summary-cluster.svg +1 -0
  33. package/assets/img/icons/vc.svg +53 -0
  34. package/assets/img/icons/vm-ui-icons.png +0 -0
  35. package/assets/img/logo copy.svg +50 -0
  36. package/assets/img/logo.png +0 -0
  37. package/assets/img/logo.svg +51 -0
  38. package/assets/localization/local_be.json +1851 -0
  39. package/assets/localization/local_en.json +1851 -0
  40. package/assets/localization/local_hy.json +1851 -0
  41. package/assets/localization/local_kk.json +1851 -0
  42. package/assets/localization/local_ru.json +1851 -0
  43. package/assets/localization/local_zh.json +1851 -0
  44. package/assets/scss/clarity/clr-ui.min.css +8 -0
  45. package/assets/scss/common/animations.scss +28 -0
  46. package/assets/scss/common/global.scss +178 -0
  47. package/assets/scss/common/icons/icons-1.scss +188 -0
  48. package/assets/scss/common/icons/icons-2.scss +208 -0
  49. package/assets/scss/common/icons/icons-3.scss +176 -0
  50. package/assets/scss/common/icons/icons-4.scss +179 -0
  51. package/assets/scss/common/icons/icons-5.scss +53 -0
  52. package/assets/scss/common/icons/icons.scss +14 -0
  53. package/assets/scss/common/mixins.scss +39 -0
  54. package/assets/scss/common/normalize.scss +320 -0
  55. package/assets/scss/common/theme.scss +230 -0
  56. package/assets/scss/common/utilities.scss +18 -0
  57. package/assets/scss/common/variables.scss +43 -0
  58. package/assets/scss/main.scss +13 -0
  59. package/components/atoms/DiagramIcon.vue +287 -0
  60. package/components/atoms/TheIcon.vue +1687 -0
  61. package/components/atoms/TheIcon2.vue +318 -0
  62. package/components/atoms/alert/Alert.spec.ts +38 -0
  63. package/components/atoms/alert/Alert.vue +84 -0
  64. package/components/atoms/alert/Notification.spec.ts +34 -0
  65. package/components/atoms/alert/Notification.vue +167 -0
  66. package/components/atoms/alert/models/enums.ts +12 -0
  67. package/components/atoms/alert/models/interfaces.ts +27 -0
  68. package/components/atoms/alert/models/types.ts +7 -0
  69. package/components/atoms/autocomplete/Autocomplete.vue +236 -0
  70. package/components/atoms/collapse/CollapseNav.vue +153 -0
  71. package/components/atoms/collapse/CollapseNavItem.vue +190 -0
  72. package/components/atoms/collapse/models/interfaces.ts +9 -0
  73. package/components/atoms/combobox/Combobox.vue +131 -0
  74. package/components/atoms/datepicker/Datepicker.vue +612 -0
  75. package/components/atoms/datepicker/config/allShortMonths.ts +103 -0
  76. package/components/atoms/datepicker/config/datapicker.ts +43 -0
  77. package/components/atoms/datepicker/models/interfaces.ts +8 -0
  78. package/components/atoms/dropdown/Portlet.spec.ts +26 -0
  79. package/components/atoms/dropdown/Portlet.vue +111 -0
  80. package/components/atoms/dropdown/dropdown/Dropdown.vue +148 -0
  81. package/components/atoms/dropdown/dropdown/models/interfaces.ts +8 -0
  82. package/components/atoms/dropdown/tree/Tree.vue +134 -0
  83. package/components/atoms/dropdown/tree/models/interfaces.ts +9 -0
  84. package/components/atoms/input/Search.vue +16 -0
  85. package/components/atoms/list/SelectList.vue +62 -0
  86. package/components/atoms/list/SimpleList.vue +29 -0
  87. package/components/atoms/list/dragDropList/DragDropList.vue +139 -0
  88. package/components/atoms/list/dragDropList/config/events.ts +4 -0
  89. package/components/atoms/loader/BarLoader.vue +21 -0
  90. package/components/atoms/loader/Loader.vue +26 -0
  91. package/components/atoms/loader/PreLoader.vue +34 -0
  92. package/components/atoms/loader/Preloader.spec.ts +24 -0
  93. package/components/atoms/modal/Modal.spec.ts +55 -0
  94. package/components/atoms/modal/Modal.vue +241 -0
  95. package/components/atoms/modal/bySteps/BySteps.spec.ts +66 -0
  96. package/components/atoms/modal/bySteps/BySteps.vue +234 -0
  97. package/components/atoms/modal/byStepsSecond/ByStepsSecond.vue +174 -0
  98. package/components/atoms/models/interfaces.ts +11 -0
  99. package/components/atoms/nav/NavBar.spec.ts +34 -0
  100. package/components/atoms/nav/NavBar.vue +116 -0
  101. package/components/atoms/nav/VerticalNavBar.vue +89 -0
  102. package/components/atoms/nav/models/interfaces.ts +5 -0
  103. package/components/atoms/notificationBar/NotificationBar.vue +175 -0
  104. package/components/atoms/notificationBar/models/enums.ts +27 -0
  105. package/components/atoms/notificationBar/models/interfaces.ts +6 -0
  106. package/components/atoms/notificationBar/models/types.ts +1 -0
  107. package/components/atoms/perPage/PerPage.vue +52 -0
  108. package/components/atoms/popover/Popover.vue +48 -0
  109. package/components/atoms/popup/SimplePopup.vue +90 -0
  110. package/components/atoms/select/TheSelect.vue +175 -0
  111. package/components/atoms/select/models/interfaces.ts +4 -0
  112. package/components/atoms/stack/StackBlock.vue +171 -0
  113. package/components/atoms/stack/StackContent.vue +60 -0
  114. package/components/atoms/step/VerticalStep.spec.ts +68 -0
  115. package/components/atoms/step/VerticalStep.vue +104 -0
  116. package/components/atoms/step/models/verticalStepItem.ts +7 -0
  117. package/components/atoms/switch/Switch.vue +107 -0
  118. package/components/atoms/table/compact/Compact.vue +526 -0
  119. package/components/atoms/table/compact/models/interfaces.ts +11 -0
  120. package/components/atoms/table/dataGrid/DataGrid.spec.ts +61 -0
  121. package/components/atoms/table/dataGrid/DataGrid.vue +1283 -0
  122. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +204 -0
  123. package/components/atoms/table/dataGrid/DataGridPage.vue +189 -0
  124. package/components/atoms/table/dataGrid/DataGridPagination.vue +83 -0
  125. package/components/atoms/table/dataGrid/config/itemsPerPage.ts +20 -0
  126. package/components/atoms/table/dataGrid/models/interfaces.ts +24 -0
  127. package/components/atoms/table/dataGrid/models/types.ts +5 -0
  128. package/components/atoms/table/dataGrid/utils/constructDataTable.ts +33 -0
  129. package/components/atoms/table/info/Info.vue +60 -0
  130. package/components/atoms/table/info/models/interfaces.ts +6 -0
  131. package/components/atoms/table/simpleEvent/SimpleEvent.vue +98 -0
  132. package/components/atoms/table/simpleEvent/models/interfaces.ts +9 -0
  133. package/components/atoms/table/simpleInfo/SimpleInfo.vue +68 -0
  134. package/components/atoms/table/simpleInfo/models/interfaces.ts +4 -0
  135. package/components/atoms/table/simpleTable/SimpleTable.vue +291 -0
  136. package/components/atoms/table/simpleTable/models/interfaces.ts +10 -0
  137. package/components/atoms/tabs/Tabs.vue +189 -0
  138. package/components/atoms/tabs/VerticalTabs.vue +81 -0
  139. package/components/atoms/tabs/models/interfaces.ts +4 -0
  140. package/components/atoms/tabs/models/types.ts +1 -0
  141. package/components/atoms/tooltip/Models/interfaces.ts +4 -0
  142. package/components/atoms/tooltip/Signpost.vue +224 -0
  143. package/components/atoms/tooltip/Text.vue +39 -0
  144. package/components/atoms/tooltip/Tooltip.vue +57 -0
  145. package/components/atoms/tooltip/TooltipError.vue +113 -0
  146. package/components/common/accordion/Accordion.vue +176 -0
  147. package/components/common/accordion/Recursion.vue +195 -0
  148. package/components/common/accordion/models/interfaces.ts +14 -0
  149. package/components/common/adapterManager/AdapterManager.vue +715 -0
  150. package/components/common/adapterManager/AddAdapterModal.vue +464 -0
  151. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -0
  152. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -0
  153. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -0
  154. package/components/common/adapterManager/config/index.ts +19 -0
  155. package/components/common/adapterManager/ui/NoSelectedAdapter.vue +39 -0
  156. package/components/common/adapterManager/ui/SecondTitle.vue +37 -0
  157. package/components/common/adapterManager/ui/actions/ActionsBar.vue +93 -0
  158. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +28 -0
  159. package/components/common/adapterManager/ui/actions/MoveDownAdapterButton.vue +33 -0
  160. package/components/common/adapterManager/ui/actions/MoveUpAdapterButton.vue +33 -0
  161. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +34 -0
  162. package/components/common/adapterManager/ui/actions/VerticalSeparator.vue +11 -0
  163. package/components/common/adapterManager/ui/table/Adapters.vue +91 -0
  164. package/components/common/adapterManager/ui/table/Header.vue +89 -0
  165. package/components/common/adapterManager/ui/table/Table.vue +167 -0
  166. package/components/common/addNetworking/AddNetworking.vue +982 -0
  167. package/components/common/addNetworking/Wizard.vue +286 -0
  168. package/components/common/addNetworking/config/addNetworkingSteps.ts +404 -0
  169. package/components/common/addNetworking/config/index.ts +46 -0
  170. package/components/common/addNetworking/config/initialData.ts +78 -0
  171. package/components/common/addNetworking/config/portPropertiesStep.ts +19 -0
  172. package/components/common/addNetworking/config/selectSwitch.ts +19 -0
  173. package/components/common/addNetworking/config/sendData.ts +87 -0
  174. package/components/common/addNetworking/config/temporaryData.ts +8 -0
  175. package/components/common/addNetworking/config/validation.ts +23 -0
  176. package/components/common/addNetworking/mappers/mappers.ts +166 -0
  177. package/components/common/addNetworking/modals/SelectNetwork.vue +149 -0
  178. package/components/common/addNetworking/modals/SelectStandardSwitch.vue +125 -0
  179. package/components/common/addNetworking/modals/SelectSwitch.vue +114 -0
  180. package/components/common/addNetworking/models/enums.ts +7 -0
  181. package/components/common/addNetworking/models/interfaces.ts +207 -0
  182. package/components/common/addNetworking/models/types.ts +5 -0
  183. package/components/common/addNetworking/steps/ConnectionSettings.vue +269 -0
  184. package/components/common/addNetworking/steps/CreateStandardSwitch.vue +91 -0
  185. package/components/common/addNetworking/steps/Header.vue +53 -0
  186. package/components/common/addNetworking/steps/IpFourSettings.vue +361 -0
  187. package/components/common/addNetworking/steps/PhysicalAdapter.vue +24 -0
  188. package/components/common/addNetworking/steps/PortProperties.vue +481 -0
  189. package/components/common/addNetworking/steps/ReadyComplete.vue +29 -0
  190. package/components/common/addNetworking/steps/SelectConnectionType.vue +106 -0
  191. package/components/common/addNetworking/steps/SelectedTargetDevice.vue +563 -0
  192. package/components/common/addNetworking/utils/index.ts +212 -0
  193. package/components/common/browse/Browse.vue +182 -0
  194. package/components/common/browse/blocks/Container.vue +102 -0
  195. package/components/common/browse/blocks/Title.vue +66 -0
  196. package/components/common/browse/blocks/contents/Files.vue +68 -0
  197. package/components/common/browse/blocks/info/Date.vue +21 -0
  198. package/components/common/browse/blocks/info/Size.vue +17 -0
  199. package/components/common/browse/blocks/info/Text.vue +17 -0
  200. package/components/common/browse/blocks/models/types.ts +1 -0
  201. package/components/common/browse/models/interfaces.ts +5 -0
  202. package/components/common/context/Context.spec.ts +20 -0
  203. package/components/common/context/Context.vue +97 -0
  204. package/components/common/context/ContextRecursion.spec.ts +55 -0
  205. package/components/common/context/ContextRecursion.vue +251 -0
  206. package/components/common/context/models/interfaces.ts +26 -0
  207. package/components/common/details/DetailsItem.vue +106 -0
  208. package/components/common/details/DetailsList.vue +23 -0
  209. package/components/common/details/model/interfaces.ts +9 -0
  210. package/components/common/diagramMain/Diagram.vue +186 -0
  211. package/components/common/diagramMain/DiagramMain.vue +979 -0
  212. package/components/common/diagramMain/Header.vue +160 -0
  213. package/components/common/diagramMain/Highlights.vue +102 -0
  214. package/components/common/diagramMain/adapter/Adapter.vue +105 -0
  215. package/components/common/diagramMain/adapter/AdapterItem.vue +227 -0
  216. package/components/common/diagramMain/adapter/AdapterItems.vue +57 -0
  217. package/components/common/diagramMain/adapter/Block.vue +41 -0
  218. package/components/common/diagramMain/adapter/Contents.vue +96 -0
  219. package/components/common/diagramMain/adapter/Lines.vue +52 -0
  220. package/components/common/diagramMain/adapter/SecondBlock.vue +42 -0
  221. package/components/common/diagramMain/config/index.ts +51 -0
  222. package/components/common/diagramMain/config/initial.ts +38 -0
  223. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +236 -0
  224. package/components/common/diagramMain/modals/MigrateVmkernelAdapter.vue +535 -0
  225. package/components/common/diagramMain/modals/config/adapterModal.ts +110 -0
  226. package/components/common/diagramMain/modals/config/diagramConfig.ts +17 -0
  227. package/components/common/diagramMain/modals/config/index.ts +57 -0
  228. package/components/common/diagramMain/modals/config/initial.ts +195 -0
  229. package/components/common/diagramMain/modals/config/migrateVmkernelAdapterSteps.ts +81 -0
  230. package/components/common/diagramMain/modals/config/networkModal.ts +337 -0
  231. package/components/common/diagramMain/modals/config/portModal.ts +201 -0
  232. package/components/common/diagramMain/modals/config/switchModal.ts +172 -0
  233. package/components/common/diagramMain/modals/config/vCenterModal.ts +30 -0
  234. package/components/common/diagramMain/modals/config/validation.ts +3 -0
  235. package/components/common/diagramMain/modals/config/vmKernelAdapter.ts +90 -0
  236. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +41 -0
  237. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +490 -0
  238. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +714 -0
  239. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +211 -0
  240. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +178 -0
  241. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +161 -0
  242. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +165 -0
  243. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +392 -0
  244. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -0
  245. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -0
  246. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -0
  247. package/components/common/diagramMain/modals/steps/ConnectionSettings.vue +206 -0
  248. package/components/common/diagramMain/modals/steps/SelectVmkernelAdapter.vue +221 -0
  249. package/components/common/diagramMain/modals/steps/VmkernelAdapterReadyComplete.vue +50 -0
  250. package/components/common/diagramMain/modals/utils/index.ts +9 -0
  251. package/components/common/diagramMain/modals/viewSettings/Info.vue +94 -0
  252. package/components/common/diagramMain/modals/viewSettings/ViewSettings.vue +171 -0
  253. package/components/common/diagramMain/modals/viewSettings/ViewSettingsModal.vue +93 -0
  254. package/components/common/diagramMain/models/enums.ts +27 -0
  255. package/components/common/diagramMain/models/interfaces.ts +586 -0
  256. package/components/common/diagramMain/models/types.ts +9 -0
  257. package/components/common/diagramMain/network/Block.vue +55 -0
  258. package/components/common/diagramMain/network/Contents.vue +238 -0
  259. package/components/common/diagramMain/network/Lines.vue +65 -0
  260. package/components/common/diagramMain/network/Network.vue +117 -0
  261. package/components/common/diagramMain/network/NoNetwork.vue +47 -0
  262. package/components/common/diagramMain/network/SecondBlock.vue +51 -0
  263. package/components/common/diagramMain/port/Port.vue +301 -0
  264. package/components/common/diagramMain/port/Ports.vue +41 -0
  265. package/components/common/diagramMain/switch/Switch.vue +71 -0
  266. package/components/common/diagramMain/switch/SwitchSelected.vue +29 -0
  267. package/components/common/diagramMain/utils/utils.ts +218 -0
  268. package/components/common/feedback/Buttons.vue +232 -0
  269. package/components/common/feedback/Feedback.vue +236 -0
  270. package/components/common/feedback/Message.vue +468 -0
  271. package/components/common/feedback/VisitPortal.vue +54 -0
  272. package/components/common/feedback/config/drawingPanel.ts +31 -0
  273. package/components/common/feedback/config/feedbackTabs.ts +24 -0
  274. package/components/common/feedback/models/interfaces.ts +15 -0
  275. package/components/common/graph/Graph.vue +107 -0
  276. package/components/common/graph/utils/renderGraph.ts +389 -0
  277. package/components/common/headline/Headline.vue +32 -0
  278. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +343 -0
  279. package/components/common/mainNavigationPanel/models/interfaces.ts +6 -0
  280. package/components/common/mainNavigationPanel/models/types.ts +1 -0
  281. package/components/common/modals/Rename.vue +165 -0
  282. package/components/common/modals/config/defaultForm.ts +18 -0
  283. package/components/common/modals/config/renameLabelWidth.ts +3 -0
  284. package/components/common/modals/models/interfaces.ts +5 -0
  285. package/components/common/monitor/advanced/Advanced.vue +149 -0
  286. package/components/common/monitor/advanced/GraphView.vue +200 -0
  287. package/components/common/monitor/advanced/models/interfaces.ts +6 -0
  288. package/components/common/monitor/advanced/models/types.ts +1 -0
  289. package/components/common/monitor/advanced/table/Table.vue +90 -0
  290. package/components/common/monitor/advanced/table/config/performanceDatatable.ts +116 -0
  291. package/components/common/monitor/advanced/table/models/interfaces.ts +12 -0
  292. package/components/common/monitor/advanced/table/models/types.ts +10 -0
  293. package/components/common/monitor/advanced/tools/Tools.vue +281 -0
  294. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +109 -0
  295. package/components/common/monitor/advanced/tools/chartOptionsModal/Notification.vue +33 -0
  296. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +79 -0
  297. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/config/optionsActions.ts +13 -0
  298. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +53 -0
  299. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +47 -0
  300. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/Table.vue +104 -0
  301. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/config/tableConfig.ts +73 -0
  302. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/interfaces.ts +15 -0
  303. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/types.ts +7 -0
  304. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +18 -0
  305. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +388 -0
  306. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/config/dateForm.ts +59 -0
  307. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +107 -0
  308. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/config/objectTable.ts +54 -0
  309. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/interfaces.ts +4 -0
  310. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/types.ts +1 -0
  311. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/Metrics.vue +32 -0
  312. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/config/optionsMetrics.ts +104 -0
  313. package/components/common/monitor/advanced/tools/config/advancedToolbar.ts +73 -0
  314. package/components/common/monitor/advanced/tools/models/interfaces.ts +4 -0
  315. package/components/common/monitor/config/getValidDateByOption.ts +14 -0
  316. package/components/common/monitor/models/interfaces.ts +16 -0
  317. package/components/common/monitor/overview/Overview.vue +412 -0
  318. package/components/common/monitor/overview/filters/Filters.vue +210 -0
  319. package/components/common/monitor/overview/filters/config/filterOptions.ts +56 -0
  320. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +220 -0
  321. package/components/common/monitor/overview/filters/customIntervalModal/config/dateChecker.ts +35 -0
  322. package/components/common/monitor/overview/filters/models/interfaces.ts +6 -0
  323. package/components/common/monitor/overview/filters/models/types.ts +3 -0
  324. package/components/common/perPage/PerPage.vue +51 -0
  325. package/components/common/recursionTree/RecursionTree.vue +201 -0
  326. package/components/common/recursionTree/models/interfaces.ts +19 -0
  327. package/components/common/resource/models/interfaces.ts +9 -0
  328. package/components/common/resource/models/types.ts +1 -0
  329. package/components/common/resource/progressBlock/ProgressBlock.vue +105 -0
  330. package/components/common/resource/simple/Simple.vue +58 -0
  331. package/components/common/resource/simple/models/enums.ts +5 -0
  332. package/components/common/resource/utils.ts +33 -0
  333. package/components/common/select/button/ButtonDropdown.vue +100 -0
  334. package/components/common/select/button/models/interfaces.ts +6 -0
  335. package/components/common/select/radio/RadioGroup.vue +71 -0
  336. package/components/common/select/radio/models/interfaces.ts +10 -0
  337. package/components/common/spiceConsole/Drawer.vue +233 -0
  338. package/components/common/spiceConsole/SpiceConsole.vue +87 -0
  339. package/components/common/spiceConsole/keyboard/Keyboard.vue +402 -0
  340. package/components/common/spiceConsole/keyboard/config/keyboardRows.ts +891 -0
  341. package/components/common/spiceConsole/keyboard/models/interfaces.ts +17 -0
  342. package/components/common/spiceConsole/models/types.ts +1 -0
  343. package/components/common/split/horizontal/Horizontal.vue +306 -0
  344. package/components/common/split/horizontal/models/interfaces.ts +5 -0
  345. package/components/common/split/vertical/Vertical.vue +213 -0
  346. package/components/common/split/vertical/models/interfaces.ts +3 -0
  347. package/components/common/tools/Actions.vue +141 -0
  348. package/components/common/tools/models/interfaces.ts +6 -0
  349. package/components/common/vm/actions/add/Add.vue +654 -0
  350. package/components/common/vm/actions/add/FolderTreeView.vue +83 -0
  351. package/components/common/vm/actions/add/config/capabilities.ts +670 -0
  352. package/components/common/vm/actions/add/customizeHardware/CustomizeHardware.vue +236 -0
  353. package/components/common/vm/actions/add/customizeHardware/config/navItems.ts +19 -0
  354. package/components/common/vm/actions/add/customizeHardware/models/interfaces.ts +7 -0
  355. package/components/common/vm/actions/add/customizeHardware/virtualHardware/VirtualHardware.vue +611 -0
  356. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/BrowseView.vue +203 -0
  357. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/models/interfaces.ts +8 -0
  358. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/Bus.vue +86 -0
  359. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/config/options.ts +13 -0
  360. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +223 -0
  361. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/fileTypes.ts +9 -0
  362. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/options.ts +11 -0
  363. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +55 -0
  364. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/models/types.ts +1 -0
  365. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/binaryOptions.ts +12 -0
  366. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/dropdownItems.ts +52 -0
  367. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +97 -0
  368. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -0
  369. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuHotPlug.vue +49 -0
  370. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -0
  371. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Hv.vue +93 -0
  372. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Iommu.vue +52 -0
  373. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/MaxCpu.vue +99 -0
  374. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Pc.vue +54 -0
  375. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Sa.vue +102 -0
  376. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/config/cpuOptions.ts +19 -0
  377. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/Shares.vue +151 -0
  378. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/config/options.ts +28 -0
  379. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +58 -0
  380. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/Limit.vue +210 -0
  381. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/config/options.ts +28 -0
  382. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/Memory.vue +278 -0
  383. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/MemoryHotPlug.vue +53 -0
  384. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/config/memoryOptions.ts +23 -0
  385. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/interfaces.ts +125 -0
  386. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/types.ts +4 -0
  387. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/DiskFile.vue +24 -0
  388. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/Location.vue +171 -0
  389. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/MaximumSize.vue +27 -0
  390. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +447 -0
  391. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +80 -0
  392. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/config/options.ts +7 -0
  393. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +147 -0
  394. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/config/options.ts +28 -0
  395. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +87 -0
  396. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/config/options.ts +18 -0
  397. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +87 -0
  398. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/config/options.ts +15 -0
  399. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +85 -0
  400. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/config/options.ts +12 -0
  401. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/Location.vue +141 -0
  402. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +252 -0
  403. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +86 -0
  404. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/config/options.ts +9 -0
  405. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +140 -0
  406. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/config/options.ts +11 -0
  407. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +157 -0
  408. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/config/options.ts +7 -0
  409. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +44 -0
  410. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +49 -0
  411. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/config/options.ts +10 -0
  412. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +27 -0
  413. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -0
  414. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +56 -0
  415. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +65 -0
  416. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/config/options.ts +6 -0
  417. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/InputDevices.vue +21 -0
  418. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/Other.vue +27 -0
  419. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/Reservation.vue +228 -0
  420. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/config/options.ts +33 -0
  421. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/Graphics.vue +45 -0
  422. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +120 -0
  423. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/VideoCard.vue +169 -0
  424. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/config/options.ts +11 -0
  425. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/Model.vue +57 -0
  426. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/config/options.ts +10 -0
  427. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +82 -0
  428. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/config/options.ts +14 -0
  429. package/components/common/vm/actions/add/customizeHardware/vmoptions/Vmoptions.vue +141 -0
  430. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/BootOptions.vue +110 -0
  431. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Menu.vue +45 -0
  432. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Secure.vue +45 -0
  433. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +50 -0
  434. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/config/config.ts +14 -0
  435. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +83 -0
  436. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/config/config.ts +11 -0
  437. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/Order.vue +195 -0
  438. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/models/interfaces.ts +8 -0
  439. package/components/common/vm/actions/add/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +114 -0
  440. package/components/common/vm/actions/add/customizeHardware/vmoptions/models/interfaces.ts +34 -0
  441. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +45 -0
  442. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FileTransfer.vue +49 -0
  443. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FolderSharing.vue +50 -0
  444. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +49 -0
  445. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PowerControl.vue +49 -0
  446. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +226 -0
  447. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +82 -0
  448. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/config/config.ts +14 -0
  449. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +82 -0
  450. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/config/config.ts +12 -0
  451. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +50 -0
  452. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/config/config.ts +6 -0
  453. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +52 -0
  454. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/config/config.ts +11 -0
  455. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +134 -0
  456. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/models/interfaces.ts +5 -0
  457. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/utils.ts +12 -0
  458. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/SharePolicy.vue +52 -0
  459. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/config/config.ts +11 -0
  460. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +82 -0
  461. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/config/config.ts +12 -0
  462. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +82 -0
  463. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/config/config.ts +7 -0
  464. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +56 -0
  465. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/config/config.ts +14 -0
  466. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +82 -0
  467. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/config/config.ts +12 -0
  468. package/components/common/vm/actions/add/customizeHardware/vmoptions/tools/Tools.vue +63 -0
  469. package/components/common/vm/actions/add/models/enums.ts +89 -0
  470. package/components/common/vm/actions/add/models/interfaces.ts +125 -0
  471. package/components/common/vm/actions/add/models/types.ts +63 -0
  472. package/components/common/vm/actions/add/readyToComplete/ReadyToComplete.vue +15 -0
  473. package/components/common/vm/actions/add/select/compatibility/Compatibility.vue +151 -0
  474. package/components/common/vm/actions/add/select/computeResource/ComputeResource.spec.ts +479 -0
  475. package/components/common/vm/actions/add/select/computeResource/ComputeResource.vue +158 -0
  476. package/components/common/vm/actions/add/select/computeResource/TreeView.vue +126 -0
  477. package/components/common/vm/actions/add/select/createType/CreateType.vue +61 -0
  478. package/components/common/vm/actions/add/select/createType/config/items.ts +26 -0
  479. package/components/common/vm/actions/add/select/models/interfaces.ts +32 -0
  480. package/components/common/vm/actions/add/select/models/types.ts +44 -0
  481. package/components/common/vm/actions/add/select/name/Name.vue +163 -0
  482. package/components/common/vm/actions/add/select/os/os.vue +221 -0
  483. package/components/common/vm/actions/add/select/storage/Storage.vue +176 -0
  484. package/components/common/vm/actions/add/select/storage/config/config.ts +148 -0
  485. package/components/common/vm/actions/add/select/storage/models/types.ts +15 -0
  486. package/components/common/vm/actions/add/utils.ts +118 -0
  487. package/components/common/vm/actions/editSettings/EditSettings.vue +312 -0
  488. package/components/common/vm/actions/editSettings/models/types.ts +23 -0
  489. package/components/common/vm/actions/editSettings/utils.ts +48 -0
  490. package/components/common/vm/actions/models/interfaces.ts +6 -0
  491. package/components/common/vm/actions/models/types.ts +11 -0
  492. package/components/common/vm/actions/utils.ts +221 -0
  493. package/components/common/wizards/datastore/add/Add.vue +382 -0
  494. package/components/common/wizards/datastore/add/config/stepItems.ts +160 -0
  495. package/components/common/wizards/datastore/add/local/Local.vue +67 -0
  496. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +159 -0
  497. package/components/common/wizards/datastore/add/local/createName/config/defaultForm.ts +15 -0
  498. package/components/common/wizards/datastore/add/models/interfaces.ts +35 -0
  499. package/components/common/wizards/datastore/add/models/types.ts +14 -0
  500. package/components/common/wizards/datastore/add/nfs/Nfs.vue +91 -0
  501. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +95 -0
  502. package/components/common/wizards/datastore/add/nfs/accessibility/config/tabsPannel.ts +24 -0
  503. package/components/common/wizards/datastore/add/nfs/accessibility/models/interfaces.ts +9 -0
  504. package/components/common/wizards/datastore/add/nfs/accessibility/models/types.ts +5 -0
  505. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +141 -0
  506. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/compatibleTable.ts +54 -0
  507. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/hostsTableItems.ts +75 -0
  508. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/incompatibleTable.ts +68 -0
  509. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/tableKeys.ts +15 -0
  510. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +373 -0
  511. package/components/common/wizards/datastore/add/nfs/configuration/config/defaultForm.ts +33 -0
  512. package/components/common/wizards/datastore/add/nfs/configuration/models/interfaces.ts +12 -0
  513. package/components/common/wizards/datastore/add/nfs/configuration/serversList/DeletePopover.vue +97 -0
  514. package/components/common/wizards/datastore/add/nfs/configuration/serversList/ServersList.vue +123 -0
  515. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/serversListConfig.ts +41 -0
  516. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/tableKeys.ts +3 -0
  517. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/interfaces.ts +11 -0
  518. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/types.ts +1 -0
  519. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -0
  520. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/config/radioOptions.ts +24 -0
  521. package/components/common/wizards/datastore/add/nfs/version/Version.vue +70 -0
  522. package/components/common/wizards/datastore/add/nfs/version/config/versionOptions.ts +20 -0
  523. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +77 -0
  524. package/components/common/wizards/datastore/add/readyComplete/config/propertiesDetails.ts +165 -0
  525. package/components/common/wizards/datastore/add/readyComplete/models/interfaces.ts +4 -0
  526. package/components/common/wizards/datastore/add/sharedStorm/SharedStorm.vue +85 -0
  527. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +447 -0
  528. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/defaultForm.ts +18 -0
  529. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/selectOptions.ts +14 -0
  530. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/HostTable.vue +131 -0
  531. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/hostsTable.ts +87 -0
  532. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/tableKeys.ts +11 -0
  533. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/interfaces.ts +55 -0
  534. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/types.ts +14 -0
  535. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +230 -0
  536. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/config/selectOptions.ts +46 -0
  537. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/graphicTooltip/graphicTooltip.vue +64 -0
  538. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/sizeGraphic/sizeGraphic.vue +225 -0
  539. package/components/common/wizards/datastore/add/sharedStorm/version/Version.vue +70 -0
  540. package/components/common/wizards/datastore/add/sharedStorm/version/config/versionOptions.ts +19 -0
  541. package/components/common/wizards/datastore/add/types/Types.vue +79 -0
  542. package/components/common/wizards/datastore/add/types/config/typeOptions.ts +31 -0
  543. package/components/common/wizards/datastore/add/utils.ts +69 -0
  544. package/components/models/interfaces.ts +14 -0
  545. package/composables/deepCopy.ts +21 -0
  546. package/composables/useDiff.ts +15 -0
  547. package/composables/useLocal.ts +36 -0
  548. package/composables/useLocalStorage.ts +45 -0
  549. package/composables/useThrottle.ts +32 -0
  550. package/composables/useUniqueId.ts +5 -0
  551. package/config/regExp.ts +13 -0
  552. package/eslint/index.js +15 -0
  553. package/eslint/no-import-type.js +17 -0
  554. package/eslint/no-invalid-type-prefix.js +32 -0
  555. package/minify.js +51 -0
  556. package/models/composables/useMyFetch/interfaces.ts +4 -0
  557. package/models/composables/useMyFetch/types.ts +1 -0
  558. package/models/enums.ts +21 -0
  559. package/models/interfaces.ts +29 -0
  560. package/models/plugins/date/interfaces.ts +5 -0
  561. package/models/plugins/date/types.ts +1 -0
  562. package/models/plugins/validation/interfaces.ts +21 -0
  563. package/models/plugins/validation/types.ts +1 -0
  564. package/models/store/host/interfaces.ts +38 -0
  565. package/models/store/interfaces.ts +47 -0
  566. package/models/store/network/interfaces.ts +13 -0
  567. package/models/store/storage/interfaces.ts +32 -0
  568. package/models/store/vm/interfaces.ts +87 -0
  569. package/models/types.ts +6 -0
  570. package/nuxt.config.ts +8 -0
  571. package/package.json +39 -0
  572. package/plugins/binary.ts +122 -0
  573. package/plugins/date.ts +179 -0
  574. package/plugins/recursion.ts +199 -0
  575. package/plugins/spice-console/spice.console.ts +128 -0
  576. package/plugins/text.ts +48 -0
  577. package/plugins/validation.ts +172 -0
  578. package/public/favicon.ico +0 -0
  579. package/public/spice-console/application/WorkerProcess.js +3350 -0
  580. package/public/spice-console/application/WorkerProcess_back.js +3144 -0
  581. package/public/spice-console/application/WorkerProcess_meta.js +3103 -0
  582. package/public/spice-console/application/WorkerProcess_reverse.js +3214 -0
  583. package/public/spice-console/application/agent.js +175 -0
  584. package/public/spice-console/application/application.js +641 -0
  585. package/public/spice-console/application/checkActivity.js +50 -0
  586. package/public/spice-console/application/clientgui.js +842 -0
  587. package/public/spice-console/application/clipboard/clipboarddataparser.js +92 -0
  588. package/public/spice-console/application/clipboard/local/localClipboard.js +110 -0
  589. package/public/spice-console/application/clipboard.js +82 -0
  590. package/public/spice-console/application/codec.js +257 -0
  591. package/public/spice-console/application/imagecache.js +81 -0
  592. package/public/spice-console/application/inputmanager.js +270 -0
  593. package/public/spice-console/application/packetfactory.js +202 -0
  594. package/public/spice-console/application/packetfilter.js +103 -0
  595. package/public/spice-console/application/packetprocess.js +75 -0
  596. package/public/spice-console/application/rasteroperation.js +118 -0
  597. package/public/spice-console/application/spiceconnection.js +197 -0
  598. package/public/spice-console/application/stream.js +67 -0
  599. package/public/spice-console/application/virtualmouse.js +109 -0
  600. package/public/spice-console/keymaps/keyevent.js +36 -0
  601. package/public/spice-console/keymaps/keymap.js +229 -0
  602. package/public/spice-console/keymaps/keymapes.js +375 -0
  603. package/public/spice-console/keymaps/keymapesObj.js +317 -0
  604. package/public/spice-console/keymaps/keymapus.js +317 -0
  605. package/public/spice-console/keymaps/scanCodeObjModifier.js +65 -0
  606. package/public/spice-console/keymaps/scanCodeObjProvider.js +60 -0
  607. package/public/spice-console/lib/AsyncConsumer.js +204 -0
  608. package/public/spice-console/lib/AsyncWorker.js +60 -0
  609. package/public/spice-console/lib/CollisionDetector.js +27 -0
  610. package/public/spice-console/lib/DataLogger.js +197 -0
  611. package/public/spice-console/lib/GenericObjectPool.js +152 -0
  612. package/public/spice-console/lib/GlobalPool.js +114 -0
  613. package/public/spice-console/lib/ImageUncompressor.js +138 -0
  614. package/public/spice-console/lib/IntegrationBenchmark.js +64 -0
  615. package/public/spice-console/lib/PacketWorkerIdentifier.js +107 -0
  616. package/public/spice-console/lib/SyncAsyncHandler.js +46 -0
  617. package/public/spice-console/lib/base64.js +298 -0
  618. package/public/spice-console/lib/biginteger.js +1640 -0
  619. package/public/spice-console/lib/bowser.js +276 -0
  620. package/public/spice-console/lib/decoder/dixie.js +7930 -0
  621. package/public/spice-console/lib/decoder/jmuxer.js +2815 -0
  622. package/public/spice-console/lib/displayRouter.js +83 -0
  623. package/public/spice-console/lib/encrypt.js +191 -0
  624. package/public/spice-console/lib/flipper.js +39 -0
  625. package/public/spice-console/lib/graphic.js +1230 -0
  626. package/public/spice-console/lib/graphicdebug.js +223 -0
  627. package/public/spice-console/lib/images/bitmap.js +194 -0
  628. package/public/spice-console/lib/images/jsquic_family.js +84 -0
  629. package/public/spice-console/lib/images/jsquic_rgba.js +343 -0
  630. package/public/spice-console/lib/images/jsquic_uncompress.js +530 -0
  631. package/public/spice-console/lib/images/lz.js +717 -0
  632. package/public/spice-console/lib/images/png.js +275 -0
  633. package/public/spice-console/lib/jgestures.min.js +44 -0
  634. package/public/spice-console/lib/jquery-2.0.3.js +8829 -0
  635. package/public/spice-console/lib/jquery-mousewheel.js +84 -0
  636. package/public/spice-console/lib/jquery-visibility.min.js +2 -0
  637. package/public/spice-console/lib/jsbn.js +578 -0
  638. package/public/spice-console/lib/jsbn2.js +675 -0
  639. package/public/spice-console/lib/lodash.4.0.0.min.js +136 -0
  640. package/public/spice-console/lib/modernizr.js +39 -0
  641. package/public/spice-console/lib/pixastic.js +3244 -0
  642. package/public/spice-console/lib/prettyprint.js +794 -0
  643. package/public/spice-console/lib/prng4.js +64 -0
  644. package/public/spice-console/lib/queue.js +259 -0
  645. package/public/spice-console/lib/rasterEngine.js +907 -0
  646. package/public/spice-console/lib/rng.js +87 -0
  647. package/public/spice-console/lib/runqueue.js +103 -0
  648. package/public/spice-console/lib/sha1.js +124 -0
  649. package/public/spice-console/lib/stuckkeyshandler.js +122 -0
  650. package/public/spice-console/lib/timelapsedetector.js +62 -0
  651. package/public/spice-console/lib/utils.js +327 -0
  652. package/public/spice-console/lib/virtualjoystick.js +370 -0
  653. package/public/spice-console/network/busconnection.js +195 -0
  654. package/public/spice-console/network/clusternodechooser.js +49 -0
  655. package/public/spice-console/network/connectioncontrol.js +60 -0
  656. package/public/spice-console/network/packetcontroller.js +62 -0
  657. package/public/spice-console/network/packetextractor.js +73 -0
  658. package/public/spice-console/network/packetlinkfactory.js +64 -0
  659. package/public/spice-console/network/packetreassembler.js +77 -0
  660. package/public/spice-console/network/reassemblerfactory.js +39 -0
  661. package/public/spice-console/network/sizedefiner.js +86 -0
  662. package/public/spice-console/network/socket.js +120 -0
  663. package/public/spice-console/network/socketqueue.js +95 -0
  664. package/public/spice-console/network/spicechannel.js +310 -0
  665. package/public/spice-console/network/websocketwrapper.js +75 -0
  666. package/public/spice-console/process/busprocess.js +309 -0
  667. package/public/spice-console/process/cursorprocess.js +110 -0
  668. package/public/spice-console/process/displaypreprocess.js +152 -0
  669. package/public/spice-console/process/displayprocess.js +210 -0
  670. package/public/spice-console/process/inputprocess.js +204 -0
  671. package/public/spice-console/process/mainprocess.js +78 -0
  672. package/public/spice-console/process/playbackprocess.js +233 -0
  673. package/public/spice-console/resources/magnifier.png +0 -0
  674. package/public/spice-console/resources/mouse.png +0 -0
  675. package/public/spice-console/resources/mouse_cursor.gif +0 -0
  676. package/public/spice-console/resources/mouse_cursor.png +0 -0
  677. package/public/spice-console/run.js +181 -0
  678. package/public/spice-console/spiceobjects/generated/protocol.js +537 -0
  679. package/public/spice-console/spiceobjects/spiceobjects.js +3474 -0
  680. package/public/spice-console/swcanvas/swcanvas.js +82 -0
  681. package/public/spice-console/tools/generate.php +269 -0
  682. package/public/spice-console/tools/generateKeyboardLayout.php +63 -0
  683. package/public/spice-console/tools/generateSpiceObject.php +81 -0
  684. package/public/spice-console-minify/application/WorkerProcess.min.js +1 -0
  685. package/public/spice-console-minify/application/WorkerProcess_back.min.js +1 -0
  686. package/public/spice-console-minify/application/WorkerProcess_meta.min.js +1 -0
  687. package/public/spice-console-minify/application/WorkerProcess_reverse.min.js +1 -0
  688. package/public/spice-console-minify/application/agent.min.js +1 -0
  689. package/public/spice-console-minify/application/application.min.js +1 -0
  690. package/public/spice-console-minify/application/checkActivity.min.js +1 -0
  691. package/public/spice-console-minify/application/clientgui.min.js +1 -0
  692. package/public/spice-console-minify/application/clipboard/clipboarddataparser.min.js +1 -0
  693. package/public/spice-console-minify/application/clipboard/local/localClipboard.min.js +1 -0
  694. package/public/spice-console-minify/application/clipboard.min.js +1 -0
  695. package/public/spice-console-minify/application/codec.min.js +1 -0
  696. package/public/spice-console-minify/application/imagecache.min.js +1 -0
  697. package/public/spice-console-minify/application/inputmanager.min.js +1 -0
  698. package/public/spice-console-minify/application/packetfactory.min.js +1 -0
  699. package/public/spice-console-minify/application/packetfilter.min.js +1 -0
  700. package/public/spice-console-minify/application/packetprocess.min.js +1 -0
  701. package/public/spice-console-minify/application/rasteroperation.min.js +1 -0
  702. package/public/spice-console-minify/application/spiceconnection.min.js +1 -0
  703. package/public/spice-console-minify/application/stream.min.js +1 -0
  704. package/public/spice-console-minify/application/virtualmouse.min.js +1 -0
  705. package/public/spice-console-minify/keymaps/keyevent.min.js +1 -0
  706. package/public/spice-console-minify/keymaps/keymap.min.js +1 -0
  707. package/public/spice-console-minify/keymaps/keymapes.min.js +1 -0
  708. package/public/spice-console-minify/keymaps/keymapesObj.min.js +1 -0
  709. package/public/spice-console-minify/keymaps/keymapus.min.js +1 -0
  710. package/public/spice-console-minify/keymaps/scanCodeObjModifier.min.js +1 -0
  711. package/public/spice-console-minify/keymaps/scanCodeObjProvider.min.js +1 -0
  712. package/public/spice-console-minify/lib/AsyncConsumer.min.js +1 -0
  713. package/public/spice-console-minify/lib/AsyncWorker.min.js +1 -0
  714. package/public/spice-console-minify/lib/CollisionDetector.min.js +1 -0
  715. package/public/spice-console-minify/lib/DataLogger.min.js +1 -0
  716. package/public/spice-console-minify/lib/GenericObjectPool.min.js +1 -0
  717. package/public/spice-console-minify/lib/GlobalPool.min.js +1 -0
  718. package/public/spice-console-minify/lib/ImageUncompressor.min.js +1 -0
  719. package/public/spice-console-minify/lib/IntegrationBenchmark.min.js +1 -0
  720. package/public/spice-console-minify/lib/PacketWorkerIdentifier.min.js +1 -0
  721. package/public/spice-console-minify/lib/SyncAsyncHandler.min.js +1 -0
  722. package/public/spice-console-minify/lib/base64.min.js +1 -0
  723. package/public/spice-console-minify/lib/biginteger.min.js +1 -0
  724. package/public/spice-console-minify/lib/bowser.min.js +1 -0
  725. package/public/spice-console-minify/lib/decoder/dixie.min.js +5 -0
  726. package/public/spice-console-minify/lib/decoder/jmuxer.min.js +1 -0
  727. package/public/spice-console-minify/lib/displayRouter.min.js +1 -0
  728. package/public/spice-console-minify/lib/encrypt.min.js +1 -0
  729. package/public/spice-console-minify/lib/flipper.min.js +1 -0
  730. package/public/spice-console-minify/lib/graphic.min.js +1 -0
  731. package/public/spice-console-minify/lib/graphicdebug.min.js +1 -0
  732. package/public/spice-console-minify/lib/images/bitmap.min.js +1 -0
  733. package/public/spice-console-minify/lib/images/jsquic_family.min.js +1 -0
  734. package/public/spice-console-minify/lib/images/jsquic_rgba.min.js +1 -0
  735. package/public/spice-console-minify/lib/images/jsquic_uncompress.min.js +1 -0
  736. package/public/spice-console-minify/lib/images/lz.min.js +1 -0
  737. package/public/spice-console-minify/lib/images/png.min.js +1 -0
  738. package/public/spice-console-minify/lib/jgestures.min.js +25 -0
  739. package/public/spice-console-minify/lib/jquery-2.0.3.min.js +25 -0
  740. package/public/spice-console-minify/lib/jquery-mousewheel.min.js +12 -0
  741. package/public/spice-console-minify/lib/jquery-visibility.min.js +2 -0
  742. package/public/spice-console-minify/lib/jsbn.min.js +1 -0
  743. package/public/spice-console-minify/lib/jsbn2.min.js +1 -0
  744. package/public/spice-console-minify/lib/lodash.4.0.0.min.js +6 -0
  745. package/public/spice-console-minify/lib/modernizr.min.js +1 -0
  746. package/public/spice-console-minify/lib/pixastic.min.js +1 -0
  747. package/public/spice-console-minify/lib/prettyprint.min.js +1 -0
  748. package/public/spice-console-minify/lib/prng4.min.js +1 -0
  749. package/public/spice-console-minify/lib/queue.min.js +1 -0
  750. package/public/spice-console-minify/lib/rasterEngine.min.js +1 -0
  751. package/public/spice-console-minify/lib/rng.min.js +1 -0
  752. package/public/spice-console-minify/lib/runqueue.min.js +1 -0
  753. package/public/spice-console-minify/lib/sha1.min.js +1 -0
  754. package/public/spice-console-minify/lib/stuckkeyshandler.min.js +1 -0
  755. package/public/spice-console-minify/lib/timelapsedetector.min.js +1 -0
  756. package/public/spice-console-minify/lib/utils.min.js +1 -0
  757. package/public/spice-console-minify/lib/virtualjoystick.min.js +1 -0
  758. package/public/spice-console-minify/network/busconnection.min.js +1 -0
  759. package/public/spice-console-minify/network/clusternodechooser.min.js +1 -0
  760. package/public/spice-console-minify/network/connectioncontrol.min.js +1 -0
  761. package/public/spice-console-minify/network/packetcontroller.min.js +1 -0
  762. package/public/spice-console-minify/network/packetextractor.min.js +1 -0
  763. package/public/spice-console-minify/network/packetlinkfactory.min.js +1 -0
  764. package/public/spice-console-minify/network/packetreassembler.min.js +1 -0
  765. package/public/spice-console-minify/network/reassemblerfactory.min.js +1 -0
  766. package/public/spice-console-minify/network/sizedefiner.min.js +1 -0
  767. package/public/spice-console-minify/network/socket.min.js +1 -0
  768. package/public/spice-console-minify/network/socketqueue.min.js +1 -0
  769. package/public/spice-console-minify/network/spicechannel.min.js +1 -0
  770. package/public/spice-console-minify/network/websocketwrapper.min.js +1 -0
  771. package/public/spice-console-minify/process/busprocess.min.js +1 -0
  772. package/public/spice-console-minify/process/cursorprocess.min.js +1 -0
  773. package/public/spice-console-minify/process/displaypreprocess.min.js +1 -0
  774. package/public/spice-console-minify/process/displayprocess.min.js +1 -0
  775. package/public/spice-console-minify/process/inputprocess.min.js +1 -0
  776. package/public/spice-console-minify/process/mainprocess.min.js +1 -0
  777. package/public/spice-console-minify/process/playbackprocess.min.js +1 -0
  778. package/public/spice-console-minify/run.min.js +1 -0
  779. package/public/spice-console-minify/spiceobjects/generated/protocol.min.js +1 -0
  780. package/public/spice-console-minify/spiceobjects/spiceobjects.min.js +1 -0
  781. package/public/spice-console-minify/swcanvas/swcanvas.min.js +1 -0
  782. package/tsconfig.json +4 -0
@@ -0,0 +1,3214 @@
1
+ /*
2
+ Copyright (c) 2016 eyeOS
3
+
4
+ This file is part of Open365.
5
+
6
+ Open365 is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Affero General Public License as
8
+ published by the Free Software Foundation, either version 3 of the
9
+ License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Affero General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Affero General Public License
17
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ */
19
+
20
+ //Sandboxed script without access to other external functions, objects or anything.
21
+ //used for webworkers.
22
+ //includes: quic and lz_rgb
23
+
24
+ window = this;
25
+ if (!window['wdi']) {
26
+ window['wdi'] = {};
27
+ }
28
+
29
+ window['wdi'].WorkerOperations = {
30
+ quic: 0,
31
+ lz_rgb: 1,
32
+ bytesToUriJpeg: 2,
33
+ bytesToUriPng: 3
34
+ };
35
+
36
+ function dispatch(arr, useMessage) {
37
+
38
+ var u8 = new Uint8Array(arr);
39
+ var postMessageW3CCompilant = u8[3];
40
+
41
+
42
+ var result = null;
43
+ var operation = u8[0];
44
+
45
+ if (operation === wdi.WorkerOperations.quic) {
46
+ try {
47
+ result = wdi.JSQuic.quic_decode(arr);
48
+ } catch (e) {
49
+
50
+ }
51
+ } else if (operation === wdi.WorkerOperations.lz_rgb) { //lz?
52
+ try {
53
+ result = wdi.LZSS.lz_rgb32_decompress_rgb(arr);
54
+ } catch (e) {
55
+
56
+ }
57
+ } else if (operation === wdi.WorkerOperations.bytesToUriJpeg) {
58
+ try {
59
+ result = bytesToURI(u8, 'jpeg');
60
+ self.postMessage(result);
61
+ return; //string is not transferable!
62
+ } catch (e) {
63
+
64
+ }
65
+ } else if (operation === wdi.WorkerOperations.bytesToUriPng) {
66
+ try {
67
+ result = bytesToURI(u8, 'png');
68
+ self.postMessage(result);
69
+ return; //string is not transferable!
70
+ } catch (e) {
71
+
72
+ }
73
+ }
74
+ if (useMessage && result) {
75
+
76
+ if (postMessageW3CCompilant) {
77
+ self.postMessage(result, [result]);
78
+ } else {
79
+ self.postMessage(result);
80
+ }
81
+
82
+ } else {
83
+ return result;
84
+ }
85
+
86
+ }
87
+
88
+ window['workerDispatch'] = dispatch;
89
+
90
+ self.addEventListener('message', function(e) {
91
+ return dispatch(e.data, true);
92
+ }, false);
93
+
94
+
95
+
96
+ //bytes to uri
97
+ function bytesToURI(data, type) {
98
+ var tmpstr = 'data:image/'+type+',';
99
+ var len = data.length;
100
+ for (var i = 4; i < len; i++) {
101
+ if (data[i] < 16) {
102
+ tmpstr += '%0';
103
+ } else {
104
+ tmpstr += '%';
105
+ }
106
+ tmpstr += data[i].toString(16);
107
+ }
108
+
109
+ return tmpstr;
110
+ }
111
+
112
+
113
+ //quic
114
+
115
+
116
+ wdi.QuicImageType = {
117
+ QUIC_IMAGE_TYPE_INVALID: 0,
118
+ QUIC_IMAGE_TYPE_GRAY: 1,
119
+ QUIC_IMAGE_TYPE_RGB16: 2,
120
+ QUIC_IMAGE_TYPE_RGB24: 3,
121
+ QUIC_IMAGE_TYPE_RGB32: 4,
122
+ QUIC_IMAGE_TYPE_RGBA: 5
123
+ };
124
+
125
+ function bytesToInt16(bytes) {
126
+ var low = bytes.shift();
127
+ var high = bytes.shift();
128
+
129
+ return high * Math.pow(16, 2) + low;
130
+ }
131
+
132
+ function bytesToInt32(bytes) {
133
+ var low = bytesToInt16(bytes);
134
+ var high = bytesToInt16(bytes);
135
+
136
+ return high * Math.pow(16, 4) + low;
137
+ }
138
+
139
+ wdi.quic = {};
140
+
141
+ function wdi_quic_QuicFamily() {
142
+ this.notGRcwlen = [];
143
+ this.nGRcodewords = [];
144
+ this.notGRprefixmask = [];
145
+ this.notGRsuffixlen = [];
146
+ this.xlatU2L = [];
147
+ this.xlatL2U = [];
148
+ }
149
+
150
+ function wdi_quic_s_bucket() {
151
+ this.pcounters = null;
152
+ this.bestcode = 0;
153
+ }
154
+
155
+ function wdi_quic_CommonState() {
156
+ this.wm_trigger = this;
157
+ this.encoder = null;
158
+ this.waitcnt = 0;
159
+ this.tabrand_seed = wdi.JSQuic.stabrand();
160
+ this.wmidx = wdi.JSQuic.DEFwmistart;
161
+ this.wmileft = wdi.JSQuic.wminext;
162
+ wdi.JSQuic.set_wm_trigger(this);
163
+
164
+
165
+ this.melcstate = 0;
166
+ this.melclen = wdi.JSQuic.J[0];
167
+ this.melcorder = (1 << this.melclen) >>> 0;
168
+ }
169
+
170
+
171
+ function wdi_quic_FamilyStat() {
172
+ this.buckets_buf = null;
173
+ this.buckets_ptrs = null;
174
+ this.counters = 0;
175
+ }
176
+
177
+ function wdi_quic_Channel() {
178
+ this.encoder = null;
179
+ this.correlate_row_width = 0;
180
+ this.correlate_row = null;
181
+
182
+ this._buckets_ptrs = null;
183
+
184
+ this.family_stat_8bpc = new wdi_quic_FamilyStat();
185
+ this.family_stat_5bpc = new wdi_quic_FamilyStat();
186
+
187
+ this.state = new wdi_quic_CommonState();
188
+ this.oldFirst = 0;
189
+ }
190
+
191
+ wdi.JSQuic = {
192
+ QUIC_MAGIC: 1364543811, //"QUIC"
193
+ MAXNUMCODES: 8,
194
+
195
+ DEFevol: 3,
196
+ MINevol: 0,
197
+ MAXevol: 5,
198
+
199
+ DEFwmistart: 0,
200
+ MINwmistart: 0,
201
+
202
+ DEFmaxclen: 26,
203
+
204
+ DEFwmimax: 6,
205
+
206
+ DEFwminext: 2048,
207
+ MINwminext: 1,
208
+ MAXwminext: 100000000,
209
+ MAX_CHANNELS: 4,
210
+
211
+ wmimax: 6,
212
+
213
+ wminext: 2048,
214
+
215
+ evol: 3,
216
+ family_8bpc: new wdi_quic_QuicFamily(),
217
+ family_5bpc: new wdi_quic_QuicFamily(),
218
+
219
+ bppmask: new Int32Array([
220
+ 0x00000000,
221
+ 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
222
+ 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
223
+ 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
224
+ 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
225
+ 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
226
+ 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
227
+ 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
228
+ 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff
229
+ ]),
230
+
231
+ bitat: new Int32Array([
232
+ 0x00000001, 0x00000002, 0x00000004, 0x00000008,
233
+ 0x00000010, 0x00000020, 0x00000040, 0x00000080,
234
+ 0x00000100, 0x00000200, 0x00000400, 0x00000800,
235
+ 0x00001000, 0x00002000, 0x00004000, 0x00008000,
236
+ 0x00010000, 0x00020000, 0x00040000, 0x00080000,
237
+ 0x00100000, 0x00200000, 0x00400000, 0x00800000,
238
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000,
239
+ 0x10000000, 0x20000000, 0x40000000, 0x80000000
240
+ ]),
241
+
242
+ TABRAND_TABSIZE: 256,
243
+ TABRAND_SEEDMASK: 0x0ff,
244
+
245
+ tabrand_chaos: new Int32Array([
246
+ 0x02c57542, 0x35427717, 0x2f5a2153, 0x9244f155, 0x7bd26d07, 0x354c6052, 0x57329b28, 0x2993868e,
247
+ 0x6cd8808c, 0x147b46e0, 0x99db66af, 0xe32b4cac, 0x1b671264, 0x9d433486, 0x62a4c192, 0x06089a4b,
248
+ 0x9e3dce44, 0xdaabee13, 0x222425ea, 0xa46f331d, 0xcd589250, 0x8bb81d7f, 0xc8b736b9, 0x35948d33,
249
+ 0xd7ac7fd0, 0x5fbe2803, 0x2cfbc105, 0x013dbc4e, 0x7a37820f, 0x39f88e9e, 0xedd58794, 0xc5076689,
250
+ 0xfcada5a4, 0x64c2f46d, 0xb3ba3243, 0x8974b4f9, 0x5a05aebd, 0x20afcd00, 0x39e2b008, 0x88a18a45,
251
+ 0x600bde29, 0xf3971ace, 0xf37b0a6b, 0x7041495b, 0x70b707ab, 0x06beffbb, 0x4206051f, 0xe13c4ee3,
252
+ 0xc1a78327, 0x91aa067c, 0x8295f72a, 0x732917a6, 0x1d871b4d, 0x4048f136, 0xf1840e7e, 0x6a6048c1,
253
+ 0x696cb71a, 0x7ff501c3, 0x0fc6310b, 0x57e0f83d, 0x8cc26e74, 0x11a525a2, 0x946934c7, 0x7cd888f0,
254
+ 0x8f9d8604, 0x4f86e73b, 0x04520316, 0xdeeea20c, 0xf1def496, 0x67687288, 0xf540c5b2, 0x22401484,
255
+ 0x3478658a, 0xc2385746, 0x01979c2c, 0x5dad73c8, 0x0321f58b, 0xf0fedbee, 0x92826ddf, 0x284bec73,
256
+ 0x5b1a1975, 0x03df1e11, 0x20963e01, 0xa17cf12b, 0x740d776e, 0xa7a6bf3c, 0x01b5cce4, 0x1118aa76,
257
+ 0xfc6fac0a, 0xce927e9b, 0x00bf2567, 0x806f216c, 0xbca69056, 0x795bd3e9, 0xc9dc4557, 0x8929b6c2,
258
+ 0x789d52ec, 0x3f3fbf40, 0xb9197368, 0xa38c15b5, 0xc3b44fa8, 0xca8333b0, 0xb7e8d590, 0xbe807feb,
259
+ 0xbf5f8360, 0xd99e2f5c, 0x372928e1, 0x7c757c4c, 0x0db5b154, 0xc01ede02, 0x1fc86e78, 0x1f3985be,
260
+ 0xb4805c77, 0x00c880fa, 0x974c1b12, 0x35ab0214, 0xb2dc840d, 0x5b00ae37, 0xd313b026, 0xb260969d,
261
+ 0x7f4c8879, 0x1734c4d3, 0x49068631, 0xb9f6a021, 0x6b863e6f, 0xcee5debf, 0x29f8c9fb, 0x53dd6880,
262
+ 0x72b61223, 0x1f67a9fd, 0x0a0f6993, 0x13e59119, 0x11cca12e, 0xfe6b6766, 0x16b6effc, 0x97918fc4,
263
+ 0xc2b8a563, 0x94f2f741, 0x0bfa8c9a, 0xd1537ae8, 0xc1da349c, 0x873c60ca, 0x95005b85, 0x9b5c080e,
264
+ 0xbc8abbd9, 0xe1eab1d2, 0x6dac9070, 0x4ea9ebf1, 0xe0cf30d4, 0x1ef5bd7b, 0xd161043e, 0x5d2fa2e2,
265
+ 0xff5d3cae, 0x86ed9f87, 0x2aa1daa1, 0xbd731a34, 0x9e8f4b22, 0xb1c2c67a, 0xc21758c9, 0xa182215d,
266
+ 0xccb01948, 0x8d168df7, 0x04238cfe, 0x368c3dbc, 0x0aeadca5, 0xbad21c24, 0x0a71fee5, 0x9fc5d872,
267
+ 0x54c152c6, 0xfc329483, 0x6783384a, 0xeddb3e1c, 0x65f90e30, 0x884ad098, 0xce81675a, 0x4b372f7d,
268
+ 0x68bf9a39, 0x43445f1e, 0x40f8d8cb, 0x90d5acb6, 0x4cd07282, 0x349eeb06, 0x0c9d5332, 0x520b24ef,
269
+ 0x80020447, 0x67976491, 0x2f931ca3, 0xfe9b0535, 0xfcd30220, 0x61a9e6cc, 0xa487d8d7, 0x3f7c5dd1,
270
+ 0x7d0127c5, 0x48f51d15, 0x60dea871, 0xc9a91cb7, 0x58b53bb3, 0x9d5e0b2d, 0x624a78b4, 0x30dbee1b,
271
+ 0x9bdf22e7, 0x1df5c299, 0x2d5643a7, 0xf4dd35ff, 0x03ca8fd6, 0x53b47ed8, 0x6f2c19aa, 0xfeb0c1f4,
272
+ 0x49e54438, 0x2f2577e6, 0xbf876969, 0x72440ea9, 0xfa0bafb8, 0x74f5b3a0, 0x7dd357cd, 0x89ce1358,
273
+ 0x6ef2cdda, 0x1e7767f3, 0xa6be9fdb, 0x4f5f88f8, 0xba994a3a, 0x08ca6b65, 0xe0893818, 0x9e00a16a,
274
+ 0xf42bfc8f, 0x9972eedc, 0x749c8b51, 0x32c05f5e, 0xd706805f, 0x6bfbb7cf, 0xd9210a10, 0x31a1db97,
275
+ 0x923a9559, 0x37a7a1f6, 0x059f8861, 0xca493e62, 0x65157e81, 0x8f6467dd, 0xab85ff9f, 0x9331aff2,
276
+ 0x8616b9f5, 0xedbd5695, 0xee7e29b1, 0x313ac44f, 0xb903112f, 0x432ef649, 0xdc0a36c0, 0x61cf2bba,
277
+ 0x81474925, 0xa8b6c7ad, 0xee5931de, 0xb2f8158d, 0x59fb7409, 0x2e3dfaed, 0x9af25a3f, 0xe1fed4d5
278
+ ]),
279
+
280
+ besttrigtab: [
281
+ [550, 900, 800, 700, 500, 350, 300, 200, 180, 180, 160],
282
+ [110, 550, 900, 800, 550, 400, 350, 250, 140, 160, 140],
283
+ [100, 120, 550, 900, 700, 500, 400, 300, 220, 250, 160]
284
+ ],
285
+
286
+ lzeroes: new Int32Array([
287
+ 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
288
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
289
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
290
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
291
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
292
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
294
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
295
+ ]),
296
+
297
+ J: new Int32Array([
298
+ 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7,
299
+ 7, 8, 9, 10, 11, 12, 13, 14, 15
300
+ ]),
301
+
302
+ zeroLUT: null,
303
+
304
+ BPC_MASK: {
305
+ 4: 0xff,
306
+ 5: 0xff,
307
+ 24: 0xff,
308
+ 16: 0x1f
309
+ },
310
+
311
+ stabrand: function() {
312
+ return this.TABRAND_SEEDMASK;
313
+ },
314
+
315
+ tabrand: function(rgb_state) {
316
+ rgb_state.tabrand_seed++;
317
+ return this.tabrand_chaos[rgb_state.tabrand_seed & this.TABRAND_SEEDMASK];
318
+ },
319
+
320
+ set_wm_trigger: function(state) {
321
+ var wm = state.wmidx;
322
+ if (wm > 10) {
323
+ wm = 10;
324
+ }
325
+
326
+ //>> 1 == / 2
327
+ state.wm_trigger = wdi.JSQuic.besttrigtab[Math.floor(wdi.JSQuic.evol >> 1)][wm];
328
+ },
329
+
330
+ ceil_log_2: function(val) {
331
+ var result;
332
+
333
+ if (val === 1) {
334
+ return 0;
335
+ }
336
+
337
+ result = 1;
338
+ val -= 1;
339
+ while ((val >>>= 1)) {
340
+ result++;
341
+ }
342
+
343
+ return result;
344
+ },
345
+
346
+ decorelate_init: function(family, bpc) {
347
+ var pixelbitmask = this.bppmask[bpc];
348
+ var pixelbitmaskshr = pixelbitmask >>> 1;
349
+ var s;
350
+
351
+ for (s = 0; s <= pixelbitmask; s++) {
352
+ if (s <= pixelbitmaskshr) {
353
+ family.xlatU2L[s] = (s << 1) >>> 0;
354
+ } else {
355
+ family.xlatU2L[s] = (((pixelbitmask - s) << 1) >>> 0) + 1;
356
+ }
357
+ }
358
+ },
359
+
360
+ corelate_init: function(family, bpc) {
361
+ var pixelbitmask = this.bppmask[bpc];
362
+ var s;
363
+
364
+ for (s = 0; s <= pixelbitmask; s++) {
365
+ if (s & 0x01) {
366
+ family.xlatL2U[s] = pixelbitmask - (s >>> 1);
367
+ } else {
368
+ family.xlatL2U[s] = (s >>> 1);
369
+ }
370
+ }
371
+ },
372
+
373
+ family_init: function(family, bpc, limit) {
374
+ var l;
375
+
376
+ for (l = 0; l < bpc; l++) {
377
+ var altprefixlen, altcodewords;
378
+
379
+ altprefixlen = limit - bpc;
380
+ if (altprefixlen > parseInt(this.bppmask[bpc - l])) {
381
+ altprefixlen = this.bppmask[bpc - l];
382
+ }
383
+
384
+ altcodewords = this.bppmask[bpc] + 1 - ((altprefixlen << l) >>> 0);
385
+
386
+ family.nGRcodewords[l] = ((altprefixlen << l) >>> 0);
387
+ family.notGRcwlen[l] = altprefixlen + this.ceil_log_2(altcodewords);
388
+ family.notGRprefixmask[l] = this.bppmask[32 - altprefixlen];
389
+ family.notGRsuffixlen[l] = this.ceil_log_2(altcodewords);
390
+ }
391
+
392
+ //this.decorelate_init(family, bpc);
393
+ this.corelate_init(family, bpc);
394
+ },
395
+
396
+ init_zeroLUT: function() {
397
+
398
+ this.zeroLUT = new Int32Array(256);
399
+
400
+ var i, j, k, l;
401
+
402
+ j = k = 1;
403
+ l = 8;
404
+ for (i = 0; i < 256; ++i) {
405
+ this.zeroLUT[i] = l;
406
+ --k;
407
+ if (k === 0) {
408
+ k = j;
409
+ --l;
410
+ j *= 2;
411
+ }
412
+ }
413
+ },
414
+
415
+ quic_init: function() {
416
+ this.family_init(this.family_8bpc, 8, this.DEFmaxclen);
417
+ //this.family_init(this.family_5bpc, 5, this.DEFmaxclen);
418
+ this.init_zeroLUT();
419
+
420
+ //perf improvment
421
+ wdi.xlatL2U = new Int32Array(this.family_8bpc.xlatL2U.length);
422
+ wdi.xlatL2U.set(this.family_8bpc.xlatL2U);
423
+
424
+ wdi.notGRprefixmask = new Int32Array(this.family_8bpc.notGRprefixmask.length);
425
+ wdi.notGRprefixmask.set(this.family_8bpc.notGRprefixmask);
426
+
427
+ wdi.nGRcodewords = new Int32Array(this.family_8bpc.nGRcodewords.length);
428
+ wdi.nGRcodewords.set(this.family_8bpc.nGRcodewords);
429
+
430
+
431
+ wdi.notGRcwlen = new Int32Array(this.family_8bpc.notGRcwlen.length);
432
+ wdi.notGRcwlen.set(this.family_8bpc.notGRcwlen);
433
+
434
+ wdi.notGRsuffixlen = new Int32Array(this.family_8bpc.notGRsuffixlen.length);
435
+ wdi.notGRsuffixlen.set(this.family_8bpc.notGRsuffixlen);
436
+
437
+
438
+ //prepare precomputed lzeroes tables
439
+ var lzeroes = wdi.JSQuic.lzeroes;
440
+ var lzeroes8 = new Int32Array(lzeroes);
441
+ var len = lzeroes.length;
442
+ for (var i = 0; i < len; i++) {
443
+ lzeroes8[i] = lzeroes[i] + 8;
444
+ }
445
+ wdi.JSQuic.lzeroes8 = lzeroes8;
446
+
447
+ //prepare precomputed lzeroes tables
448
+ var lzeroes16 = new Int32Array(lzeroes);
449
+ for (var i = 0; i < len; i++) {
450
+ lzeroes16[i] = lzeroes[i] + 16;
451
+ }
452
+ wdi.JSQuic.lzeroes16 = lzeroes16;
453
+
454
+ //prepare precomputed lzeroes tables
455
+ var lzeroes24 = new Int32Array(lzeroes);
456
+ for (var i = 0; i < len; i++) {
457
+ lzeroes24[i] = lzeroes[i] + 24;
458
+ }
459
+ wdi.JSQuic.lzeroes24 = lzeroes24;
460
+ },
461
+
462
+ quic_image_params: function(encoder, type) {
463
+ var channels, bpc;
464
+ switch (type) {
465
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_GRAY:
466
+ channels = 1;
467
+ bpc = 8;
468
+ break;
469
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB16:
470
+ channels = 3;
471
+ bpc = 5;
472
+ break;
473
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB24:
474
+ channels = 3;
475
+ bpc = 8;
476
+ break;
477
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB32:
478
+ channels = 3;
479
+ bpc = 8;
480
+ break;
481
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGBA:
482
+ channels = 4;
483
+ bpc = 8;
484
+ break;
485
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_INVALID:
486
+ default:
487
+ channels = 0;
488
+ bpc = 0;
489
+ }
490
+ return [channels, bpc];
491
+ },
492
+
493
+ find_model_params: function(encoder, bpc) {
494
+ var bsize = 0;
495
+ var bstart = 0;
496
+ var bend = 0;
497
+ var repcntr = 0;
498
+
499
+ var result = {};
500
+
501
+ result.ncounters = 8;
502
+
503
+ result.levels = 0x1 << bpc;
504
+
505
+ result.n_buckets_ptrs = 0;
506
+
507
+ switch (this.evol) {
508
+ case 1:
509
+ result.repfirst = 3;
510
+ result.firstsize = 1;
511
+ result.repnext = 2;
512
+ result.mulsize = 2;
513
+ break;
514
+ case 3:
515
+ result.repfirst = 1;
516
+ result.firstsize = 1;
517
+ result.repnext = 1;
518
+ result.mulsize = 2;
519
+ break;
520
+ case 5:
521
+ result.repfirst = 1;
522
+ result.firstsize = 1;
523
+ result.repnext = 1;
524
+ result.mulsize = 4;
525
+ break;
526
+ case 0:
527
+ case 2:
528
+ case 4:
529
+ default:
530
+ wdi.Debug.error('fund model params: invalid evol');
531
+ return false;
532
+ }
533
+
534
+ result.nbuckets = 0;
535
+ repcntr = result.repfirst + 1;
536
+ bsize = result.firstsize;
537
+
538
+ do { /* other buckets */
539
+ if (result.nbuckets) {
540
+ bstart = bend + 1;
541
+ } else {
542
+ bstart = 0;
543
+ }
544
+
545
+ if (!--repcntr) {
546
+ repcntr = result.repnext;
547
+ bsize *= result.mulsize;
548
+ }
549
+
550
+ bend = bstart + bsize - 1;
551
+ if (bend + bsize >= result.levels) {
552
+ bend = result.levels - 1;
553
+ }
554
+
555
+ if (!result.n_buckets_ptrs) {
556
+ result.n_buckets_ptrs = result.levels;
557
+ }
558
+
559
+ result.nbuckets++;
560
+ } while (bend < result.levels - 1);
561
+ return result;
562
+ },
563
+
564
+ init_model_structures: function(encoder, family, params) {
565
+ family.buckets_buf = [];
566
+ for (var i = 0; i < params.nbuckets; i++) {
567
+ family.buckets_buf[i] = new wdi_quic_s_bucket();
568
+ }
569
+ family.buckets_ptrs = [];
570
+ family.counters = [];
571
+ this.fill_model_structures(encoder, family, params);
572
+ },
573
+
574
+ fill_model_structures: function(encoder, family, params) {
575
+ var bsize, bstart, bend = 0,
576
+ repcntr, bnumber;
577
+
578
+ bnumber = 0;
579
+
580
+ repcntr = params.repfirst + 1;
581
+ bsize = params.firstsize;
582
+
583
+
584
+ do {
585
+ if (bnumber) {
586
+ bstart = bend + 1;
587
+ } else {
588
+ bstart = 0;
589
+ }
590
+
591
+ if (!--repcntr) {
592
+ repcntr = params.repnext;
593
+ bsize *= params.mulsize;
594
+ }
595
+
596
+ bend = bstart + bsize - 1;
597
+ if (bend + bsize >= params.levels) {
598
+ bend = params.levels - 1;
599
+ }
600
+
601
+ family.buckets_buf[bnumber].pcounters = new Int32Array(params.ncounters);
602
+ for (var x = 0; x < params.ncounters; x++) {
603
+ family.buckets_buf[bnumber].pcounters[x] = 0;
604
+ }
605
+
606
+ for (var i = bstart; i <= bend; i++) {
607
+ family.buckets_ptrs[i] = family.buckets_buf[bnumber];
608
+ }
609
+
610
+
611
+ bnumber++;
612
+ } while (bend < params.levels - 1);
613
+ },
614
+
615
+ initChannel: function(encoder, channel) {
616
+ channel.encoder = encoder;
617
+ channel.state.encoder = encoder;
618
+ channel.correlate_row_width = 0;
619
+ channel.correlate_row = null;
620
+
621
+ var params = this.find_model_params(encoder, 8);
622
+ encoder.n_buckets_8bpc = params.nbuckets;
623
+ this.init_model_structures(encoder, channel.family_stat_8bpc, params);
624
+
625
+ params = this.find_model_params(encoder, 5);
626
+ encoder.n_buckets_5bpc = params.nbuckets;
627
+ this.init_model_structures(encoder, channel.family_stat_5bpc, params);
628
+ },
629
+
630
+ encoder_reste_channels: function(encoder, channels, width, bpc) {
631
+ encoder.num_channels = channels;
632
+ for (var i = 0; i < channels; i++) {
633
+ var bucket, end_bucket;
634
+
635
+ if (encoder.channels[i].correlate_row_width < width) {
636
+ encoder.channels[i].correlate_row = new Array(width);
637
+ encoder.channels[i].correlate_row_width = width;
638
+ }
639
+ encoder.channels[i].num_channel = i;
640
+ if (bpc === 8) {
641
+ bucket = encoder.channels[i].family_stat_8bpc.buckets_buf;
642
+ end_bucket = encoder.n_buckets_8bpc;
643
+ for (var x = 0; x < end_bucket; x++) {
644
+ bucket[x].bestcode = 8 - 1;
645
+ }
646
+ encoder.channels[i]._buckets_ptrs = encoder.channels[i].family_stat_8bpc.buckets_ptrs;
647
+ } else if (bpc === 5) {
648
+ bucket = encoder.channels[i].family_stat_5bpc.buckets_buf;
649
+ end_bucket = encoder.n_buckets_5bpc;
650
+ for (var x = 0; x < end_bucket; x++) {
651
+ bucket[x].bestcode = /*BPC*/ 5 - 1;
652
+ }
653
+ encoder.channels[i]._buckets_ptrs = encoder.channels[i].family_stat_5bpc.buckets_ptrs;
654
+ } else {
655
+ return FALSE;
656
+ }
657
+
658
+ encoder.channels[i].state.waitcnt = 0;
659
+ encoder.channels[i].state.tabrand_seed = wdi.JSQuic.stabrand();
660
+ encoder.channels[i].state.wmidx = wdi.JSQuic.DEFwmistart;
661
+ encoder.channels[i].state.wmileft = wdi.JSQuic.wminext;
662
+ }
663
+ return true;
664
+ },
665
+
666
+ decode_channel_run: function(encoder, channel) {
667
+ var runlen = 0;
668
+
669
+ do {
670
+ var temp, hits;
671
+ //TODO: casting needed?
672
+ temp = wdi.JSQuic.zeroLUT[(~(encoder.io_word >>> 24) >>> 0) % 256];
673
+
674
+ for (hits = 1; hits <= temp; hits++) {
675
+ runlen += channel.state.melcorder;
676
+
677
+ if (channel.state.melcstate < 32) {
678
+ channel.state.melclen = wdi.JSQuic.J[++channel.state.melcstate];
679
+ channel.state.melcorder = (1 << channel.state.melclen) >>> 0;
680
+ }
681
+ }
682
+ if (temp !== 8) {
683
+ encoder.eatbits(temp + 1, encoder);
684
+ break;
685
+ }
686
+ encoder.eatbits(8, encoder);
687
+ } while (1);
688
+
689
+ /* read the length of the remainder */
690
+ if (channel.state.melclen) {
691
+ runlen += encoder.io_word >>> (32 - channel.state.melclen);
692
+ encoder.eatbits(channel.state.melclen, encoder);
693
+ }
694
+
695
+ /* adjust melcoder parameters */
696
+ if (channel.state.melcstate) {
697
+ channel.state.melclen = wdi.JSQuic.J[--channel.state.melcstate];
698
+ channel.state.melcorder = (1 << channel.state.melclen) >>> 0;
699
+ }
700
+
701
+ return runlen;
702
+ },
703
+
704
+ decode_run: function(encoder) {
705
+ var runlen = 0;
706
+ var temp, hits, tempadd;
707
+ var zeroLUT = wdi.JSQuic.zeroLUT;
708
+ var rgb_state = encoder.rgb_state;
709
+ var J = wdi.JSQuic.J;
710
+ var eatbits = encoder.eatbits;
711
+ do {
712
+
713
+ //TODO: casting needed?
714
+ temp = zeroLUT[(~(encoder.io_word >>> 24) >>> 0) % 256];
715
+ tempadd = temp + 1;
716
+ for (hits = 1; hits < tempadd; hits++) {
717
+ runlen += encoder.rgb_state.melcorder;
718
+
719
+ if (rgb_state.melcstate < 32) {
720
+ rgb_state.melclen = J[++rgb_state.melcstate];
721
+ rgb_state.melcorder = (1 << rgb_state.melclen) >>> 0;
722
+ }
723
+ }
724
+ if (temp !== 8) {
725
+ eatbits(tempadd, encoder);
726
+ break;
727
+ }
728
+ encoder.eatbits(8, encoder);
729
+ } while (1);
730
+
731
+ if (rgb_state.melclen) {
732
+ runlen += encoder.io_word >>> (32 - rgb_state.melclen);
733
+ eatbits(rgb_state.melclen, encoder);
734
+ }
735
+
736
+ if (rgb_state.melcstate) {
737
+ rgb_state.melclen = J[--rgb_state.melcstate];
738
+ rgb_state.melcorder = (1 << rgb_state.melclen) >>> 0;
739
+ }
740
+
741
+ return runlen;
742
+ },
743
+
744
+ quic_decode: function(data) {
745
+ //console.time("test");
746
+ var view = new Uint32Array(data);
747
+ var encoder = new wdi_quic_Encoder(view);
748
+ var opaque = encoder.io_word & 0x0000FF00;
749
+ var format = (encoder.io_word >>> 24) & 0xFF;
750
+
751
+
752
+ encoder.eat32bits(); //skip quic size
753
+
754
+ encoder.eat32bits();
755
+ var magic = encoder.io_word;
756
+ encoder.eat32bits();
757
+
758
+ var version = encoder.io_word;
759
+ encoder.eat32bits();
760
+
761
+ var type = encoder.io_word;
762
+ encoder.eat32bits();
763
+
764
+ encoder.type = type; //here?
765
+
766
+ var width = encoder.io_word;
767
+ encoder.width = width; //here?
768
+ encoder.eat32bits();
769
+
770
+ var height = encoder.io_word;
771
+ encoder.height = height; //here?
772
+ encoder.eat32bits();
773
+
774
+ var result = wdi.JSQuic.quic_image_params(encoder, type);
775
+ var channels = result[0];
776
+ var bpc = result[1];
777
+
778
+ this.encoder_reste_channels(encoder, channels, width, bpc);
779
+
780
+ var buf = new ArrayBuffer(width * height * 4);
781
+ var buf8 = new Uint8Array(buf);
782
+ var data = new Uint32Array(buf);
783
+ encoder.result = buf8;
784
+ encoder.resultData = data;
785
+ encoder.setComputedWidth(width);
786
+
787
+ switch (type) {
788
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB32:
789
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB24:
790
+ //ASSERT(encoder->usr, ABS(stride) >= (int)encoder->width * 4);
791
+ QUIC_UNCOMPRESS_RGB(encoder, channels, bpc, type);
792
+ break;
793
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGB16:
794
+ // if (type == QUIC_IMAGE_TYPE_RGB16) {
795
+ // //ASSERT(encoder->usr, ABS(stride) >= (int)encoder->width * 2);
796
+ // QUIC_UNCOMPRESS_RGB(16, rgb16_pixel_t);
797
+ // } else if (type == QUIC_IMAGE_TYPE_RGB32) {
798
+ // //ASSERT(encoder->usr, ABS(stride) >= (int)encoder->width * 4);
799
+ // QUIC_UNCOMPRESS_RGB(16_to_32, rgb32_pixel_t);
800
+ // } else {
801
+ // //encoder->usr->warn(encoder->usr, "unsupported output format\n");
802
+ // return QUIC_ERROR;
803
+ // }
804
+
805
+ break;
806
+ case wdi.QuicImageType.QUIC_IMAGE_TYPE_RGBA:
807
+ QUIC_UNCOMPRESS_RGBA(encoder, channels, bpc, type);
808
+ if (opaque) {
809
+ var len = buf8.length - 1;
810
+ while (len > 0) {
811
+ buf8[len] = 255;
812
+ len -= 4;
813
+ }
814
+ }
815
+ break;
816
+ //QUIC_UNCOMPRESS_RGBA(encoder, channels, bpc, type);
817
+ //
818
+ // if (type != QUIC_IMAGE_TYPE_RGBA) {
819
+ // //encoder->usr->warn(encoder->usr, "unsupported output format\n");
820
+ // return QUIC_ERROR;
821
+ // }
822
+ // //ASSERT(encoder->usr, ABS(stride) >= (int)encoder->width * 4);
823
+ // uncompress_rgba(encoder, buf, stride);
824
+ // break;
825
+ }
826
+ // var len = encoder.result.length;
827
+ // while(len--) {
828
+ // imgData.data[len] = encoder.result[len];
829
+ // }
830
+ //console.timeEnd("test");
831
+
832
+ //imgData.data.set(buf8);
833
+ return buf;
834
+ }
835
+
836
+ };
837
+
838
+ wdi.JSQuic.quic_init();
839
+
840
+ function wdi_quic_Encoder(data) {
841
+ this.computedWidth = 0;
842
+ this.result = [];
843
+ this.cnt = 0;
844
+ this.pxCnt = 0,
845
+ this.usr = data;
846
+ this.type = null;
847
+ this.width = null;
848
+ this.height = null;
849
+ this.num_channels = null;
850
+
851
+ this.n_buckets_8bpc = null;
852
+ this.n_buckets_5bpc = null;
853
+
854
+ this.io_available_bits = 32;
855
+ this.io_now = 0;
856
+
857
+ this.io_next_word = null;
858
+ this.io_now = null;
859
+
860
+ this.read_io_word();
861
+ this.io_word = this.io_next_word;
862
+
863
+ this.read_io_word();
864
+
865
+ this.io_words_count = data.length;
866
+
867
+ this.rows_completed = 0; //??
868
+
869
+ this.channels = [];
870
+
871
+ this.alphaPos = 3; //first alpha
872
+
873
+ this.rgb_state = new wdi_quic_CommonState();
874
+ for (var i = 0; i < 4; i++) {
875
+ this.channels[i] = new wdi_quic_Channel();
876
+ wdi.JSQuic.initChannel(this, this.channels[i]);
877
+ }
878
+ }
879
+
880
+ wdi_quic_Encoder.prototype.append = function(databyte) {
881
+ this.result[this.cnt++] = databyte;
882
+ }
883
+
884
+ wdi_quic_Encoder.prototype.appendPixel = function(r, g, b) {
885
+ this.resultData[this.pxCnt++] =
886
+ (255 << 24) | // alpha
887
+ (b << 16) | // blue
888
+ (g << 8) | // green
889
+ r; // red
890
+ this.cnt += 4;
891
+ }
892
+
893
+ wdi_quic_Encoder.prototype.eatbits = function(len, encoder) {
894
+ var available_bits = encoder.io_available_bits;
895
+ var io_word = encoder.io_word;
896
+
897
+ var delta = available_bits - len;
898
+
899
+ io_word = io_word << len;
900
+
901
+ //enough bits
902
+ if (delta >= 0) {
903
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
904
+ encoder.io_available_bits = delta;
905
+ encoder.io_word = io_word;
906
+ return;
907
+ }
908
+
909
+ var io_next_word = encoder.io_next_word;
910
+ //not enough bits
911
+ delta = -delta; //bits missing
912
+ io_word = (io_word | (io_next_word << delta) >>> 0);
913
+
914
+ ///////////////////
915
+ //read io word (inlined for perforemance)
916
+
917
+ io_next_word = encoder.usr[encoder.io_now++];
918
+ //end read io_word
919
+ /////////////////
920
+
921
+ available_bits = 32 - delta;
922
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
923
+
924
+ encoder.io_available_bits = available_bits;
925
+ encoder.io_word = io_word;
926
+ encoder.io_next_word = io_next_word;
927
+ }
928
+
929
+ wdi_quic_Encoder.prototype.eat32bits = function() {
930
+ this.eatbits(16, this);
931
+ this.eatbits(16, this);
932
+ }
933
+
934
+ wdi_quic_Encoder.prototype.read_io_word = function() {
935
+ this.io_next_word = this.usr[this.io_now++];
936
+ }
937
+
938
+ wdi_quic_Encoder.prototype.row_completed = function() {
939
+ this.rows_completed++;
940
+ }
941
+
942
+ wdi_quic_Encoder.prototype.setComputedWidth = function(width) {
943
+ this.computedWidth = width * 4;
944
+ }
945
+
946
+ wdi_quic_Encoder.prototype.appendAlpha = function(databyte) {
947
+ this.result[this.alphaPos] = databyte;
948
+ this.alphaPos += 4;
949
+ }
950
+
951
+ function cnt_l_zeroes(bits) {
952
+ if (bits > 0x007FFFFF) {
953
+ return wdi.JSQuic.lzeroes[bits >>> 24];
954
+ } else if (bits > 0x00007FFF) {
955
+ return 8 + wdi.JSQuic.lzeroes[((bits >>> 16) & 0x000000ff)];
956
+ } else if (bits > 0x0000007F) {
957
+ return 16 + wdi.JSQuic.lzeroes[((bits >>> 8) & 0x000000ff)];
958
+ } else {
959
+ return 24 + wdi.JSQuic.lzeroes[(bits & 0x000000ff)];
960
+ }
961
+ }
962
+
963
+
964
+ /*
965
+ *
966
+ *
967
+ * JSQUIC FAMILY
968
+ *
969
+ *
970
+ */
971
+
972
+ function golomb_code_len(n, l) {
973
+ if (n < wdi.nGRcodewords[l]) {
974
+ return (n >>> l) + 1 + l;
975
+ } else {
976
+ return wdi.notGRcwlen[l];
977
+ }
978
+ }
979
+
980
+ function golomb_decoding(l, bits, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen) {
981
+ var cwlen;
982
+ var result;
983
+ //its better to check first for bigger, tested for performance
984
+ if (bits > notGRprefixmask[l]) {
985
+ var zeroprefix = cnt_l_zeroes(bits);
986
+ cwlen = zeroprefix + 1 + l;
987
+ result = ((zeroprefix << l)) | ((bits >>> (32 - cwlen)) & bppmask[l]);
988
+ } else {
989
+ cwlen = notGRcwlen[l];
990
+ result = nGRcodewords[l] + ((bits) >>> (32 - cwlen) & bppmask[notGRsuffixlen[l]]);
991
+ }
992
+ return [result, cwlen];
993
+ }
994
+
995
+ /* update the bucket using just encoded curval */
996
+ function real_update_model(state, bucket, curval, bpp, wm_trigger) {
997
+ var i;
998
+ var bestcode;
999
+ var bestcodelen;
1000
+ var ithcodelen;
1001
+
1002
+ var pcounters = bucket.pcounters;
1003
+ bestcode = bpp - 1;
1004
+ bestcodelen = (pcounters[bestcode] += golomb_code_len(curval, bestcode));
1005
+
1006
+ for (i = bpp - 2; i >= 0; i--) {
1007
+ ithcodelen = (pcounters[i] += golomb_code_len(curval, i));
1008
+
1009
+ if (ithcodelen < bestcodelen) {
1010
+ bestcode = i;
1011
+ bestcodelen = ithcodelen;
1012
+ }
1013
+ }
1014
+
1015
+ bucket.bestcode = bestcode;
1016
+ if (bestcodelen > state.wm_trigger) {
1017
+ while (bpp-- > 0) {
1018
+ pcounters[bpp] >>>= 1;
1019
+ }
1020
+ }
1021
+ }
1022
+
1023
+ function UPDATE_MODEL(index, encoder, bpp, correlate_row_r, correlate_row_g, correlate_row_b) {
1024
+ real_update_model(encoder.rgb_state, find_bucket(encoder.channels[0],
1025
+ correlate_row_r[index - 1]), correlate_row_r[index], bpp);
1026
+ real_update_model(encoder.rgb_state, find_bucket(encoder.channels[1],
1027
+ correlate_row_g[index - 1]), correlate_row_g[index], bpp);
1028
+ real_update_model(encoder.rgb_state, find_bucket(encoder.channels[2],
1029
+ correlate_row_b[index - 1]), correlate_row_b[index], bpp);
1030
+ }
1031
+
1032
+ function find_bucket(channel, val) {
1033
+ if (val === undefined) {
1034
+ val = channel.oldFirst;
1035
+ }
1036
+ return channel._buckets_ptrs[val];
1037
+ }
1038
+
1039
+ /*
1040
+ *
1041
+ *
1042
+ * JSQUIC RGBA
1043
+ *
1044
+ *
1045
+ */
1046
+
1047
+ function QUIC_UNCOMPRESS_RGBA(encoder, channels, bpc, type) {
1048
+ quic_uncompress_row0(encoder, channels, bpc, type);
1049
+ quic_four_uncompress_row0(encoder, encoder.channels[3], bpc, type);
1050
+ encoder.row_completed();
1051
+ var height = encoder.height;
1052
+ var rgb_state = encoder.rgb_state;
1053
+ for (var row = 1; row < height; row++) {
1054
+ quic_uncompress_row_a(encoder, channels, bpc, type, rgb_state);
1055
+ quic_four_uncompress_row(encoder, encoder.channels[3], bpc, type);
1056
+ encoder.row_completed();
1057
+ }
1058
+ }
1059
+
1060
+ function quic_four_uncompress_row(encoder, channel, bpc, type) {
1061
+ var bpc_mask = wdi.JSQuic.BPC_MASK[type];
1062
+ var pos = 0;
1063
+ var width = encoder.width;
1064
+ while ((wdi.JSQuic.wmimax > channel.state.wmidx) && (channel.state.wmileft <= width)) {
1065
+ if (channel.state.wmileft) {
1066
+ uncompress_four_row_seg(
1067
+ encoder,
1068
+ channel,
1069
+ pos,
1070
+ pos + channel.state.wmileft,
1071
+ bpc,
1072
+ bpc_mask,
1073
+ type
1074
+ );
1075
+ pos += channel.state.wmileft;
1076
+ width -= channel.state.wmileft;
1077
+ }
1078
+
1079
+ channel.state.wmidx++;
1080
+ wdi.JSQuic.set_wm_trigger(channel.state);
1081
+ channel.state.wmileft = wdi.JSQuic.wminext;
1082
+ }
1083
+
1084
+ if (width) {
1085
+ uncompress_four_row_seg(
1086
+ encoder,
1087
+ channel,
1088
+ pos,
1089
+ pos + width,
1090
+ bpc,
1091
+ bpc_mask,
1092
+ type
1093
+ );
1094
+ if (wdi.JSQuic.wmimax > channel.state.wmidx) {
1095
+ channel.state.wmileft -= width;
1096
+ }
1097
+ }
1098
+ }
1099
+
1100
+ function uncompress_four_row_seg(encoder, channel, i, end, bpc, bpc_mask, type) {
1101
+ var correlate_row = channel.correlate_row;
1102
+
1103
+ var stopidx = 0;
1104
+
1105
+ var waitmask = wdi.JSQuic.bppmask[channel.state.wmidx];
1106
+
1107
+ var run_index = 0;
1108
+ var run_end = 0;
1109
+
1110
+ var rle = false;
1111
+
1112
+ var computedWidth = encoder.computedWidth;
1113
+
1114
+ var rows_completed = encoder.rows_completed;
1115
+
1116
+ var offset = ((encoder.rows_completed - 1) * computedWidth);
1117
+
1118
+ var data;
1119
+
1120
+ var eatbits = encoder.eatbits;
1121
+ var appendAlpha = encoder.appendAlpha;
1122
+
1123
+ var alpha;
1124
+
1125
+ var ret, codewordlen;
1126
+ var bppmask = wdi.JSQuic.bppmask;
1127
+
1128
+ var notGRprefixmask = wdi.notGRprefixmask;
1129
+ var notGRcwlen = wdi.notGRcwlen;
1130
+ var nGRcodewords = wdi.nGRcodewords;
1131
+ var notGRsuffixlen = wdi.notGRsuffixlen;
1132
+
1133
+ if (!i) {
1134
+ alpha = UNCOMPRESS_ONE_0_A(channel, encoder, bpc_mask, offset);
1135
+
1136
+ if (channel.state.waitcnt) {
1137
+ --channel.state.waitcnt;
1138
+ } else {
1139
+ channel.state.waitcnt = (wdi.JSQuic.tabrand(channel.state) & waitmask);
1140
+ real_update_model(channel.state, find_bucket(channel,
1141
+ correlate_row[-1]), correlate_row[0], bpc);
1142
+ }
1143
+ stopidx = ++i + channel.state.waitcnt;
1144
+ } else {
1145
+ stopidx = i + channel.state.waitcnt;
1146
+ alpha = encoder.result[encoder.alphaPos - 4];
1147
+ }
1148
+
1149
+ for (;;) {
1150
+ while (stopidx < end) {
1151
+ for (; i <= stopidx; i++) {
1152
+ rle = RLE_PRED_A(i, encoder, run_index, computedWidth, rows_completed);
1153
+ if (rle) break;
1154
+
1155
+ ret = golomb_decoding(find_bucket(channel, correlate_row[i - 1]).bestcode,
1156
+ encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1157
+
1158
+ data = ret[0];
1159
+ codewordlen = ret[1];
1160
+
1161
+ correlate_row[i] = data;
1162
+ alpha = (((wdi.xlatL2U[data] +
1163
+ ((alpha + PIXEL_B(channel, encoder, i, offset)) >>> 1)) & bpc_mask) >>> 0);
1164
+
1165
+ appendAlpha.call(encoder, alpha);
1166
+ eatbits(codewordlen, encoder);
1167
+ }
1168
+ if (!rle) {
1169
+ real_update_model(channel.state, find_bucket(channel,
1170
+ correlate_row[stopidx - 1]), correlate_row[stopidx], bpc);
1171
+ stopidx = i + (wdi.JSQuic.tabrand(channel.state) & waitmask);
1172
+ } else {
1173
+ break;
1174
+ }
1175
+ }
1176
+ if (!rle) {
1177
+ for (; i < end; i++) {
1178
+ rle = RLE_PRED_A(i, encoder, run_index, computedWidth, rows_completed);
1179
+ if (rle) break;
1180
+
1181
+ ret = golomb_decoding(find_bucket(channel, correlate_row[i - 1]).bestcode,
1182
+ encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1183
+
1184
+ data = ret[0];
1185
+ codewordlen = ret[1];
1186
+ correlate_row[i] = data;
1187
+ alpha = (((wdi.xlatL2U[data] +
1188
+ ((alpha + PIXEL_B(channel, encoder, i, offset)) >>> 1)) & bpc_mask) >>> 0);
1189
+
1190
+ appendAlpha.call(encoder, alpha);
1191
+ eatbits(codewordlen, encoder);
1192
+ }
1193
+ if (!rle) {
1194
+ channel.state.waitcnt = stopidx - end;
1195
+ return;
1196
+ }
1197
+ }
1198
+
1199
+ //RLE
1200
+ channel.state.waitcnt = stopidx - i;
1201
+ run_index = i;
1202
+ run_end = i + wdi.JSQuic.decode_channel_run(encoder, channel);
1203
+
1204
+ var cpos = ((encoder.rows_completed) * (encoder.width * 4)) + (i * 4);
1205
+ var a = encoder.result[cpos - 1];
1206
+
1207
+ for (; i < run_end; i++) {
1208
+ //TODO: how to append?
1209
+ appendAlpha.call(encoder, a);
1210
+ }
1211
+
1212
+ if (i === end) {
1213
+ return;
1214
+ }
1215
+
1216
+ stopidx = i + channel.state.waitcnt;
1217
+ rle = false;
1218
+ //END RLE
1219
+ }
1220
+ }
1221
+
1222
+
1223
+ function quic_four_uncompress_row0(encoder, channel, bpc, type) {
1224
+ var bpc_mask = wdi.JSQuic.BPC_MASK[type];
1225
+ var pos = 0;
1226
+ var width = encoder.width;
1227
+ while ((wdi.JSQuic.wmimax > channel.state.wmidx) && (channel.state.wmileft <= width)) {
1228
+ if (channel.state.wmileft) {
1229
+ uncompress_four_row0_seg(
1230
+ encoder,
1231
+ channel,
1232
+ pos,
1233
+ pos + channel.wmileft,
1234
+ wdi.JSQuic.bppmask[channel.state.wmidx],
1235
+ bpc,
1236
+ bpc_mask,
1237
+ type
1238
+ );
1239
+ pos += channel.state.wmileft;
1240
+ width -= channel.state.wmileft;
1241
+ }
1242
+
1243
+ channel.state.wmidx++;
1244
+ wdi.JSQuic.set_wm_trigger(channel.state);
1245
+ channel.state.wmileft = wdi.JSQuic.wminext;
1246
+ }
1247
+
1248
+ if (width) {
1249
+ uncompress_four_row0_seg(
1250
+ encoder,
1251
+ channel,
1252
+ pos,
1253
+ pos + width,
1254
+ wdi.JSQuic.bppmask[channel.state.wmidx],
1255
+ bpc,
1256
+ bpc_mask,
1257
+ type
1258
+ );
1259
+ if (wdi.JSQuic.wmimax > channel.state.wmidx) {
1260
+ channel.state.wmileft -= width;
1261
+ }
1262
+ }
1263
+ }
1264
+
1265
+ function uncompress_four_row0_seg(encoder, channel, i, end, waitmask, bpc, bpc_mask, type) {
1266
+ var correlate_row = channel.correlate_row;
1267
+
1268
+ var stopidx = 0;
1269
+
1270
+ if (!i) {
1271
+ UNCOMPRESS_ONE_ROW0_0_A(channel);
1272
+
1273
+ if (channel.state.waitcnt) {
1274
+ --channel.state.waitcnt;
1275
+ } else {
1276
+ channel.state.waitcnt = (wdi.JSQuic.tabrand(channel.state) & waitmask);
1277
+ real_update_model(channel.state, find_bucket(channel,
1278
+ correlate_row[-1]), correlate_row[0], bpc);
1279
+ }
1280
+ stopidx = ++i + channel.state.waitcnt;
1281
+ } else {
1282
+ stopidx = i + channel.state.waitcnt;
1283
+ }
1284
+
1285
+ while (stopidx < end) {
1286
+ for (; i <= stopidx; i++) {
1287
+ UNCOMPRESS_ONE_ROW0_A(channel, i, bpc_mask, encoder, correlate_row);
1288
+ }
1289
+ real_update_model(channel.state, find_bucket(channel,
1290
+ correlate_row[stopidx - 1]), correlate_row[stopidx], bpc);
1291
+ stopidx = i + (wdi.JSQuic.tabrand(channel.state) & waitmask);
1292
+ }
1293
+
1294
+ for (; i < end; i++) {
1295
+ UNCOMPRESS_ONE_ROW0_A(channel, i, bpc_mask, encoder, correlate_row);
1296
+ }
1297
+ channel.state.waitcnt = stopidx - end;
1298
+ }
1299
+
1300
+ function SAME_PIXEL_A(i, result) {
1301
+ if (result[i - 1] === result[i + 3]) {
1302
+ return true;
1303
+ }
1304
+ return false;
1305
+ }
1306
+
1307
+ function RLE_PRED_A(i, encoder, run_index, width, rows_completed) {
1308
+ var pr = ((rows_completed - 1) * width) + (i * 4); //prev r
1309
+ if (run_index !== i && i > 2) {
1310
+ if (SAME_PIXEL_A(pr, encoder.result)) {
1311
+ pr = ((rows_completed) * width) + ((i - 1) * 4); // cur r
1312
+ if (SAME_PIXEL_A(pr, encoder.result)) {
1313
+ return true;
1314
+ }
1315
+ }
1316
+ }
1317
+ return false;
1318
+ }
1319
+
1320
+ function UNCOMPRESS_ONE_0_A(channel, encoder, bpc_mask, offset) {
1321
+ var ret, codewordlen;
1322
+ channel.oldFirst = channel.correlate_row[0];
1323
+ ret = golomb_decoding(find_bucket(channel,
1324
+ channel.correlate_row[-1]).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
1325
+ channel.correlate_row[0] = ret[0];
1326
+ codewordlen = ret[1];
1327
+ var residuum = wdi.xlatL2U[channel.correlate_row[0]];
1328
+ var prev = PIXEL_B(channel, encoder, 0, offset);
1329
+ var resultpixel = ((residuum + prev) & bpc_mask) >>> 0;
1330
+ encoder.appendAlpha(resultpixel);
1331
+ encoder.eatbits(codewordlen, encoder);
1332
+ return resultpixel;
1333
+ }
1334
+
1335
+ function UNCOMPRESS_ONE_A(channel, i, bpc_mask, encoder, correlate_row, offset) {
1336
+ var ret, codewordlen;
1337
+ ret = golomb_decoding(find_bucket(channel, correlate_row[i - 1]).bestcode,
1338
+ encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
1339
+ var data = ret[0];
1340
+ codewordlen = ret[1];
1341
+ correlate_row[i] = data;
1342
+ encoder.appendAlpha((((wdi.xlatL2U[data] +
1343
+ ((PIXEL_A_A(encoder) + PIXEL_B(channel, encoder, i, offset)) >>> 1)) & bpc_mask) >>> 0));
1344
+
1345
+ encoder.eatbits(codewordlen, encoder);
1346
+ }
1347
+
1348
+
1349
+ function UNCOMPRESS_ONE_ROW0_0_A(channel) {
1350
+ var ret, codewordlen;
1351
+ var encoder = channel.encoder;
1352
+ ret = golomb_decoding(find_bucket(channel, 0).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
1353
+ channel.correlate_row[0] = ret[0];
1354
+ codewordlen = ret[1];
1355
+ encoder.appendAlpha(wdi.xlatL2U[channel.correlate_row[0]]);
1356
+ encoder.eatbits(codewordlen, encoder);
1357
+ }
1358
+
1359
+ function UNCOMPRESS_ONE_ROW0_A(channel, i, bpc_mask, encoder, correlate_row) {
1360
+ var ret, codewordlen;
1361
+ ret = golomb_decoding(find_bucket(channel, correlate_row[i - 1]).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
1362
+ var data = ret[0];
1363
+ codewordlen = ret[1];
1364
+ correlate_row[i] = data;
1365
+ encoder.appendAlpha(CORELATE_0_A(encoder, channel, i, bpc_mask, correlate_row));
1366
+ encoder.eatbits(codewordlen, encoder);
1367
+ }
1368
+
1369
+ function CORELATE_0_A(encoder, channel, curr, bpc_mask, correlate_row) {
1370
+ return ((wdi.xlatL2U[correlate_row[curr]] + PIXEL_A_A(encoder)) & bpc_mask) >>> 0;
1371
+ }
1372
+
1373
+ function PIXEL_A_A(encoder) {
1374
+ return encoder.result[encoder.alphaPos - 4];
1375
+ }
1376
+
1377
+ /*
1378
+ *
1379
+ *
1380
+ * JSQUIC UNCOMPRESS
1381
+ *
1382
+ *
1383
+ */
1384
+
1385
+ function QUIC_UNCOMPRESS_RGB(encoder, channels, bpc, type) {
1386
+ quic_uncompress_row0(encoder, channels, bpc, type);
1387
+ encoder.row_completed();
1388
+
1389
+ var rgb_state = encoder.rgb_state;
1390
+ var height = encoder.height;
1391
+ var computedAlpha = 255 << 24;
1392
+ var result = encoder.result;
1393
+ var resultData = encoder.resultData;
1394
+ var width = encoder.width;
1395
+ var bpc_mask = wdi.JSQuic.BPC_MASK[type];
1396
+ var jsquic = wdi.JSQuic;
1397
+ var channel_r = encoder.channels[0];
1398
+ var channel_g = encoder.channels[1];
1399
+ var channel_b = encoder.channels[2];
1400
+ var buckets_ptrs_r = channel_r._buckets_ptrs;
1401
+ var buckets_ptrs_g = channel_g._buckets_ptrs;
1402
+ var buckets_ptrs_b = channel_b._buckets_ptrs;
1403
+ var correlate_row_r = channel_r.correlate_row;
1404
+ var correlate_row_g = channel_g.correlate_row;
1405
+ var correlate_row_b = channel_b.correlate_row;
1406
+ var computedWidth = encoder.computedWidth;
1407
+ var xlatL2U = wdi.xlatL2U;
1408
+ var lzeroes = wdi.JSQuic.lzeroes;
1409
+ var lzeroes8 = wdi.JSQuic.lzeroes8;
1410
+ var lzeroes16 = wdi.JSQuic.lzeroes16;
1411
+ var lzeroes24 = wdi.JSQuic.lzeroes24;
1412
+ var notGRprefixmask = wdi.notGRprefixmask;
1413
+ var notGRcwlen = wdi.notGRcwlen;
1414
+ var nGRcodewords = wdi.nGRcodewords;
1415
+ var notGRsuffixlen = wdi.notGRsuffixlen;
1416
+ var eatbits = encoder.eatbits;
1417
+ var tabrand = wdi.JSQuic.tabrand;
1418
+ var decode_run = wdi.JSQuic.decode_run;
1419
+ var bppmask = wdi.JSQuic.bppmask;
1420
+ var jsquic = wdi.JSQuic;
1421
+ var tabrand_chaos = wdi.JSQuic.tabrand_chaos;
1422
+ var tabrand_seedmask = jsquic.TABRAND_SEEDMASK;
1423
+ var usr = encoder.usr;
1424
+
1425
+ for (var row = 1; row < height; row++) {
1426
+ quic_uncompress_row(encoder, channels, bpc, type, rgb_state, computedAlpha, result, resultData, width, bpc_mask,
1427
+ jsquic, channel_r, channel_g, channel_b, buckets_ptrs_r, buckets_ptrs_g, buckets_ptrs_b, correlate_row_r,
1428
+ correlate_row_g, correlate_row_b, computedWidth, xlatL2U, lzeroes, lzeroes8, lzeroes16, lzeroes24,
1429
+ notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen, eatbits, tabrand, decode_run, bppmask, tabrand_chaos,
1430
+ tabrand_seedmask, usr);
1431
+ encoder.rows_completed++;
1432
+ }
1433
+ }
1434
+
1435
+
1436
+ function quic_uncompress_row(encoder, channels, bpc, type, rgb_state, computedAlpha, result, resultData, width, bpc_mask,
1437
+ jsquic, channel_r, channel_g, channel_b, buckets_ptrs_r, buckets_ptrs_g, buckets_ptrs_b, correlate_row_r, correlate_row_g,
1438
+ correlate_row_b, computedWidth, xlatL2U, lzeroes, lzeroes8, lzeroes16, lzeroes24,
1439
+ notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen, eatbits, tabrand, decode_run, bppmask, tabrand_chaos,
1440
+ tabrand_seedmask, usr) {
1441
+
1442
+ var pos = 0;
1443
+ var rows_completed = encoder.rows_completed;
1444
+ var currentOffset32 = ((rows_completed) * computedWidth / 4);
1445
+ var offset = ((rows_completed - 1) * computedWidth);
1446
+ while ((jsquic.wmimax > rgb_state.wmidx) && (rgb_state.wmileft <= width)) {
1447
+ if (rgb_state.wmileft) {
1448
+ uncompress_row_seg(
1449
+ encoder,
1450
+ pos,
1451
+ pos + rgb_state.wmileft,
1452
+ bpc,
1453
+ bpc_mask,
1454
+ type,
1455
+ rgb_state,
1456
+ computedAlpha,
1457
+ result,
1458
+ resultData,
1459
+ channel_r,
1460
+ channel_g,
1461
+ channel_b,
1462
+ buckets_ptrs_r,
1463
+ buckets_ptrs_g,
1464
+ buckets_ptrs_b,
1465
+ correlate_row_r,
1466
+ correlate_row_g,
1467
+ correlate_row_b,
1468
+ computedWidth,
1469
+ xlatL2U,
1470
+ lzeroes,
1471
+ lzeroes8,
1472
+ lzeroes16,
1473
+ lzeroes24,
1474
+ notGRprefixmask,
1475
+ notGRcwlen,
1476
+ nGRcodewords,
1477
+ notGRsuffixlen,
1478
+ eatbits,
1479
+ tabrand,
1480
+ decode_run,
1481
+ bppmask,
1482
+ jsquic,
1483
+ tabrand_chaos,
1484
+ rows_completed,
1485
+ tabrand_seedmask,
1486
+ offset,
1487
+ currentOffset32,
1488
+ usr
1489
+ );
1490
+ pos += rgb_state.wmileft;
1491
+ width -= rgb_state.wmileft;
1492
+ }
1493
+
1494
+ rgb_state.wmidx++;
1495
+ jsquic.set_wm_trigger(rgb_state);
1496
+ rgb_state.wmileft = jsquic.wminext;
1497
+ }
1498
+
1499
+ if (width) {
1500
+ uncompress_row_seg(
1501
+ encoder,
1502
+ pos,
1503
+ pos + width,
1504
+ bpc,
1505
+ bpc_mask,
1506
+ type,
1507
+ rgb_state,
1508
+ computedAlpha,
1509
+ result,
1510
+ resultData,
1511
+ channel_r,
1512
+ channel_g,
1513
+ channel_b,
1514
+ buckets_ptrs_r,
1515
+ buckets_ptrs_g,
1516
+ buckets_ptrs_b,
1517
+ correlate_row_r,
1518
+ correlate_row_g,
1519
+ correlate_row_b,
1520
+ computedWidth,
1521
+ xlatL2U,
1522
+ lzeroes,
1523
+ lzeroes8,
1524
+ lzeroes16,
1525
+ lzeroes24,
1526
+ notGRprefixmask,
1527
+ notGRcwlen,
1528
+ nGRcodewords,
1529
+ notGRsuffixlen,
1530
+ eatbits,
1531
+ tabrand,
1532
+ decode_run,
1533
+ bppmask,
1534
+ jsquic,
1535
+ tabrand_chaos,
1536
+ rows_completed,
1537
+ tabrand_seedmask,
1538
+ offset,
1539
+ currentOffset32,
1540
+ usr
1541
+ );
1542
+ if (jsquic.wmimax > encoder.rgb_state.wmidx) {
1543
+ rgb_state.wmileft -= width;
1544
+ }
1545
+ }
1546
+ }
1547
+
1548
+
1549
+ function quic_uncompress_row_a(encoder, channels, bpc, type, rgb_state) {
1550
+ var bpc_mask = wdi.JSQuic.BPC_MASK[type];
1551
+ var pos = 0;
1552
+ var width = encoder.width;
1553
+ while ((wdi.JSQuic.wmimax > rgb_state.wmidx) && (rgb_state.wmileft <= width)) {
1554
+ if (rgb_state.wmileft) {
1555
+ uncompress_row_seg_a(
1556
+ encoder,
1557
+ pos,
1558
+ pos + rgb_state.wmileft,
1559
+ bpc,
1560
+ bpc_mask,
1561
+ type,
1562
+ rgb_state
1563
+ );
1564
+ pos += rgb_state.wmileft;
1565
+ width -= rgb_state.wmileft;
1566
+ }
1567
+
1568
+ rgb_state.wmidx++;
1569
+ wdi.JSQuic.set_wm_trigger(rgb_state);
1570
+ rgb_state.wmileft = wdi.JSQuic.wminext;
1571
+ }
1572
+
1573
+ if (width) {
1574
+ uncompress_row_seg_a(
1575
+ encoder,
1576
+ pos,
1577
+ pos + width,
1578
+ bpc,
1579
+ bpc_mask,
1580
+ type,
1581
+ rgb_state
1582
+ );
1583
+ if (wdi.JSQuic.wmimax > encoder.rgb_state.wmidx) {
1584
+ rgb_state.wmileft -= width;
1585
+ }
1586
+ }
1587
+ }
1588
+
1589
+ function SAME_PIXEL_RGB_A(i, result) {
1590
+
1591
+ if (result[i - 4] === result[i] && result[i - 3] === result[i + 1] && result[i - 2] === result[i + 2])
1592
+ return true;
1593
+
1594
+ return false;
1595
+ }
1596
+
1597
+ function SAME_PIXEL(i, result) {
1598
+
1599
+ if (result[i - 1] === result[i])
1600
+ return true;
1601
+
1602
+ return false;
1603
+ }
1604
+
1605
+ function RLE_PRED_RGB_A(i, encoder, offset, currentOffset, run_index) {
1606
+ if (run_index !== i && i > 2) {
1607
+ if (SAME_PIXEL_RGB_A(offset, encoder.result)) { //fila de arriba
1608
+ var pr = currentOffset + ((i - 1) * 4);
1609
+ if (SAME_PIXEL_RGB_A(pr, encoder.result)) { //pixel de la izquierda
1610
+ return true;
1611
+ }
1612
+ }
1613
+ }
1614
+ return false;
1615
+ }
1616
+
1617
+ function RLE_PRED(i, encoder, offset, currentOffset, run_index) {
1618
+ if (run_index !== i && i > 2) {
1619
+ if (SAME_PIXEL(offset * 4, encoder.result)) { //fila de arriba
1620
+ var pr = currentOffset + i - 1;
1621
+ if (SAME_PIXEL(pr * 4, encoder.result)) { //pixel de la izquierda
1622
+ return true;
1623
+ }
1624
+ }
1625
+ }
1626
+ return false;
1627
+ }
1628
+
1629
+ function uncompress_row_seg(encoder, i, end, bpc, bpc_mask, type, rgb_state, computedAlpha, result, resultData,
1630
+ channel_r, channel_g, channel_b, buckets_ptrs_r, buckets_ptrs_g, buckets_ptrs_b, correlate_row_r, correlate_row_g,
1631
+ correlate_row_b, computedWidth, xlatL2U, lzeroes, lzeroes8, lzeroes16, lzeroes24, notGRprefixmask, notGRcwlen,
1632
+ nGRcodewords, notGRsuffixlen, eatbits, tabrand, decode_run, bppmask, jsquic, tabrand_chaos, rows_completed,
1633
+ tabrand_seedmask, offset, currentOffset32, usr) {
1634
+
1635
+ var stopidx = 0;
1636
+ var waitmask = bppmask[rgb_state.wmidx];
1637
+ var run_index = 0;
1638
+ var rle = false;
1639
+
1640
+ //var offset = ((rows_completed-1) * computedWidth);
1641
+ //var currentOffset32 = ((rows_completed) * computedWidth/4);
1642
+
1643
+ var i_1, i_4; //for performance improvments
1644
+
1645
+ var pr, pg, pb;
1646
+
1647
+ var prevCorrelatedR, prevCorrelatedG, prevCorrelatedB;
1648
+ var ret, codewordlen, l, bits, zeroprefix;
1649
+
1650
+ var cnt = encoder.cnt;
1651
+ var pxCnt = encoder.pxCnt;
1652
+
1653
+ var prev_row, i4sub, stopidx_sub1;
1654
+
1655
+ var available_bits, io_word, delta, io_next_word;
1656
+
1657
+ if (!i) {
1658
+ pr = UNCOMPRESS_ONE_0(channel_r, encoder, bpc_mask, offset);
1659
+ pg = UNCOMPRESS_ONE_0(channel_g, encoder, bpc_mask, offset);
1660
+ pb = UNCOMPRESS_ONE_0(channel_b, encoder, bpc_mask, offset);
1661
+
1662
+ prevCorrelatedR = correlate_row_r[0];
1663
+ prevCorrelatedG = correlate_row_g[0];
1664
+ prevCorrelatedB = correlate_row_b[0];
1665
+ //inlined appendPixel
1666
+ resultData[pxCnt++] =
1667
+ 255 << 24 | // alpha
1668
+ pb << 16 | // blue
1669
+ pg << 8 | // green
1670
+ pr; // red
1671
+ //cnt += 4;
1672
+
1673
+ if (rgb_state.waitcnt) {
1674
+ --rgb_state.waitcnt;
1675
+ } else {
1676
+ rgb_state.waitcnt = (tabrand.call(jsquic, rgb_state) & waitmask);
1677
+ UPDATE_MODEL(0, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
1678
+ }
1679
+ stopidx = ++i + rgb_state.waitcnt;
1680
+ } else {
1681
+ stopidx = i + rgb_state.waitcnt;
1682
+ pr = result[cnt - 4];
1683
+ pg = result[cnt - 3];
1684
+ pb = result[cnt - 2];
1685
+
1686
+ prevCorrelatedR = correlate_row_r[i - 1];
1687
+ prevCorrelatedG = correlate_row_g[i - 1];
1688
+ prevCorrelatedB = correlate_row_b[i - 1];
1689
+ }
1690
+
1691
+
1692
+ while (true) {
1693
+ while (stopidx < end) {
1694
+ i_4 = offset + i * 4;
1695
+ for (; i <= stopidx; i++) {
1696
+ /////// critical part
1697
+ //rle = RLE_PRED(i, encoder, ci, currentOffset32, run_index);
1698
+ //RLE_PRED INLINE
1699
+ //inlined same_pixel, see original rle_pred
1700
+ i4sub = i_4 / 4;
1701
+ if (resultData[i4sub - 1] === resultData[i4sub]) { //fila de arriba
1702
+ prev_row = currentOffset32 + i - 1;
1703
+ if (resultData[prev_row - 1] === resultData[prev_row]) { //pixel de la izquierda
1704
+ if (run_index !== i && i > 2) {
1705
+ rle = true;
1706
+ break;
1707
+ }
1708
+ }
1709
+ }
1710
+
1711
+
1712
+ /////////////////////// INLINING UNCOMPRESS_ONE
1713
+ //r
1714
+ /////////////////////// INLINING GOLOMB_DECODING
1715
+ //ret = golomb_decoding(buckets_ptrs_r[prevCorrelatedR].bestcode,
1716
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1717
+ l = buckets_ptrs_r[prevCorrelatedR].bestcode;
1718
+ bits = encoder.io_word;
1719
+ if (bits > notGRprefixmask[l]) {
1720
+ //zeroprefix = cnt_l_zeroes(bits);
1721
+
1722
+ if (bits > 0x007FFFFF) {
1723
+ zeroprefix = lzeroes[bits >>> 24];
1724
+ } else if (bits > 0x00007FFF) {
1725
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
1726
+ } else if (bits > 0x0000007F) {
1727
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
1728
+ } else {
1729
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
1730
+ }
1731
+
1732
+ codewordlen = zeroprefix + 1 + l;
1733
+ prevCorrelatedR = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
1734
+ } else {
1735
+ codewordlen = notGRcwlen[l];
1736
+ prevCorrelatedR = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
1737
+ }
1738
+
1739
+ correlate_row_r[i] = prevCorrelatedR;
1740
+
1741
+ pr = ((((xlatL2U[prevCorrelatedR] +
1742
+ ((pr +
1743
+ result[i_4++]) >>> 1)) & bpc_mask)));
1744
+
1745
+ //eatbits(codewordlen, encoder);
1746
+ //INLINING EATBITS
1747
+ available_bits = encoder.io_available_bits;
1748
+ io_word = encoder.io_word;
1749
+
1750
+ delta = available_bits - codewordlen;
1751
+
1752
+ io_word = io_word << codewordlen;
1753
+
1754
+ //enough bits
1755
+ if (delta >= 0) {
1756
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
1757
+ encoder.io_available_bits = delta;
1758
+ encoder.io_word = io_word;
1759
+ } else {
1760
+ io_next_word = encoder.io_next_word;
1761
+ //not enough bits
1762
+ delta = -delta; //bits missing
1763
+ io_word = (io_word | (io_next_word << delta) >>> 0);
1764
+
1765
+ ///////////////////
1766
+ //read io word (inlined for perforemance)
1767
+
1768
+ io_next_word = usr[encoder.io_now++];
1769
+ //end read io_word
1770
+ /////////////////
1771
+
1772
+ available_bits = 32 - delta;
1773
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
1774
+
1775
+ encoder.io_available_bits = available_bits;
1776
+ encoder.io_word = io_word;
1777
+ encoder.io_next_word = io_next_word;
1778
+ }
1779
+ //END INLINING
1780
+
1781
+ //g
1782
+ ///////////////////////////////////////INLINING golomb_decoding
1783
+
1784
+ //ret = golomb_decoding(buckets_ptrs_g[prevCorrelatedG].bestcode,
1785
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1786
+ l = buckets_ptrs_g[prevCorrelatedG].bestcode;
1787
+ bits = encoder.io_word;
1788
+
1789
+ if (bits > notGRprefixmask[l]) {
1790
+ //zeroprefix = cnt_l_zeroes(bits);
1791
+
1792
+ if (bits > 0x007FFFFF) {
1793
+ zeroprefix = lzeroes[bits >>> 24];
1794
+ } else if (bits > 0x00007FFF) {
1795
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
1796
+ } else if (bits > 0x0000007F) {
1797
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
1798
+ } else {
1799
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
1800
+ }
1801
+
1802
+ codewordlen = zeroprefix + 1 + l;
1803
+ prevCorrelatedG = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
1804
+ } else {
1805
+ codewordlen = notGRcwlen[l];
1806
+ prevCorrelatedG = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
1807
+ }
1808
+
1809
+ correlate_row_g[i] = prevCorrelatedG;
1810
+
1811
+ pg = ((((xlatL2U[prevCorrelatedG] +
1812
+ ((pg +
1813
+ result[i_4++]) >>> 1)) & bpc_mask)));
1814
+
1815
+ //INLINING EATBITS
1816
+ available_bits = encoder.io_available_bits;
1817
+ io_word = encoder.io_word;
1818
+
1819
+ delta = available_bits - codewordlen;
1820
+
1821
+ io_word = io_word << codewordlen;
1822
+
1823
+ //enough bits
1824
+ if (delta >= 0) {
1825
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
1826
+ encoder.io_available_bits = delta;
1827
+ encoder.io_word = io_word;
1828
+ } else {
1829
+ io_next_word = encoder.io_next_word;
1830
+ //not enough bits
1831
+ delta = -delta; //bits missing
1832
+ io_word = (io_word | (io_next_word << delta) >>> 0);
1833
+
1834
+ ///////////////////
1835
+ //read io word (inlined for perforemance)
1836
+
1837
+ io_next_word = usr[encoder.io_now++];
1838
+ //end read io_word
1839
+ /////////////////
1840
+
1841
+ available_bits = 32 - delta;
1842
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
1843
+
1844
+ encoder.io_available_bits = available_bits;
1845
+ encoder.io_word = io_word;
1846
+ encoder.io_next_word = io_next_word;
1847
+ }
1848
+ //END INLINING
1849
+
1850
+ //b
1851
+ ////////////////////////////////// INLINING golomb_decoding
1852
+ //ret = golomb_decoding(buckets_ptrs_b[prevCorrelatedB].bestcode,
1853
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1854
+ l = buckets_ptrs_b[prevCorrelatedB].bestcode;
1855
+ bits = encoder.io_word;
1856
+
1857
+ if (bits > notGRprefixmask[l]) {
1858
+ //zeroprefix = cnt_l_zeroes(bits);
1859
+
1860
+ if (bits > 0x007FFFFF) {
1861
+ zeroprefix = lzeroes[bits >>> 24];
1862
+ } else if (bits > 0x00007FFF) {
1863
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
1864
+ } else if (bits > 0x0000007F) {
1865
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
1866
+ } else {
1867
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
1868
+ }
1869
+
1870
+ codewordlen = zeroprefix + 1 + l;
1871
+ prevCorrelatedB = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
1872
+ } else {
1873
+ codewordlen = notGRcwlen[l];
1874
+ prevCorrelatedB = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
1875
+ }
1876
+
1877
+
1878
+ correlate_row_b[i] = prevCorrelatedB;
1879
+
1880
+ pb = ((((xlatL2U[prevCorrelatedB] +
1881
+ ((pb +
1882
+ result[i_4++]) >>> 1)) & bpc_mask)));
1883
+
1884
+ //INLINING EATBITS
1885
+ available_bits = encoder.io_available_bits;
1886
+ io_word = encoder.io_word;
1887
+
1888
+ delta = available_bits - codewordlen;
1889
+
1890
+ io_word = io_word << codewordlen;
1891
+
1892
+ //enough bits
1893
+ if (delta >= 0) {
1894
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
1895
+ encoder.io_available_bits = delta;
1896
+ encoder.io_word = io_word;
1897
+ } else {
1898
+ io_next_word = encoder.io_next_word;
1899
+ //not enough bits
1900
+ delta = -delta; //bits missing
1901
+ io_word = (io_word | (io_next_word << delta) >>> 0);
1902
+
1903
+ ///////////////////
1904
+ //read io word (inlined for perforemance)
1905
+
1906
+ io_next_word = usr[encoder.io_now++];
1907
+ //end read io_word
1908
+ /////////////////
1909
+
1910
+ available_bits = 32 - delta;
1911
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
1912
+
1913
+ encoder.io_available_bits = available_bits;
1914
+ encoder.io_word = io_word;
1915
+ encoder.io_next_word = io_next_word;
1916
+ }
1917
+ //END INLINING
1918
+ ////////////////////// END INLINING
1919
+
1920
+ /**
1921
+ pr = UNCOMPRESS_ONE(channel_r, i, i_1, i_4, bpc_mask, encoder, correlate_row_r, offset, result, 0, xlatL2U, buckets_ptrs_r, pr);
1922
+ pg = UNCOMPRESS_ONE(channel_g, i, i_1, i_4, bpc_mask, encoder, correlate_row_g, offset, result, 1, xlatL2U, buckets_ptrs_g, pg);
1923
+ pb = UNCOMPRESS_ONE(channel_b, i, i_1, i_4, bpc_mask, encoder, correlate_row_b, offset, result, 2, xlatL2U, buckets_ptrs_b, pb);
1924
+ **/
1925
+
1926
+
1927
+ //this is inlined appendPixel
1928
+ resultData[pxCnt++] =
1929
+ computedAlpha | // alpha
1930
+ pb << 16 | // blue
1931
+ pg << 8 | // green
1932
+ pr; // red
1933
+ //cnt += 4;
1934
+ i_4++; //skip alpha
1935
+ }
1936
+ if (!rle) {
1937
+ //UPDATE_MODEL(stopidx, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
1938
+ //inlining update_model
1939
+ stopidx_sub1 = stopidx - 1;
1940
+ real_update_model(rgb_state, buckets_ptrs_r[correlate_row_r[stopidx_sub1]],
1941
+ correlate_row_r[stopidx], bpc);
1942
+ real_update_model(rgb_state, buckets_ptrs_g[correlate_row_g[stopidx_sub1]],
1943
+ correlate_row_g[stopidx], bpc);
1944
+ real_update_model(rgb_state, buckets_ptrs_b[correlate_row_b[stopidx_sub1]],
1945
+ correlate_row_b[stopidx], bpc);
1946
+ //end inlining
1947
+
1948
+ rgb_state.tabrand_seed++;
1949
+ stopidx = i + ((tabrand_chaos[rgb_state.tabrand_seed & tabrand_seedmask]) & waitmask);
1950
+
1951
+
1952
+ } else {
1953
+ break;
1954
+ }
1955
+ }
1956
+
1957
+ if (!rle) {
1958
+ i_4 = offset + i * 4;
1959
+ for (; i < end; i++) {
1960
+ //ci = offset32+i;
1961
+ //rle = RLE_PRED(i, encoder, ci, currentOffset32, run_index);
1962
+ //RLE_PRED INLINE
1963
+ //inlined same_pixel, see original rle_pred
1964
+ i4sub = i_4 / 4;
1965
+ if (resultData[i4sub - 1] === resultData[i4sub]) { //fila de arriba
1966
+ prev_row = currentOffset32 + i - 1;
1967
+ if (resultData[prev_row - 1] === resultData[prev_row]) { //pixel de la izquierda
1968
+ if (run_index !== i && i > 2) {
1969
+ rle = true;
1970
+ break;
1971
+ }
1972
+ }
1973
+ }
1974
+
1975
+ //END INLINE*/
1976
+
1977
+
1978
+ ////////////////////// INLINING UNCOMPRESS_ONE
1979
+ //r
1980
+ //ret = golomb_decoding(buckets_ptrs_r[prevCorrelatedR].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
1981
+ //prevCorrelatedR = ret[0];
1982
+ //codewordlen = ret[1];
1983
+ l = buckets_ptrs_r[prevCorrelatedR].bestcode;
1984
+ bits = encoder.io_word;
1985
+
1986
+ if (bits > notGRprefixmask[l]) {
1987
+ //zeroprefix = cnt_l_zeroes(bits);
1988
+
1989
+ if (bits > 0x007FFFFF) {
1990
+ zeroprefix = lzeroes[bits >>> 24];
1991
+ } else if (bits > 0x00007FFF) {
1992
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
1993
+ } else if (bits > 0x0000007F) {
1994
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
1995
+ } else {
1996
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
1997
+ }
1998
+
1999
+ codewordlen = zeroprefix + 1 + l;
2000
+ prevCorrelatedR = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2001
+ } else {
2002
+ codewordlen = notGRcwlen[l];
2003
+ prevCorrelatedR = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2004
+ }
2005
+
2006
+ correlate_row_r[i] = prevCorrelatedR;
2007
+
2008
+ pr = ((((xlatL2U[prevCorrelatedR] +
2009
+ ((pr +
2010
+ result[i_4++]) >>> 1)) & bpc_mask)));
2011
+
2012
+ //INLINING EATBITS
2013
+ available_bits = encoder.io_available_bits;
2014
+ io_word = encoder.io_word;
2015
+
2016
+ delta = available_bits - codewordlen;
2017
+
2018
+ io_word = io_word << codewordlen;
2019
+
2020
+ //enough bits
2021
+ if (delta >= 0) {
2022
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
2023
+ encoder.io_available_bits = delta;
2024
+ encoder.io_word = io_word;
2025
+ } else {
2026
+ io_next_word = encoder.io_next_word;
2027
+ //not enough bits
2028
+ delta = -delta; //bits missing
2029
+ io_word = (io_word | (io_next_word << delta) >>> 0);
2030
+
2031
+ ///////////////////
2032
+ //read io word (inlined for perforemance)
2033
+
2034
+ io_next_word = usr[encoder.io_now++];
2035
+ //end read io_word
2036
+ /////////////////
2037
+
2038
+ available_bits = 32 - delta;
2039
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
2040
+
2041
+ encoder.io_available_bits = available_bits;
2042
+ encoder.io_word = io_word;
2043
+ encoder.io_next_word = io_next_word;
2044
+ }
2045
+ //END INLINING
2046
+
2047
+ //g
2048
+ // ret = golomb_decoding(buckets_ptrs_g[prevCorrelatedG].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2049
+ // prevCorrelatedG = ret[0];
2050
+ // codewordlen = ret[1];
2051
+
2052
+ l = buckets_ptrs_g[prevCorrelatedG].bestcode;
2053
+ bits = encoder.io_word;
2054
+
2055
+ if (bits > notGRprefixmask[l]) {
2056
+ //zeroprefix = cnt_l_zeroes(bits);
2057
+
2058
+ if (bits > 0x007FFFFF) {
2059
+ zeroprefix = lzeroes[bits >>> 24];
2060
+ } else if (bits > 0x00007FFF) {
2061
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2062
+ } else if (bits > 0x0000007F) {
2063
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
2064
+ } else {
2065
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
2066
+ }
2067
+
2068
+ codewordlen = zeroprefix + 1 + l;
2069
+ prevCorrelatedG = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2070
+ } else {
2071
+ codewordlen = notGRcwlen[l];
2072
+ prevCorrelatedG = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2073
+ }
2074
+
2075
+ correlate_row_g[i] = prevCorrelatedG;
2076
+
2077
+ pg = ((((xlatL2U[prevCorrelatedG] +
2078
+ ((pg +
2079
+ result[i_4++]) >>> 1)) & bpc_mask)));
2080
+
2081
+ //INLINING EATBITS
2082
+ available_bits = encoder.io_available_bits;
2083
+ io_word = encoder.io_word;
2084
+
2085
+ delta = available_bits - codewordlen;
2086
+
2087
+ io_word = io_word << codewordlen;
2088
+
2089
+ //enough bits
2090
+ if (delta >= 0) {
2091
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
2092
+ encoder.io_available_bits = delta;
2093
+ encoder.io_word = io_word;
2094
+ } else {
2095
+ io_next_word = encoder.io_next_word;
2096
+ //not enough bits
2097
+ delta = -delta; //bits missing
2098
+ io_word = (io_word | (io_next_word << delta) >>> 0);
2099
+
2100
+ ///////////////////
2101
+ //read io word (inlined for perforemance)
2102
+
2103
+ io_next_word = usr[encoder.io_now++];
2104
+ //end read io_word
2105
+ /////////////////
2106
+
2107
+ available_bits = 32 - delta;
2108
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
2109
+
2110
+ encoder.io_available_bits = available_bits;
2111
+ encoder.io_word = io_word;
2112
+ encoder.io_next_word = io_next_word;
2113
+ }
2114
+ //END INLINING
2115
+
2116
+ //b
2117
+ // ret = golomb_decoding(buckets_ptrs_b[prevCorrelatedB].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2118
+ // prevCorrelatedB = ret[0];
2119
+ // codewordlen = ret[1];
2120
+ //
2121
+
2122
+ l = buckets_ptrs_b[prevCorrelatedB].bestcode;
2123
+ bits = encoder.io_word;
2124
+
2125
+ if (bits > notGRprefixmask[l]) {
2126
+ //zeroprefix = cnt_l_zeroes(bits);
2127
+
2128
+ if (bits > 0x007FFFFF) {
2129
+ zeroprefix = lzeroes[bits >>> 24];
2130
+ } else if (bits > 0x00007FFF) {
2131
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2132
+ } else if (bits > 0x0000007F) {
2133
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff)];
2134
+ } else {
2135
+ zeroprefix = lzeroes24[(bits & 0x000000ff)];
2136
+ }
2137
+
2138
+ codewordlen = zeroprefix + 1 + l;
2139
+ prevCorrelatedB = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2140
+ } else {
2141
+ codewordlen = notGRcwlen[l];
2142
+ prevCorrelatedB = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2143
+ }
2144
+ correlate_row_b[i] = prevCorrelatedB;
2145
+
2146
+ pb = ((((xlatL2U[prevCorrelatedB] +
2147
+ ((pb +
2148
+ result[i_4++]) >>> 1)) & bpc_mask)));
2149
+
2150
+ //INLINING EATBITS
2151
+ available_bits = encoder.io_available_bits;
2152
+ io_word = encoder.io_word;
2153
+
2154
+ delta = available_bits - codewordlen;
2155
+
2156
+ io_word = io_word << codewordlen;
2157
+
2158
+ //enough bits
2159
+ if (delta >= 0) {
2160
+ io_word = (io_word | encoder.io_next_word >>> delta) >>> 0;
2161
+ encoder.io_available_bits = delta;
2162
+ encoder.io_word = io_word;
2163
+ } else {
2164
+ io_next_word = encoder.io_next_word;
2165
+ //not enough bits
2166
+ delta = -delta; //bits missing
2167
+ io_word = (io_word | (io_next_word << delta) >>> 0);
2168
+
2169
+ ///////////////////
2170
+ //read io word (inlined for perforemance)
2171
+
2172
+ io_next_word = usr[encoder.io_now++];
2173
+ //end read io_word
2174
+ /////////////////
2175
+
2176
+ available_bits = 32 - delta;
2177
+ io_word = (io_word | (io_next_word >>> available_bits)) >>> 0;
2178
+
2179
+ encoder.io_available_bits = available_bits;
2180
+ encoder.io_word = io_word;
2181
+ encoder.io_next_word = io_next_word;
2182
+ }
2183
+ //END INLINING
2184
+ ///////////////////// END INLINING
2185
+
2186
+ /**
2187
+ pr = UNCOMPRESS_ONE(channel_r, i, i_1, i_4, bpc_mask, encoder, correlate_row_r, offset, result, 0, xlatL2U, buckets_ptrs_r, pr);
2188
+ pg = UNCOMPRESS_ONE(channel_g, i, i_1, i_4, bpc_mask, encoder, correlate_row_g, offset, result, 1, xlatL2U, buckets_ptrs_g, pg);
2189
+ pb = UNCOMPRESS_ONE(channel_b, i, i_1, i_4, bpc_mask, encoder, correlate_row_b, offset, result, 2, xlatL2U, buckets_ptrs_b, pb);
2190
+ **/
2191
+
2192
+ //this is inlined apendPixel
2193
+ resultData[pxCnt++] =
2194
+ (255 << 24) | // alpha
2195
+ (pb << 16) | // blue
2196
+ (pg << 8) | // green
2197
+ pr; // red
2198
+ //cnt += 4;
2199
+ i_4++;
2200
+ }
2201
+ if (!rle) {
2202
+ rgb_state.waitcnt = stopidx - end;
2203
+ encoder.cnt = pxCnt * 4;
2204
+ encoder.pxCnt = pxCnt;
2205
+ return;
2206
+ }
2207
+ }
2208
+
2209
+ ///END of critical part
2210
+
2211
+ //RLE
2212
+ rgb_state.waitcnt = stopidx - i;
2213
+ run_index = i;
2214
+ run_end = decode_run(encoder);
2215
+
2216
+ i = run_end + i;
2217
+ while (run_end-- > 0) {
2218
+ //this is inlined appendPixel
2219
+ resultData[pxCnt++] =
2220
+ computedAlpha | // alpha
2221
+ pb << 16 | // blue
2222
+ pg << 8 | // green
2223
+ pr; // red
2224
+ //cnt += 4;
2225
+ }
2226
+
2227
+
2228
+ if (i === end) {
2229
+ encoder.cnt = pxCnt * 4;
2230
+ encoder.pxCnt = pxCnt;
2231
+ return;
2232
+ }
2233
+
2234
+ i_1 = i - 1;
2235
+ prevCorrelatedR = correlate_row_r[i_1];
2236
+ prevCorrelatedG = correlate_row_g[i_1];
2237
+ prevCorrelatedB = correlate_row_b[i_1];
2238
+
2239
+ stopidx = i + rgb_state.waitcnt;
2240
+ rle = false;
2241
+ //END RLE
2242
+ }
2243
+ }
2244
+
2245
+ function uncompress_row_seg_a(encoder, i, end, bpc, bpc_mask, type, rgb_state) {
2246
+ var channel_r = encoder.channels[0];
2247
+ var channel_g = encoder.channels[1];
2248
+ var channel_b = encoder.channels[2];
2249
+
2250
+ var buckets_ptrs_r = channel_r._buckets_ptrs;
2251
+ var buckets_ptrs_g = channel_g._buckets_ptrs;
2252
+ var buckets_ptrs_b = channel_b._buckets_ptrs;
2253
+
2254
+ var correlate_row_r = channel_r.correlate_row;
2255
+ var correlate_row_g = channel_g.correlate_row;
2256
+ var correlate_row_b = channel_b.correlate_row;
2257
+
2258
+ var stopidx = 0;
2259
+
2260
+ var waitmask = wdi.JSQuic.bppmask[rgb_state.wmidx];
2261
+
2262
+ var run_index = 0;
2263
+ var run_end = 0;
2264
+
2265
+ var rle = false;
2266
+
2267
+ var computedWidth = encoder.computedWidth;
2268
+
2269
+ var offset = ((encoder.rows_completed - 1) * computedWidth);
2270
+ var currentOffset = ((encoder.rows_completed) * computedWidth);
2271
+
2272
+ var offset32 = ((encoder.rows_completed - 1) * computedWidth / 4);
2273
+ var currentOffset32 = ((encoder.rows_completed) * computedWidth / 4);
2274
+
2275
+ var result = encoder.result;
2276
+ var resultData = encoder.resultData;
2277
+
2278
+ var i_1, i_4; //for performance improvments
2279
+
2280
+ var xlatL2U = wdi.xlatL2U;
2281
+
2282
+ var pr, pg, pb;
2283
+
2284
+ var prevCorrelatedR, prevCorrelatedG, prevCorrelatedB;
2285
+
2286
+ var eatbits = encoder.eatbits;
2287
+ var tabrand = wdi.JSQuic.tabrand;
2288
+ var decode_run = wdi.JSQuic.decode_run;
2289
+
2290
+ var ret, codewordlen, l, bits, zeroprefix;
2291
+ var lzeroes = wdi.JSQuic.lzeroes;
2292
+ var lzeroes8 = wdi.JSQuic.lzeroes8;
2293
+ var lzeroes16 = wdi.JSQuic.lzeroes16;
2294
+ var lzeroes24 = wdi.JSQuic.lzeroes24;
2295
+
2296
+ var cnt = encoder.cnt;
2297
+ var pxCnt = encoder.pxCnt;
2298
+
2299
+ var bppmask = wdi.JSQuic.bppmask;
2300
+
2301
+ var notGRprefixmask = wdi.notGRprefixmask;
2302
+ var notGRcwlen = wdi.notGRcwlen;
2303
+ var nGRcodewords = wdi.nGRcodewords;
2304
+ var notGRsuffixlen = wdi.notGRsuffixlen;
2305
+
2306
+ var prev_row, i4sub, ci;
2307
+
2308
+ var computedAlpha = 255 << 24;
2309
+
2310
+ if (!i) {
2311
+ pr = UNCOMPRESS_ONE_0(channel_r, encoder, bpc_mask, offset);
2312
+ pg = UNCOMPRESS_ONE_0(channel_g, encoder, bpc_mask, offset);
2313
+ pb = UNCOMPRESS_ONE_0(channel_b, encoder, bpc_mask, offset);
2314
+
2315
+ prevCorrelatedR = correlate_row_r[0];
2316
+ prevCorrelatedG = correlate_row_g[0];
2317
+ prevCorrelatedB = correlate_row_b[0];
2318
+ //inlined appendPixel
2319
+ resultData[pxCnt++] =
2320
+ (255 << 24) | // alpha
2321
+ (pb << 16) | // blue
2322
+ (pg << 8) | // green
2323
+ pr; // red
2324
+ //cnt += 4;
2325
+
2326
+ if (rgb_state.waitcnt) {
2327
+ --rgb_state.waitcnt;
2328
+ } else {
2329
+ rgb_state.waitcnt = (tabrand.call(wdi.JSQuic, rgb_state) & waitmask);
2330
+ UPDATE_MODEL(0, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
2331
+ }
2332
+ stopidx = ++i + rgb_state.waitcnt;
2333
+ } else {
2334
+ stopidx = i + rgb_state.waitcnt;
2335
+ pr = result[cnt - 4];
2336
+ pg = result[cnt - 3];
2337
+ pb = result[cnt - 2];
2338
+
2339
+ prevCorrelatedR = correlate_row_r[i - 1];
2340
+ prevCorrelatedG = correlate_row_g[i - 1];
2341
+ prevCorrelatedB = correlate_row_b[i - 1];
2342
+ }
2343
+
2344
+
2345
+ while (true) {
2346
+ while (stopidx < end) {
2347
+ i_4 = offset + i * 4;
2348
+ for (; i <= stopidx; i++) {
2349
+ /////// critical part
2350
+ rle = RLE_PRED_RGB_A(i, encoder, i_4, currentOffset, run_index);
2351
+ //RLE_PRED INLINE
2352
+ /*if(run_index !== i && i > 2) {
2353
+ //inlined same_pixel, see original rle_pred
2354
+ i4sub = i_4/4;
2355
+ if(encoder.resultData[i4sub-1] === encoder.resultData[i4sub]) { //fila de arriba
2356
+ var prev_row = currentOffset32 + i-1;
2357
+ if(encoder.resultData[prev_row-1] === encoder.resultData[prev_row]) { //pixel de la izquierda
2358
+ rle = true;
2359
+ }
2360
+ }
2361
+ }*/
2362
+ //END INLINE
2363
+ if (rle) break;
2364
+
2365
+
2366
+ /////////////////////// INLINING UNCOMPRESS_ONE
2367
+ //r
2368
+ /////////////////////// INLINING GOLOMB_DECODING
2369
+ //ret = golomb_decoding(buckets_ptrs_r[prevCorrelatedR].bestcode,
2370
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2371
+ l = buckets_ptrs_r[prevCorrelatedR].bestcode;
2372
+ bits = encoder.io_word;
2373
+ if (bits > notGRprefixmask[l]) {
2374
+ zeroprefix = cnt_l_zeroes(bits);
2375
+ /*
2376
+ if (bits > 0x007FFFFF) {
2377
+ zeroprefix = lzeroes[bits >>> 24];
2378
+ } else if (bits > 0x00007FFF) {
2379
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2380
+ } else if (bits > 0x0000007F) {
2381
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2382
+ } else {
2383
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2384
+ }*/
2385
+
2386
+ codewordlen = zeroprefix + 1 + l;
2387
+ prevCorrelatedR = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2388
+ } else {
2389
+ codewordlen = notGRcwlen[l];
2390
+ prevCorrelatedR = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2391
+ }
2392
+
2393
+ correlate_row_r[i] = prevCorrelatedR;
2394
+
2395
+ pr = ((((xlatL2U[prevCorrelatedR] +
2396
+ ((pr +
2397
+ result[i_4++]) >>> 1)) & bpc_mask)));
2398
+
2399
+ eatbits(codewordlen, encoder);
2400
+
2401
+ //g
2402
+ ///////////////////////////////////////INLINING golomb_decoding
2403
+
2404
+ //ret = golomb_decoding(buckets_ptrs_g[prevCorrelatedG].bestcode,
2405
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2406
+ l = buckets_ptrs_g[prevCorrelatedG].bestcode;
2407
+ bits = encoder.io_word;
2408
+
2409
+ if (bits > notGRprefixmask[l]) {
2410
+ zeroprefix = cnt_l_zeroes(bits);
2411
+ /*
2412
+ if (bits > 0x007FFFFF) {
2413
+ zeroprefix = lzeroes[bits >>> 24];
2414
+ } else if (bits > 0x00007FFF) {
2415
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2416
+ } else if (bits > 0x0000007F) {
2417
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2418
+ } else {
2419
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2420
+ }*/
2421
+
2422
+ codewordlen = zeroprefix + 1 + l;
2423
+ prevCorrelatedG = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2424
+ } else {
2425
+ codewordlen = notGRcwlen[l];
2426
+ prevCorrelatedG = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2427
+ }
2428
+
2429
+ correlate_row_g[i] = prevCorrelatedG;
2430
+
2431
+ pg = ((((xlatL2U[prevCorrelatedG] +
2432
+ ((pg +
2433
+ result[i_4++]) >>> 1)) & bpc_mask)));
2434
+
2435
+ eatbits(codewordlen, encoder);
2436
+
2437
+ //b
2438
+ ////////////////////////////////// INLINING golomb_decoding
2439
+ //ret = golomb_decoding(buckets_ptrs_b[prevCorrelatedB].bestcode,
2440
+ // encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2441
+ l = buckets_ptrs_b[prevCorrelatedB].bestcode;
2442
+ bits = encoder.io_word;
2443
+
2444
+ if (bits > notGRprefixmask[l]) {
2445
+ zeroprefix = cnt_l_zeroes(bits);
2446
+ /*
2447
+ if (bits > 0x007FFFFF) {
2448
+ zeroprefix = lzeroes[bits >>> 24];
2449
+ } else if (bits > 0x00007FFF) {
2450
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2451
+ } else if (bits > 0x0000007F) {
2452
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2453
+ } else {
2454
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2455
+ }*/
2456
+
2457
+ codewordlen = zeroprefix + 1 + l;
2458
+ prevCorrelatedB = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2459
+ } else {
2460
+ codewordlen = notGRcwlen[l];
2461
+ prevCorrelatedB = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2462
+ }
2463
+
2464
+
2465
+ correlate_row_b[i] = prevCorrelatedB;
2466
+
2467
+ pb = ((((xlatL2U[prevCorrelatedB] +
2468
+ ((pb +
2469
+ result[i_4++]) >>> 1)) & bpc_mask)));
2470
+
2471
+ eatbits(codewordlen, encoder);
2472
+ ////////////////////// END INLINING
2473
+
2474
+ /**
2475
+ pr = UNCOMPRESS_ONE(channel_r, i, i_1, i_4, bpc_mask, encoder, correlate_row_r, offset, result, 0, xlatL2U, buckets_ptrs_r, pr);
2476
+ pg = UNCOMPRESS_ONE(channel_g, i, i_1, i_4, bpc_mask, encoder, correlate_row_g, offset, result, 1, xlatL2U, buckets_ptrs_g, pg);
2477
+ pb = UNCOMPRESS_ONE(channel_b, i, i_1, i_4, bpc_mask, encoder, correlate_row_b, offset, result, 2, xlatL2U, buckets_ptrs_b, pb);
2478
+ **/
2479
+
2480
+
2481
+ //this is inlined appendPixel
2482
+ resultData[pxCnt++] =
2483
+ computedAlpha | // alpha
2484
+ pb << 16 | // blue
2485
+ pg << 8 | // green
2486
+ pr; // red
2487
+ //cnt += 4;
2488
+ i_4++; //skip alpha
2489
+ }
2490
+ if (!rle) {
2491
+ UPDATE_MODEL(stopidx, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
2492
+ stopidx = i + (tabrand.call(wdi.JSQuic, rgb_state) & waitmask);
2493
+ } else {
2494
+ break;
2495
+ }
2496
+ }
2497
+
2498
+ if (!rle) {
2499
+ i_4 = offset + i * 4;
2500
+ for (; i < end; i++) {
2501
+ rle = RLE_PRED_RGB_A(i, encoder, i_4, currentOffset, run_index);
2502
+ //RLE_PRED INLINE
2503
+ /*if(run_index !== i && i > 2) {
2504
+ //inlined same_pixel, see original rle_pred
2505
+ i4sub = i_4/4;
2506
+ if(encoder.resultData[i4sub-1] === encoder.resultData[i4sub]) { //fila de arriba
2507
+ var prev_row = currentOffset32 + i-1;
2508
+ if(encoder.resultData[prev_row-1] === encoder.resultData[prev_row]) { //pixel de la izquierda
2509
+ rle = true;
2510
+ }
2511
+ }
2512
+ }
2513
+ //END INLINE*/
2514
+ if (rle) break;
2515
+
2516
+
2517
+ ////////////////////// INLINING UNCOMPRESS_ONE
2518
+ //r
2519
+ //ret = golomb_decoding(buckets_ptrs_r[prevCorrelatedR].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2520
+ //prevCorrelatedR = ret[0];
2521
+ //codewordlen = ret[1];
2522
+ l = buckets_ptrs_r[prevCorrelatedR].bestcode;
2523
+ bits = encoder.io_word;
2524
+
2525
+ if (bits > notGRprefixmask[l]) {
2526
+ zeroprefix = cnt_l_zeroes(bits);
2527
+ /*
2528
+ if (bits > 0x007FFFFF) {
2529
+ zeroprefix = lzeroes[bits >>> 24];
2530
+ } else if (bits > 0x00007FFF) {
2531
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2532
+ } else if (bits > 0x0000007F) {
2533
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2534
+ } else {
2535
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2536
+ }*/
2537
+
2538
+ codewordlen = zeroprefix + 1 + l;
2539
+ prevCorrelatedR = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2540
+ } else {
2541
+ codewordlen = notGRcwlen[l];
2542
+ prevCorrelatedR = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2543
+ }
2544
+
2545
+ correlate_row_r[i] = prevCorrelatedR;
2546
+
2547
+ pr = ((((xlatL2U[prevCorrelatedR] +
2548
+ ((pr +
2549
+ result[i_4++]) >>> 1)) & bpc_mask)));
2550
+
2551
+ eatbits(codewordlen, encoder);
2552
+
2553
+ //g
2554
+ // ret = golomb_decoding(buckets_ptrs_g[prevCorrelatedG].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2555
+ // prevCorrelatedG = ret[0];
2556
+ // codewordlen = ret[1];
2557
+
2558
+ l = buckets_ptrs_g[prevCorrelatedG].bestcode;
2559
+ bits = encoder.io_word;
2560
+
2561
+ if (bits > notGRprefixmask[l]) {
2562
+ zeroprefix = cnt_l_zeroes(bits);
2563
+ /*
2564
+ if (bits > 0x007FFFFF) {
2565
+ zeroprefix = lzeroes[bits >>> 24];
2566
+ } else if (bits > 0x00007FFF) {
2567
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2568
+ } else if (bits > 0x0000007F) {
2569
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2570
+ } else {
2571
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2572
+ }*/
2573
+
2574
+ codewordlen = zeroprefix + 1 + l;
2575
+ prevCorrelatedG = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2576
+ } else {
2577
+ codewordlen = notGRcwlen[l];
2578
+ prevCorrelatedG = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2579
+ }
2580
+
2581
+ correlate_row_g[i] = prevCorrelatedG;
2582
+
2583
+ pg = ((((xlatL2U[prevCorrelatedG] +
2584
+ ((pg +
2585
+ result[i_4++]) >>> 1)) & bpc_mask)));
2586
+
2587
+ eatbits(codewordlen, encoder);
2588
+
2589
+ //b
2590
+ // ret = golomb_decoding(buckets_ptrs_b[prevCorrelatedB].bestcode, encoder.io_word, bppmask, notGRprefixmask, notGRcwlen, nGRcodewords, notGRsuffixlen);
2591
+ // prevCorrelatedB = ret[0];
2592
+ // codewordlen = ret[1];
2593
+ //
2594
+
2595
+ l = buckets_ptrs_b[prevCorrelatedB].bestcode;
2596
+ bits = encoder.io_word;
2597
+
2598
+ if (bits > notGRprefixmask[l]) {
2599
+ zeroprefix = cnt_l_zeroes(bits);
2600
+ /*
2601
+ if (bits > 0x007FFFFF) {
2602
+ zeroprefix = lzeroes[bits >>> 24];
2603
+ } else if (bits > 0x00007FFF) {
2604
+ zeroprefix = lzeroes8[((bits >>> 16) & 0x000000ff)];
2605
+ } else if (bits > 0x0000007F) {
2606
+ zeroprefix = lzeroes16[((bits >>> 8) & 0x000000ff) ];
2607
+ } else {
2608
+ zeroprefix = lzeroes24[(bits & 0x000000ff) ];
2609
+ }*/
2610
+
2611
+ codewordlen = zeroprefix + 1 + l;
2612
+ prevCorrelatedB = ((zeroprefix << l)) | ((bits >>> (32 - codewordlen)) & bppmask[l]);
2613
+ } else {
2614
+ codewordlen = notGRcwlen[l];
2615
+ prevCorrelatedB = nGRcodewords[l] + ((bits) >>> (32 - codewordlen) & bppmask[notGRsuffixlen[l]]);
2616
+ }
2617
+ correlate_row_b[i] = prevCorrelatedB;
2618
+
2619
+ pb = ((((xlatL2U[prevCorrelatedB] +
2620
+ ((pb +
2621
+ result[i_4++]) >>> 1)) & bpc_mask)));
2622
+
2623
+ eatbits(codewordlen, encoder);
2624
+ ///////////////////// END INLINING
2625
+
2626
+ /**
2627
+ pr = UNCOMPRESS_ONE(channel_r, i, i_1, i_4, bpc_mask, encoder, correlate_row_r, offset, result, 0, xlatL2U, buckets_ptrs_r, pr);
2628
+ pg = UNCOMPRESS_ONE(channel_g, i, i_1, i_4, bpc_mask, encoder, correlate_row_g, offset, result, 1, xlatL2U, buckets_ptrs_g, pg);
2629
+ pb = UNCOMPRESS_ONE(channel_b, i, i_1, i_4, bpc_mask, encoder, correlate_row_b, offset, result, 2, xlatL2U, buckets_ptrs_b, pb);
2630
+ **/
2631
+
2632
+ //this is inlined apendPixel
2633
+ resultData[pxCnt++] =
2634
+ (255 << 24) | // alpha
2635
+ (pb << 16) | // blue
2636
+ (pg << 8) | // green
2637
+ pr; // red
2638
+ //cnt += 4;
2639
+ i_4++;
2640
+ }
2641
+ if (!rle) {
2642
+ rgb_state.waitcnt = stopidx - end;
2643
+ encoder.cnt = pxCnt * 4;
2644
+ encoder.pxCnt = pxCnt;
2645
+ return;
2646
+ }
2647
+ }
2648
+
2649
+ ///END of critical part
2650
+
2651
+ //RLE
2652
+ rgb_state.waitcnt = stopidx - i;
2653
+ run_index = i;
2654
+ run_end = decode_run(encoder);
2655
+
2656
+ i = run_end + i;
2657
+ while (run_end-- > 0) {
2658
+ //this is inlined appendPixel
2659
+ resultData[pxCnt++] =
2660
+ computedAlpha | // alpha
2661
+ pb << 16 | // blue
2662
+ pg << 8 | // green
2663
+ pr; // red
2664
+ //cnt += 4;
2665
+ }
2666
+
2667
+
2668
+ if (i === end) {
2669
+ encoder.cnt = pxCnt * 4;
2670
+ encoder.pxCnt = pxCnt;
2671
+ return;
2672
+ }
2673
+
2674
+ i_1 = i - 1;
2675
+ prevCorrelatedR = correlate_row_r[i_1];
2676
+ prevCorrelatedG = correlate_row_g[i_1];
2677
+ prevCorrelatedB = correlate_row_b[i_1];
2678
+
2679
+ stopidx = i + rgb_state.waitcnt;
2680
+ rle = false;
2681
+ //END RLE
2682
+ }
2683
+ }
2684
+
2685
+
2686
+ function quic_uncompress_row0(encoder, channels, bpc, type) {
2687
+ var bpc_mask = wdi.JSQuic.BPC_MASK[type];
2688
+ var pos = 0;
2689
+ var width = encoder.width;
2690
+ while ((wdi.JSQuic.wmimax > encoder.rgb_state.wmidx) && (encoder.rgb_state.wmileft <= width)) {
2691
+ if (encoder.rgb_state.wmileft) {
2692
+ uncompress_row0_seg(
2693
+ encoder,
2694
+ pos,
2695
+ pos + encoder.rgb_state.wmileft,
2696
+ wdi.JSQuic.bppmask[encoder.rgb_state.wmidx],
2697
+ bpc,
2698
+ bpc_mask,
2699
+ type
2700
+ );
2701
+ pos += encoder.rgb_state.wmileft;
2702
+ width -= encoder.rgb_state.wmileft;
2703
+ }
2704
+
2705
+ encoder.rgb_state.wmidx++;
2706
+ wdi.JSQuic.set_wm_trigger(encoder.rgb_state);
2707
+ encoder.rgb_state.wmileft = wdi.JSQuic.wminext;
2708
+ }
2709
+
2710
+ if (width) {
2711
+ uncompress_row0_seg(
2712
+ encoder,
2713
+ pos,
2714
+ pos + width,
2715
+ wdi.JSQuic.bppmask[encoder.rgb_state.wmidx],
2716
+ bpc,
2717
+ bpc_mask,
2718
+ type
2719
+ );
2720
+ if (wdi.JSQuic.wmimax > encoder.rgb_state.wmidx) {
2721
+ encoder.rgb_state.wmileft -= width;
2722
+ }
2723
+ }
2724
+ }
2725
+
2726
+ function uncompress_row0_seg(encoder, i, end, waitmask, bpc, bpc_mask, type) {
2727
+ var channel_r = encoder.channels[0];
2728
+ var channel_g = encoder.channels[1];
2729
+ var channel_b = encoder.channels[2];
2730
+
2731
+ var correlate_row_r = channel_r.correlate_row;
2732
+ var correlate_row_g = channel_g.correlate_row;
2733
+ var correlate_row_b = channel_b.correlate_row;
2734
+
2735
+ var stopidx = 0;
2736
+
2737
+ var pr, pg, pb;
2738
+
2739
+ if (!i) {
2740
+ pr = UNCOMPRESS_ONE_ROW0_0(channel_r);
2741
+ pg = UNCOMPRESS_ONE_ROW0_0(channel_g);
2742
+ pb = UNCOMPRESS_ONE_ROW0_0(channel_b);
2743
+
2744
+ encoder.appendPixel(pr, pg, pb);
2745
+
2746
+ if (encoder.rgb_state.waitcnt) {
2747
+ --encoder.rgb_state.waitcnt;
2748
+ } else {
2749
+ encoder.rgb_state.waitcnt = (wdi.JSQuic.tabrand(encoder.rgb_state) & waitmask);
2750
+ UPDATE_MODEL(0, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
2751
+ }
2752
+ stopidx = ++i + encoder.rgb_state.waitcnt;
2753
+ } else {
2754
+ stopidx = i + encoder.rgb_state.waitcnt;
2755
+ }
2756
+
2757
+ while (stopidx < end) {
2758
+ for (; i <= stopidx; i++) {
2759
+ pr = UNCOMPRESS_ONE_ROW0(channel_r, i, bpc_mask, encoder, correlate_row_r, pr);
2760
+ pg = UNCOMPRESS_ONE_ROW0(channel_g, i, bpc_mask, encoder, correlate_row_g, pg);
2761
+ pb = UNCOMPRESS_ONE_ROW0(channel_b, i, bpc_mask, encoder, correlate_row_b, pb);
2762
+
2763
+ encoder.appendPixel(pr, pg, pb);
2764
+ }
2765
+ UPDATE_MODEL(stopidx, encoder, bpc, correlate_row_r, correlate_row_g, correlate_row_b);
2766
+ stopidx = i + (wdi.JSQuic.tabrand(encoder.rgb_state) & waitmask);
2767
+ }
2768
+
2769
+ for (; i < end; i++) {
2770
+ pr = UNCOMPRESS_ONE_ROW0(channel_r, i, bpc_mask, encoder, correlate_row_r, pr);
2771
+ pg = UNCOMPRESS_ONE_ROW0(channel_g, i, bpc_mask, encoder, correlate_row_g, pg);
2772
+ pb = UNCOMPRESS_ONE_ROW0(channel_b, i, bpc_mask, encoder, correlate_row_b, pb);
2773
+ encoder.appendPixel(pr, pg, pb);
2774
+ }
2775
+ encoder.rgb_state.waitcnt = stopidx - end;
2776
+ }
2777
+
2778
+ function UNCOMPRESS_ONE_0(channel, encoder, bpc_mask, offset) {
2779
+ var ret, codewordlen;
2780
+ channel.oldFirst = channel.correlate_row[0];
2781
+ ret = golomb_decoding(find_bucket(channel,
2782
+ channel.correlate_row[0]).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
2783
+ channel.correlate_row[0] = ret[0];
2784
+ codewordlen = ret[1];
2785
+ var residuum = wdi.xlatL2U[channel.correlate_row[0]];
2786
+ var prev = encoder.result[offset + channel.num_channel]; //PIXEL_B
2787
+ var resultpixel = ((residuum + prev) & bpc_mask);
2788
+ encoder.eatbits(codewordlen, encoder);
2789
+ return resultpixel;
2790
+ }
2791
+
2792
+ function UNCOMPRESS_ONE(channel, i, i_1, i_4, bpc_mask, encoder, correlate_row, offset, result, num_channel, xlatL2U, buckets_ptrs, prev_pixel) {
2793
+ var ret, codewordlen;
2794
+ ret = golomb_decoding(buckets_ptrs[correlate_row[i_1]].bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
2795
+
2796
+ var data = ret[0];
2797
+ codewordlen = ret[1];
2798
+ correlate_row[i] = data;
2799
+
2800
+ var ret = ((((xlatL2U[data] +
2801
+ ((prev_pixel +
2802
+ result[offset + (i_4) + num_channel]) >>> 1)) & bpc_mask)));
2803
+
2804
+ encoder.eatbits(codewordlen, encoder);
2805
+ return ret;
2806
+ }
2807
+
2808
+
2809
+ function UNCOMPRESS_ONE_ROW0_0(channel) {
2810
+ var ret, codewordlen;
2811
+ var encoder = channel.encoder;
2812
+ ret = golomb_decoding(find_bucket(channel, 0).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
2813
+ channel.correlate_row[0] = ret[0]
2814
+ codewordlen = ret[1];
2815
+ var ret = wdi.xlatL2U[channel.correlate_row[0]];
2816
+ encoder.eatbits(codewordlen, encoder);
2817
+ return ret;
2818
+ }
2819
+
2820
+ function UNCOMPRESS_ONE_ROW0(channel, i, bpc_mask, encoder, correlate_row, prev_pixel) {
2821
+ var ret, codewordlen;
2822
+ ret = golomb_decoding(find_bucket(channel, correlate_row[i - 1]).bestcode, encoder.io_word, wdi.JSQuic.bppmask, wdi.notGRprefixmask, wdi.notGRcwlen, wdi.nGRcodewords, wdi.notGRsuffixlen);
2823
+ correlate_row[i] = ret[0];
2824
+ codewordlen = ret[1];
2825
+ var ret = CORELATE_0(encoder, channel, i, bpc_mask, correlate_row, prev_pixel);
2826
+ encoder.eatbits(codewordlen, encoder);
2827
+ return ret;
2828
+ }
2829
+
2830
+ function CORELATE_0(encoder, channel, curr, bpc_mask, correlate_row, prev_pixel) {
2831
+ return ((wdi.xlatL2U[correlate_row[curr]] + prev_pixel) & bpc_mask);
2832
+ }
2833
+
2834
+ function PIXEL_A(encoder) {
2835
+ return encoder.result[encoder.cnt - 4];
2836
+ }
2837
+
2838
+ function PIXEL_B(channel, encoder, pos, offset) {
2839
+ return encoder.result[offset + (pos * 4) + channel.num_channel];
2840
+ }
2841
+
2842
+ ///////////////////////////////////////////////////////////////////
2843
+ //LZ
2844
+
2845
+ var lzDecompress = {
2846
+ LZ_IMAGE_TYPE_INVALID: 0,
2847
+ LZ_IMAGE_TYPE_PLT1_LE: 1,
2848
+ LZ_IMAGE_TYPE_PLT1_BE: 2,
2849
+ LZ_IMAGE_TYPE_PLT4_LE: 3,
2850
+ LZ_IMAGE_TYPE_PLT4_BE: 4,
2851
+ LZ_IMAGE_TYPE_PLT8: 5,
2852
+ LZ_IMAGE_TYPE_RGB16: 6,
2853
+ LZ_IMAGE_TYPE_RGB24: 7,
2854
+ LZ_IMAGE_TYPE_RGB32: 8,
2855
+ LZ_IMAGE_TYPE_RGBA: 9,
2856
+ LZ_IMAGE_TYPE_XXXA: 10,
2857
+ LZPALETTE_FLAG_PAL_CACHE_ME: 1,
2858
+ LZPALETTE_FLAG_PAL_FROM_CACHE: 2,
2859
+ LZPALETTE_FLAG_TOP_DOWN: 4,
2860
+ PLT_PIXELS_PER_BYTE: [0, 8, 8, 2, 2, 1],
2861
+ PLT1_MASK: [1, 2, 4, 8, 16, 32, 64, 128],
2862
+
2863
+ lz_rgb32_decompress_rgb_opaque_reverse: function(arr) {
2864
+ //TODO: global alpha and uncouple code
2865
+
2866
+ var in_buf = new Uint8Array(arr);
2867
+
2868
+ var type = in_buf[2];
2869
+ var low = in_buf[5] * 256 + in_buf[4]; // 256 = Math.pow(16, 2)
2870
+ var high = in_buf[7] * 256 + in_buf[6]; // 256 = Math.pow(16, 2)
2871
+ var len = high * 65536 + low; // 65536 = Math.pow(16,4)
2872
+ var buf = new ArrayBuffer(len);
2873
+ var data = new Uint32Array(buf);
2874
+ var out_buf_len = len / 4 -1;
2875
+ var op = out_buf_len;
2876
+ var code, ref, ofs, b;
2877
+ var aux;
2878
+ var ctrl = in_buf[8];
2879
+ var offsetView;
2880
+ var encoder = 8; //padding
2881
+
2882
+ while (op >= 0) {
2883
+
2884
+ ctrl = in_buf[encoder++];
2885
+ //if ctrl is 0, there is no way for len to be > 0
2886
+ if (ctrl != 0 && (len = ctrl >> 5)!=0) { //>=32
2887
+ ref = op; //there is a reference to past bytes, the reference will be
2888
+ //provided as an offset to our position
2889
+ ofs = (ctrl & 31) << 8; //get the last 5 bits from ctrl
2890
+
2891
+ if (len == 7) {
2892
+ do {
2893
+ code = in_buf[encoder++];
2894
+ len += code;
2895
+ } while (code == 255);
2896
+ }
2897
+
2898
+ ofs += in_buf[encoder++];
2899
+ if (ofs == 0) {
2900
+ aux = data[ref+1]; //if osset is 0...it means just the prior pixel copied over and over....
2901
+ //in reverse mode, the prior pixel is just the next pixel to the right
2902
+
2903
+ while (len-- != 0) {
2904
+ data[op--] = aux;
2905
+ }
2906
+ } else {
2907
+ if (ofs == 8191) { //check if all the bits in ofs are 1, then get two more bytes
2908
+ ofs += (in_buf[encoder] << 8) + in_buf[encoder+1];
2909
+ encoder += 2;
2910
+ }
2911
+
2912
+ ref += ofs + 1;
2913
+
2914
+ while (len-- !== 0) {
2915
+ data[op--] = data[ref--];
2916
+ }
2917
+ }
2918
+ } else {
2919
+ do {
2920
+ data[op--] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder + 1] << 8 | in_buf[encoder + 2];
2921
+ encoder += 3;
2922
+ } while(ctrl--);
2923
+ }
2924
+ }
2925
+
2926
+ return buf;
2927
+ },
2928
+
2929
+ lz_rgb32_decompress_rgb: function(arr) {
2930
+ //TODO: global alpha and uncouple code
2931
+ var op = 0;
2932
+ var in_buf = new Uint8Array(arr);
2933
+
2934
+ var opaque = in_buf[1];
2935
+ var type = in_buf[2];
2936
+ var top_down = in_buf[3];
2937
+ if(opaque && !top_down) {
2938
+ //return lzDecompress.lz_rgb32_decompress_rgb_opaque_reverse(arr);
2939
+ }
2940
+ var low = in_buf[5] * 256 + in_buf[4]; // 256 = Math.pow(16, 2)
2941
+ var high = in_buf[7] * 256 + in_buf[6]; // 256 = Math.pow(16, 2)
2942
+ var len = high * 65536 + low; // 65536 = Math.pow(16,4)
2943
+ var buf = new ArrayBuffer(len);
2944
+ var data = new Uint32Array(buf);
2945
+ var out_buf_len = len / 4;
2946
+ var code, ref, ofs, b;
2947
+ var op_4, aux;
2948
+ var ctrl = in_buf[8];
2949
+ var offsetView;
2950
+ var encoder = 8; //padding
2951
+
2952
+ while (op != out_buf_len) {
2953
+
2954
+ ctrl = in_buf[encoder++];
2955
+ //if ctrl is 0, there is no way for len to be > 0
2956
+ if (ctrl != 0 && (len = ctrl >> 5)!=0) { //>=32
2957
+ ref = op;
2958
+ ofs = (ctrl & 31) << 8; //get the last 5 bits from ctrl
2959
+
2960
+ if (len == 7) {
2961
+ do {
2962
+ code = in_buf[encoder++];
2963
+ len += code;
2964
+ } while (code == 255);
2965
+ }
2966
+
2967
+ ofs += in_buf[encoder++];
2968
+
2969
+ if (ofs == 0) {
2970
+ aux = data[--ref];
2971
+ while(len > 9) {
2972
+ data[op] = aux;
2973
+ data[op+1] = aux;
2974
+ data[op+2] = aux;
2975
+ data[op+3] = aux;
2976
+ data[op+4] = aux;
2977
+ data[op+5] = aux;
2978
+ data[op+6] = aux;
2979
+ data[op+7] = aux;
2980
+ data[op+8] = aux;
2981
+ data[op+9] = aux;
2982
+ op+=10;
2983
+ len -= 10;
2984
+ }
2985
+
2986
+
2987
+ while (len-- != 0) {
2988
+ data[op++] = aux;
2989
+ }
2990
+
2991
+
2992
+ } else {
2993
+ if (ofs == 8191) { //check if all the bits in ofs are 1, then get two more bytes
2994
+ ofs += (in_buf[encoder] << 8) + in_buf[encoder+1];
2995
+ encoder += 2;
2996
+ }
2997
+
2998
+ ref -= ofs + 1;
2999
+ //if the copy from array to array is bigger than 100 (tested using benchmark) its cheaper to
3000
+ //create a view and copy with set. If the copy is less than 100, then its cheaper
3001
+ //to just iterate it.
3002
+ if(len > 100 && ref+len < op) {
3003
+ offsetView = new Uint32Array(buf, ref*4, len);
3004
+ data.set(offsetView,op);
3005
+ op += len;
3006
+ ref += len;
3007
+ } else {
3008
+ while(len > 9) {
3009
+ data[op] = data[ref];
3010
+ data[op+1] = data[ref+1];
3011
+ data[op+2] = data[ref+2];
3012
+ data[op+3] = data[ref+3];
3013
+ data[op+4] = data[ref+4];
3014
+ data[op+5] = data[ref+5];
3015
+ data[op+6] = data[ref+6];
3016
+ data[op+7] = data[ref+7];
3017
+ data[op+8] = data[ref+8];
3018
+ data[op+9] = data[ref+9];
3019
+ op+=10;
3020
+ len -= 10;
3021
+ ref += 10;
3022
+ }
3023
+
3024
+ while (len-- !== 0) {
3025
+ data[op++] = data[ref++];
3026
+ }
3027
+
3028
+ }
3029
+
3030
+ }
3031
+ } else {
3032
+ while(ctrl > 9) {
3033
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3034
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3035
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3036
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3037
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3038
+ data[op+5] = 4278190080 | in_buf[encoder+15] << 16 | in_buf[encoder+16] << 8 | in_buf[encoder+17];
3039
+ data[op+6] = 4278190080 | in_buf[encoder+18] << 16 | in_buf[encoder+19] << 8 | in_buf[encoder+20];
3040
+ data[op+7] = 4278190080 | in_buf[encoder+21] << 16 | in_buf[encoder+22] << 8 | in_buf[encoder+23];
3041
+ data[op+8] = 4278190080 | in_buf[encoder+24] << 16 | in_buf[encoder+25] << 8 | in_buf[encoder+26];
3042
+ data[op+9] = 4278190080 | in_buf[encoder+27] << 16 | in_buf[encoder+28] << 8 | in_buf[encoder+29];
3043
+ encoder += 30;
3044
+ op += 10;
3045
+ ctrl -= 10;
3046
+ }
3047
+
3048
+ //if we are just out of the above loop, ctrl is 9, so do the 9 in a row
3049
+ if(ctrl != 0) {
3050
+ if(ctrl == 9) {
3051
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3052
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3053
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3054
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3055
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3056
+ data[op+5] = 4278190080 | in_buf[encoder+15] << 16 | in_buf[encoder+16] << 8 | in_buf[encoder+17];
3057
+ data[op+6] = 4278190080 | in_buf[encoder+18] << 16 | in_buf[encoder+19] << 8 | in_buf[encoder+20];
3058
+ data[op+7] = 4278190080 | in_buf[encoder+21] << 16 | in_buf[encoder+22] << 8 | in_buf[encoder+23];
3059
+ data[op+8] = 4278190080 | in_buf[encoder+24] << 16 | in_buf[encoder+25] << 8 | in_buf[encoder+26];
3060
+ encoder += 27;
3061
+ op += 9;
3062
+ } else if(ctrl == 8) {
3063
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3064
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3065
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3066
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3067
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3068
+ data[op+5] = 4278190080 | in_buf[encoder+15] << 16 | in_buf[encoder+16] << 8 | in_buf[encoder+17];
3069
+ data[op+6] = 4278190080 | in_buf[encoder+18] << 16 | in_buf[encoder+19] << 8 | in_buf[encoder+20];
3070
+ data[op+7] = 4278190080 | in_buf[encoder+21] << 16 | in_buf[encoder+22] << 8 | in_buf[encoder+23];
3071
+ encoder += 24;
3072
+ op += 8;
3073
+ } else if(ctrl == 7) {
3074
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3075
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3076
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3077
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3078
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3079
+ data[op+5] = 4278190080 | in_buf[encoder+15] << 16 | in_buf[encoder+16] << 8 | in_buf[encoder+17];
3080
+ data[op+6] = 4278190080 | in_buf[encoder+18] << 16 | in_buf[encoder+19] << 8 | in_buf[encoder+20];
3081
+ encoder += 21;
3082
+ op += 7;
3083
+ } else if(ctrl == 6) {
3084
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3085
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3086
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3087
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3088
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3089
+ data[op+5] = 4278190080 | in_buf[encoder+15] << 16 | in_buf[encoder+16] << 8 | in_buf[encoder+17];
3090
+ encoder += 18;
3091
+ op += 6;
3092
+ } else if(ctrl == 5) {
3093
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3094
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3095
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3096
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3097
+ data[op+4] = 4278190080 | in_buf[encoder+12] << 16 | in_buf[encoder+13] << 8 | in_buf[encoder+14];
3098
+ encoder += 15;
3099
+ op += 5;
3100
+ } else if(ctrl == 4) {
3101
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3102
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3103
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3104
+ data[op+3] = 4278190080 | in_buf[encoder+9] << 16 | in_buf[encoder+10] << 8 | in_buf[encoder+11];
3105
+ encoder += 12;
3106
+ op += 4;
3107
+ } else if(ctrl == 3) {
3108
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3109
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3110
+ data[op+2] = 4278190080 | in_buf[encoder+6] << 16 | in_buf[encoder+7] << 8 | in_buf[encoder+8];
3111
+ encoder += 9;
3112
+ op += 3;
3113
+ } else if(ctrl == 2) {
3114
+ data[op] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3115
+ data[op+1] = 4278190080 | in_buf[encoder+3] << 16 | in_buf[encoder+4] << 8 | in_buf[encoder+5];
3116
+ encoder += 6;
3117
+ op += 2;
3118
+ } else if(ctrl == 1) {
3119
+ data[op++] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3120
+ encoder += 3;
3121
+ }
3122
+ }
3123
+
3124
+ data[op++] = 4278190080 | in_buf[encoder] << 16 | in_buf[encoder+1] << 8 | in_buf[encoder+2];
3125
+ encoder+=3;
3126
+ }
3127
+ }
3128
+
3129
+ if (type === this.LZ_IMAGE_TYPE_RGBA && !opaque) {
3130
+ var buf8 = new Uint8Array(buf);
3131
+
3132
+ op = 0;
3133
+ ctrl = null;
3134
+ encoder--;
3135
+ for (ctrl = in_buf[encoder++]; op < out_buf_len; ctrl = in_buf[encoder++]) {
3136
+ ref = op;
3137
+ len = ctrl >> 5;
3138
+ ofs = ((ctrl & 31) << 8);
3139
+ op_4 = op * 4;
3140
+
3141
+ if (ctrl >= 32) {
3142
+
3143
+ code;
3144
+ len--;
3145
+
3146
+ if (len === 7 - 1) {
3147
+ do {
3148
+ code = in_buf[encoder++];
3149
+ len += code;
3150
+ } while (code === 255);
3151
+ }
3152
+ code = in_buf[encoder++];
3153
+ ofs += code;
3154
+
3155
+
3156
+ if (code === 255) {
3157
+ if ((ofs - code) === (31 << 8)) {
3158
+ ofs = in_buf[encoder++] << 8;
3159
+ ofs += in_buf[encoder++];
3160
+ ofs += 8191;
3161
+ }
3162
+ }
3163
+ len += 3;
3164
+
3165
+ ofs += 1;
3166
+
3167
+ ref -= ofs;
3168
+ if (ref === (op - 1)) { //plt4/1 what?
3169
+ b = ref;
3170
+
3171
+ for (; len; --len) {
3172
+ op_4 = op * 4;
3173
+ //COPY_PIXEL
3174
+ buf8[(op_4) + 3] = buf8[(b * 4) + 3];
3175
+
3176
+ op++;
3177
+ }
3178
+ } else {
3179
+
3180
+ for (; len; --len) {
3181
+ //COPY_REF_PIXEL
3182
+ op_4 = op * 4;
3183
+ buf8[(op_4) + 3] = buf8[(ref * 4) + 3];
3184
+
3185
+ op++;
3186
+ ref++;
3187
+ }
3188
+ }
3189
+ } else {
3190
+ //COPY_COMP_PIXEL
3191
+ ctrl++;
3192
+ buf8[(op_4) + 3] = in_buf[encoder++];
3193
+ op++;
3194
+
3195
+
3196
+ for (--ctrl; ctrl; ctrl--) {
3197
+ //COPY_COMP_PIXEL
3198
+ op_4 = op * 4; // faster?
3199
+ buf8[(op_4) + 3] = in_buf[encoder++];
3200
+ op++;
3201
+ }
3202
+ }
3203
+ }
3204
+ }
3205
+ return buf;
3206
+ }
3207
+ };
3208
+
3209
+ if (wdi.LZSS) {
3210
+ wdi.LZSS.lz_rgb32_decompress_rgb = lzDecompress.lz_rgb32_decompress_rgb
3211
+ } else {
3212
+ // if (!wdi.LZSS) {
3213
+ wdi.LZSS = lzDecompress;
3214
+ }