@carbonenginejs/runtime-resource 0.9.2 → 0.10.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 (324) hide show
  1. package/NOTICE +3 -2
  2. package/README.md +47 -6
  3. package/dist/CjsMotherLode.js +88 -88
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +717 -228
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -0
  8. package/dist/CjsResManFetchProvider.js.map +1 -0
  9. package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
  10. package/dist/CjsResManWorkQueue.js.map +1 -0
  11. package/dist/format/CjsBlueReader.js +89 -0
  12. package/dist/format/CjsBlueReader.js.map +1 -1
  13. package/dist/format/CjsFormat.js +42 -16
  14. package/dist/format/CjsFormat.js.map +1 -1
  15. package/dist/format/CjsReader.js +4 -0
  16. package/dist/format/CjsReader.js.map +1 -1
  17. package/dist/format/CjsResourceProbe.js +2 -0
  18. package/dist/format/CjsResourceProbe.js.map +1 -1
  19. package/dist/format/payloadContract.js +20 -0
  20. package/dist/format/payloadContract.js.map +1 -1
  21. package/dist/formats/black/CjsBlackFormat.js +15 -1
  22. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  23. package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
  24. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  25. package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
  26. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  27. package/dist/formats/black/core/CjsBlackReader.js +125 -0
  28. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
  30. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  31. package/dist/formats/black/core/helpers.js +17 -0
  32. package/dist/formats/black/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/CjsBnkFormat.js +8 -0
  34. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  35. package/dist/formats/bnk/core/helpers.js +20 -0
  36. package/dist/formats/bnk/core/helpers.js.map +1 -1
  37. package/dist/formats/bnk/core/musicNodes.js +40 -3
  38. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  39. package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
  40. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  41. package/dist/formats/cmf/core/binary.js +71 -0
  42. package/dist/formats/cmf/core/binary.js.map +1 -1
  43. package/dist/formats/cmf/core/buffers.js +4 -0
  44. package/dist/formats/cmf/core/buffers.js.map +1 -1
  45. package/dist/formats/cmf/core/helpers.js +31 -0
  46. package/dist/formats/cmf/core/helpers.js.map +1 -1
  47. package/dist/formats/cmf/core/schema.js +10 -0
  48. package/dist/formats/cmf/core/schema.js.map +1 -1
  49. package/dist/formats/cmf/core/shared.js +9 -0
  50. package/dist/formats/cmf/core/shared.js.map +1 -1
  51. package/dist/formats/cmf/core/writer.js +54 -0
  52. package/dist/formats/cmf/core/writer.js.map +1 -1
  53. package/dist/formats/dds/core/bc6h.js +10 -0
  54. package/dist/formats/dds/core/bc6h.js.map +1 -1
  55. package/dist/formats/dds/core/bc7.js +16 -0
  56. package/dist/formats/dds/core/bc7.js.map +1 -1
  57. package/dist/formats/dds/core/helpers.js +47 -0
  58. package/dist/formats/dds/core/helpers.js.map +1 -1
  59. package/dist/formats/fbx/core/helpers.js +21 -0
  60. package/dist/formats/fbx/core/helpers.js.map +1 -1
  61. package/dist/formats/flac/CjsFlacFormat.js +49 -0
  62. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  63. package/dist/formats/flac/core/helpers.js +20 -0
  64. package/dist/formats/flac/core/helpers.js.map +1 -1
  65. package/dist/formats/gif/CjsGifFormat.js +49 -0
  66. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  67. package/dist/formats/gif/core/helpers.js +20 -0
  68. package/dist/formats/gif/core/helpers.js.map +1 -1
  69. package/dist/formats/gltf/core/helpers.js +15 -0
  70. package/dist/formats/gltf/core/helpers.js.map +1 -1
  71. package/dist/formats/gltf/core/parser.js +13 -0
  72. package/dist/formats/gltf/core/parser.js.map +1 -1
  73. package/dist/formats/gltf/core/targets.js +10 -0
  74. package/dist/formats/gltf/core/targets.js.map +1 -1
  75. package/dist/formats/gr2/core/bitknit2.js +2 -0
  76. package/dist/formats/gr2/core/bitknit2.js.map +1 -1
  77. package/dist/formats/gr2/core/helpers.js +20 -0
  78. package/dist/formats/gr2/core/helpers.js.map +1 -1
  79. package/dist/formats/gr2/core/targets.js +10 -0
  80. package/dist/formats/gr2/core/targets.js.map +1 -1
  81. package/dist/formats/jpeg/core/helpers.js +52 -0
  82. package/dist/formats/jpeg/core/helpers.js.map +1 -1
  83. package/dist/formats/jpeg/core/jpeg.js +93 -0
  84. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  85. package/dist/formats/mp3/core/helpers.js +37 -0
  86. package/dist/formats/mp3/core/helpers.js.map +1 -1
  87. package/dist/formats/mp4/core/helpers.js +35 -0
  88. package/dist/formats/mp4/core/helpers.js.map +1 -1
  89. package/dist/formats/ogg/CjsOggFormat.js +49 -0
  90. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  91. package/dist/formats/ogg/core/helpers.js +23 -0
  92. package/dist/formats/ogg/core/helpers.js.map +1 -1
  93. package/dist/formats/ogg/core/vorbis.js +13 -0
  94. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  95. package/dist/formats/png/core/helpers.js +52 -0
  96. package/dist/formats/png/core/helpers.js.map +1 -1
  97. package/dist/formats/red/CjsRedFormat.js +2 -0
  98. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  99. package/dist/formats/red/core/CjsRedReader.js +52 -0
  100. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  101. package/dist/formats/red/core/helpers.js +19 -0
  102. package/dist/formats/red/core/helpers.js.map +1 -1
  103. package/dist/formats/stl/core/stl.js +8 -0
  104. package/dist/formats/stl/core/stl.js.map +1 -1
  105. package/dist/formats/stl/core/targets.js +10 -0
  106. package/dist/formats/stl/core/targets.js.map +1 -1
  107. package/dist/formats/tga/core/helpers.js +47 -0
  108. package/dist/formats/tga/core/helpers.js.map +1 -1
  109. package/dist/formats/wav/core/helpers.js +37 -0
  110. package/dist/formats/wav/core/helpers.js.map +1 -1
  111. package/dist/formats/webm/core/helpers.js +35 -0
  112. package/dist/formats/webm/core/helpers.js.map +1 -1
  113. package/dist/formats/webp/CjsWebpFormat.js +49 -0
  114. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  115. package/dist/formats/webp/core/helpers.js +23 -0
  116. package/dist/formats/webp/core/helpers.js.map +1 -1
  117. package/dist/formats/wem/CjsWemFormat.js +8 -0
  118. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  119. package/dist/formats/wem/core/bitStream.js +2 -0
  120. package/dist/formats/wem/core/bitStream.js.map +1 -1
  121. package/dist/formats/wem/core/helpers.js +20 -0
  122. package/dist/formats/wem/core/helpers.js.map +1 -1
  123. package/dist/formats/yaml/CjsYamlFormat.js +45 -0
  124. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  125. package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
  126. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  127. package/dist/formats/yaml/core/helpers.js +10 -0
  128. package/dist/formats/yaml/core/helpers.js.map +1 -1
  129. package/dist/index.js +56 -43
  130. package/dist/index.js.map +1 -1
  131. package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
  132. package/dist/resource/CjsResource.js.map +1 -0
  133. package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
  134. package/dist/resource/Tr2LightProfileRes.js.map +1 -0
  135. package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
  136. package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
  137. package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
  138. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
  139. package/dist/resource/audio/CjsAudioRes.js +213 -0
  140. package/dist/resource/audio/CjsAudioRes.js.map +1 -0
  141. package/dist/resource/audio/index.js +4 -0
  142. package/dist/resource/audio/index.js.map +1 -0
  143. package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
  144. package/dist/resource/geometry/MeshDecalData.js.map +1 -0
  145. package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
  146. package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
  147. package/dist/resource/geometry/TriGeometryRes.js +656 -0
  148. package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
  149. package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
  150. package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
  151. package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
  152. package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
  153. package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
  154. package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
  155. package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
  156. package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
  157. package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
  158. package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
  159. package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
  160. package/dist/resource/geometry/TriJointBinding.js.map +1 -0
  161. package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
  162. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
  163. package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
  164. package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
  165. package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
  166. package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
  167. package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
  168. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
  169. package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
  170. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
  171. package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
  172. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
  173. package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
  174. package/dist/resource/geometry/granny/enums.js.map +1 -0
  175. package/dist/resource/geometry/granny/index.js +6 -0
  176. package/dist/resource/geometry/granny/index.js.map +1 -0
  177. package/dist/resource/geometry/index.js +17 -0
  178. package/dist/resource/geometry/index.js.map +1 -0
  179. package/dist/resource/index.js +52 -0
  180. package/dist/resource/index.js.map +1 -0
  181. package/dist/resource/resourceBoundary.js +64 -0
  182. package/dist/resource/resourceBoundary.js.map +1 -0
  183. package/dist/resource/shader/Tr2EffectRes.js +420 -0
  184. package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
  185. package/dist/{resources → resource/shader}/Tr2MaterialArea.js +9 -4
  186. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
  187. package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +8 -3
  188. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
  189. package/dist/{resources → resource/shader}/Tr2MaterialRes.js +10 -4
  190. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
  191. package/dist/resource/shader/Tr2Shader.js +250 -0
  192. package/dist/resource/shader/Tr2Shader.js.map +1 -0
  193. package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +13 -7
  194. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
  195. package/dist/resource/shader/index.js +17 -0
  196. package/dist/resource/shader/index.js.map +1 -0
  197. package/dist/resource/shader/portable.js +33 -0
  198. package/dist/resource/shader/portable.js.map +1 -0
  199. package/dist/resource/shader/portableValidation.js +461 -0
  200. package/dist/resource/shader/portableValidation.js.map +1 -0
  201. package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
  202. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
  203. package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
  204. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
  205. package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
  206. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
  207. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
  208. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
  209. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
  210. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
  211. package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
  212. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
  213. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
  214. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
  215. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
  216. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
  217. package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
  218. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
  219. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
  220. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
  221. package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
  222. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
  223. package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
  224. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
  225. package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
  226. package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
  227. package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
  228. package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
  229. package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
  230. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
  231. package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
  232. package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
  233. package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
  234. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
  235. package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
  236. package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
  237. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
  238. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
  239. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
  240. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  241. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
  242. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  243. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
  244. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
  245. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
  246. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
  247. package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
  248. package/dist/resource/texture/TriTextureRes.js.map +1 -0
  249. package/dist/resource/texture/index.js +15 -0
  250. package/dist/resource/texture/index.js.map +1 -0
  251. package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
  252. package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
  253. package/dist/worker/CjsResManMainThreadLoader.js +87 -0
  254. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
  255. package/dist/worker/CjsResManWorker.js +217 -0
  256. package/dist/worker/CjsResManWorker.js.map +1 -0
  257. package/dist/worker/CjsResManWorkerLoader.js +434 -0
  258. package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
  259. package/dist/worker/protocol.js +12 -0
  260. package/dist/worker/protocol.js.map +1 -0
  261. package/docs/README.md +16 -3
  262. package/docs/architecture.md +39 -16
  263. package/docs/concepts/resource-lifecycle.md +2 -1
  264. package/docs/formats/README.md +4 -0
  265. package/docs/reference/classes/README.md +6 -4
  266. package/docs/reference/classes/audio.md +30 -0
  267. package/docs/reference/classes/core.md +31 -11
  268. package/docs/reference/classes/resources.md +151 -41
  269. package/docs/reference/classes/texture.md +7 -7
  270. package/docs/reference/motherlode-cache.md +17 -0
  271. package/docs/reference/queues.md +9 -1
  272. package/docs/reference/workers.md +135 -0
  273. package/docs/roadmap.md +27 -1
  274. package/package.json +8 -1
  275. package/dist/CjsResManQueue.js.map +0 -1
  276. package/dist/CjsResource.js.map +0 -1
  277. package/dist/CjsResourceSource.js +0 -68
  278. package/dist/CjsResourceSource.js.map +0 -1
  279. package/dist/resourcePath.js +0 -18
  280. package/dist/resourcePath.js.map +0 -1
  281. package/dist/resourceStates.js +0 -9
  282. package/dist/resourceStates.js.map +0 -1
  283. package/dist/resources/AudioGeometryResData.js.map +0 -1
  284. package/dist/resources/GStateBindingCallbackData.js.map +0 -1
  285. package/dist/resources/MeshDecalData.js.map +0 -1
  286. package/dist/resources/MeshDecalLodData.js.map +0 -1
  287. package/dist/resources/Tr2EffectRes.js +0 -71
  288. package/dist/resources/Tr2EffectRes.js.map +0 -1
  289. package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  290. package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
  291. package/dist/resources/Tr2ImageRes.js.map +0 -1
  292. package/dist/resources/Tr2LightProfileRes.js.map +0 -1
  293. package/dist/resources/Tr2MaterialArea.js.map +0 -1
  294. package/dist/resources/Tr2MaterialMesh.js.map +0 -1
  295. package/dist/resources/Tr2MaterialRes.js.map +0 -1
  296. package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
  297. package/dist/resources/Tr2TextureLodManager.js.map +0 -1
  298. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  299. package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
  300. package/dist/resources/Tr2TexturePipeline.js.map +0 -1
  301. package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
  302. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  303. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
  304. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  305. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  306. package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  307. package/dist/resources/TriGeometryRes.js +0 -239
  308. package/dist/resources/TriGeometryRes.js.map +0 -1
  309. package/dist/resources/TriGeometryResAreaData.js.map +0 -1
  310. package/dist/resources/TriGeometryResJointData.js.map +0 -1
  311. package/dist/resources/TriGeometryResLodData.js.map +0 -1
  312. package/dist/resources/TriGeometryResMeshData.js.map +0 -1
  313. package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
  314. package/dist/resources/TriGrannyRes.js.map +0 -1
  315. package/dist/resources/TriJointBinding.js.map +0 -1
  316. package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  317. package/dist/resources/TriRtGeometryConstants.js.map +0 -1
  318. package/dist/resources/TriTextureRes.js.map +0 -1
  319. package/dist/resources/enums.js.map +0 -1
  320. package/dist/resources/resourceBoundary.js +0 -47
  321. package/dist/resources/resourceBoundary.js.map +0 -1
  322. package/dist/resources/texturePipelineBehavior.js.map +0 -1
  323. package/dist/texture/CjsTextureArrayRes.js.map +0 -1
  324. package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
@@ -7,6 +7,11 @@ const COSINE = Array.from({
7
7
  const SCALE = Array.from({
8
8
  length: 8
9
9
  }, (_, value) => value === 0 ? 1 / Math.sqrt(2) : 1);
10
+
11
+ /**
12
+ * Decodes baseline JPEG bytes into a normalized RGBA payload for the JPEG format
13
+ * reader.
14
+ */
10
15
  function decodeJpegToRgba(bytes, metadata = {}) {
11
16
  const decoder = new BaselineJpegDecoder(bytes);
12
17
  const image = decoder.decode();
@@ -31,6 +36,11 @@ function decodeJpegToRgba(bytes, metadata = {}) {
31
36
  }
32
37
  };
33
38
  }
39
+
40
+ /**
41
+ * Reports whether JPEG metadata is supported by the software decoder for the
42
+ * JPEG format reader.
43
+ */
34
44
  function canDecodeJpeg(metadata = {}) {
35
45
  return metadata.sourceFormat === "jpeg" && metadata.precision === 8 && metadata.components >= 1 && metadata.components <= 3 && (metadata.marker === 0xc0 || metadata.marker === 0xc1) && metadata.progressive !== true;
36
46
  }
@@ -47,9 +57,16 @@ class BaselineJpegDecoder {
47
57
  #frame = null;
48
58
  #scan = null;
49
59
  #restartInterval = 0;
60
+
61
+ /** Creates a BaselineJpegDecoder with caller-provided initial state. */
50
62
  constructor(bytes) {
51
63
  this.#bytes = bytes;
52
64
  }
65
+
66
+ /**
67
+ * Decodes the current baseline JPEG stream into RGBA pixels for the JPEG
68
+ * decoder.
69
+ */
53
70
  decode() {
54
71
  this.readMarker(0xd8);
55
72
  while (this.#offset < this.#bytes.length) {
@@ -63,6 +80,11 @@ class BaselineJpegDecoder {
63
80
  }
64
81
  throw new Error("jpeg: no baseline scan found");
65
82
  }
83
+
84
+ /**
85
+ * Reads JPEG frame dimensions, sampling, and component metadata for the JPEG
86
+ * decoder.
87
+ */
66
88
  readFrame(marker) {
67
89
  const length = this.readU16();
68
90
  const precision = this.readU8();
@@ -108,6 +130,11 @@ class BaselineJpegDecoder {
108
130
  maxV
109
131
  };
110
132
  }
133
+
134
+ /**
135
+ * Reads JPEG quantization tables into natural coefficient order for the JPEG
136
+ * decoder.
137
+ */
111
138
  readQuantizationTables() {
112
139
  const end = this.#offset + this.readU16() - 2;
113
140
  while (this.#offset < end) {
@@ -121,6 +148,11 @@ class BaselineJpegDecoder {
121
148
  }
122
149
  this.#offset = end;
123
150
  }
151
+
152
+ /**
153
+ * Builds JPEG Huffman lookup tables from their canonical definitions for the
154
+ * JPEG decoder.
155
+ */
124
156
  readHuffmanTables() {
125
157
  const end = this.#offset + this.readU16() - 2;
126
158
  while (this.#offset < end) {
@@ -146,11 +178,21 @@ class BaselineJpegDecoder {
146
178
  }
147
179
  this.#offset = end;
148
180
  }
181
+
182
+ /**
183
+ * Reads the JPEG restart interval declared by a DRI segment for the JPEG
184
+ * decoder.
185
+ */
149
186
  readRestartInterval() {
150
187
  const length = this.readU16();
151
188
  if (length !== 4) throw new Error("jpeg: invalid restart interval segment");
152
189
  this.#restartInterval = this.readU16();
153
190
  }
191
+
192
+ /**
193
+ * Reads JPEG scan component and spectral-selection metadata for the JPEG
194
+ * decoder.
195
+ */
154
196
  readScanHeader() {
155
197
  const length = this.readU16();
156
198
  const count = this.readU8();
@@ -176,6 +218,11 @@ class BaselineJpegDecoder {
176
218
  byId
177
219
  };
178
220
  }
221
+
222
+ /**
223
+ * Decodes the current JPEG entropy scan into component planes and RGBA
224
+ * pixels for the JPEG decoder.
225
+ */
179
226
  decodeScan() {
180
227
  const frame = this.#frame;
181
228
  const mcuWidth = 8 * frame.maxH;
@@ -235,6 +282,11 @@ class BaselineJpegDecoder {
235
282
  data
236
283
  };
237
284
  }
285
+
286
+ /**
287
+ * Decodes one JPEG coefficient block through inverse quantization and IDCT
288
+ * for the JPEG decoder.
289
+ */
238
290
  decodeBlock(reader, component) {
239
291
  const quantization = this.#quantization.get(component.quantizationId);
240
292
  const dcTable = this.#huffman.get(`0:${component.dc}`);
@@ -261,18 +313,32 @@ class BaselineJpegDecoder {
261
313
  for (let i = 0; i < 64; i++) coefficients[i] *= quantization[i];
262
314
  return inverseDct(coefficients);
263
315
  }
316
+
317
+ /**
318
+ * Reads an unsigned 8-bit value from the JPEG byte cursor for the JPEG
319
+ * decoder.
320
+ */
264
321
  readU8() {
265
322
  if (this.#offset >= this.#bytes.length) throw new Error("jpeg: unexpected end of input");
266
323
  return this.#bytes[this.#offset++];
267
324
  }
325
+
326
+ /**
327
+ * Reads an unsigned 16-bit big-endian value from the JPEG byte cursor for
328
+ * the JPEG decoder.
329
+ */
268
330
  readU16() {
269
331
  return this.readU8() << 8 | this.readU8();
270
332
  }
333
+
334
+ /** Consumes and validates an expected JPEG marker for the JPEG decoder. */
271
335
  readMarker(expected = null) {
272
336
  const marker = this.nextMarker();
273
337
  if (expected !== null && marker !== expected) throw new Error("jpeg: missing SOI marker");
274
338
  return marker;
275
339
  }
340
+
341
+ /** Scans forward to the next valid JPEG marker byte for the JPEG decoder. */
276
342
  nextMarker() {
277
343
  while (this.#offset < this.#bytes.length && this.#bytes[this.#offset++] !== 0xff) {
278
344
  // Scan forward to the next marker prefix.
@@ -281,6 +347,11 @@ class BaselineJpegDecoder {
281
347
  if (this.#offset >= this.#bytes.length) throw new Error("jpeg: unexpected end while reading marker");
282
348
  return this.#bytes[this.#offset++];
283
349
  }
350
+
351
+ /**
352
+ * Advances past the payload of an unhandled JPEG segment for the JPEG
353
+ * decoder.
354
+ */
284
355
  skipSegment() {
285
356
  const length = this.readU16();
286
357
  if (length < 2 || this.#offset + length - 2 > this.#bytes.length) throw new Error("jpeg: invalid segment length");
@@ -298,10 +369,17 @@ class EntropyReader {
298
369
  #buffer = 0;
299
370
  #bits = 0;
300
371
  #marker = null;
372
+
373
+ /**
374
+ * Creates a EntropyReader over caller-provided JPEG bytes and reader
375
+ * options.
376
+ */
301
377
  constructor(bytes, offset) {
302
378
  this.#bytes = bytes;
303
379
  this.#offset = offset;
304
380
  }
381
+
382
+ /** Reads one entropy-coded bit for the JPEG binary reader. */
305
383
  readBit() {
306
384
  if (!this.#bits) {
307
385
  let value = this.#bytes[this.#offset++];
@@ -320,14 +398,29 @@ class EntropyReader {
320
398
  }
321
399
  return this.#buffer >>> --this.#bits & 1;
322
400
  }
401
+
402
+ /**
403
+ * Reads the requested number of entropy-coded bits for the JPEG binary
404
+ * reader.
405
+ */
323
406
  readBits(count) {
324
407
  let value = 0;
325
408
  for (let i = 0; i < count; i++) value = value << 1 | this.readBit();
326
409
  return value;
327
410
  }
411
+
412
+ /**
413
+ * Aligns the entropy cursor to the next byte boundary for the JPEG binary
414
+ * reader.
415
+ */
328
416
  align() {
329
417
  this.#bits = 0;
330
418
  }
419
+
420
+ /**
421
+ * Consumes and validates the next JPEG restart marker for the JPEG binary
422
+ * reader.
423
+ */
331
424
  consumeRestart() {
332
425
  while (this.#bytes[this.#offset] === 0xff) this.#offset++;
333
426
  const marker = this.#bytes[this.#offset++];
@@ -1 +1 @@
1
- {"version":3,"file":"jpeg.js","sources":["../../../../../src/formats/jpeg/core/jpeg.js"],"sourcesContent":["const ZIGZAG = [\n 0, 1, 5, 6, 14, 15, 27, 28,\n 2, 4, 7, 13, 16, 26, 29, 42,\n 3, 8, 12, 17, 25, 30, 41, 43,\n 9, 11, 18, 24, 31, 40, 44, 53,\n 10, 19, 23, 32, 39, 45, 52, 54,\n 20, 22, 33, 38, 46, 51, 55, 60,\n 21, 34, 37, 47, 50, 56, 59, 61,\n 35, 36, 48, 49, 57, 58, 62, 63\n];\n\nconst COSINE = Array.from({ length: 8 }, (_, x) =>\n Array.from({ length: 8 }, (_, u) => Math.cos(((2 * x + 1) * u * Math.PI) / 16)));\n\nconst SCALE = Array.from({ length: 8 }, (_, value) => value === 0 ? 1 / Math.sqrt(2) : 1);\n\nexport function decodeJpegToRgba(bytes, metadata = {})\n{\n const decoder = new BaselineJpegDecoder(bytes);\n const image = decoder.decode();\n return {\n payloadType: \"rgba\",\n sourceFormat: \"jpeg\",\n mimeType: \"image/jpeg\",\n containerOnly: false,\n isDecoded: true,\n rgbaDecodeSupported: true,\n width: image.width,\n height: image.height,\n pixelFormat: \"rgba8unorm\",\n data: image.data,\n strideBytes: image.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"opaque\",\n metadata: { ...metadata, decoder: \"software-baseline\" }\n };\n}\n\nexport function canDecodeJpeg(metadata = {})\n{\n return metadata.sourceFormat === \"jpeg\" &&\n metadata.precision === 8 &&\n metadata.components >= 1 && metadata.components <= 3 &&\n (metadata.marker === 0xc0 || metadata.marker === 0xc1) &&\n metadata.progressive !== true;\n}\n\n/**\n * Pure-JS baseline sequential JPEG decoder that parses markers, quantization\n * and Huffman tables, and entropy-coded scans into RGBA pixels.\n */\nclass BaselineJpegDecoder\n{\n #bytes;\n #offset = 0;\n #quantization = new Map();\n #huffman = new Map();\n #frame = null;\n #scan = null;\n #restartInterval = 0;\n\n constructor(bytes)\n {\n this.#bytes = bytes;\n }\n\n decode()\n {\n this.readMarker(0xd8);\n while (this.#offset < this.#bytes.length)\n {\n const marker = this.nextMarker();\n if (marker === 0xd9) break;\n if (marker === 0xda)\n {\n this.readScanHeader();\n return this.decodeScan();\n }\n if (marker === 0xdb) this.readQuantizationTables();\n else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) this.readFrame(marker);\n else if (marker === 0xc4) this.readHuffmanTables();\n else if (marker === 0xdd) this.readRestartInterval();\n else if (marker >= 0xe0 && marker <= 0xef || marker === 0xfe) this.skipSegment();\n else if (marker === 0xd8 || marker === 0x01 || marker >= 0xd0 && marker <= 0xd7) continue;\n else this.skipSegment();\n }\n throw new Error(\"jpeg: no baseline scan found\");\n }\n\n readFrame(marker)\n {\n const length = this.readU16();\n const precision = this.readU8();\n const height = this.readU16();\n const width = this.readU16();\n const components = this.readU8();\n if (precision !== 8) throw new Error(`jpeg: unsupported sample precision ${precision}`);\n if (!width || !height || !components || components > 3) throw new Error(\"jpeg: unsupported frame layout\");\n\n const list = [];\n let maxH = 0, maxV = 0;\n for (let i = 0; i < components; i++)\n {\n const id = this.readU8();\n const sampling = this.readU8();\n const component = {\n id,\n h: sampling >>> 4,\n v: sampling & 0x0f,\n quantizationId: this.readU8(),\n dc: 0,\n ac: 0,\n previousDc: 0,\n plane: null,\n planeWidth: 0,\n planeHeight: 0\n };\n if (!component.h || !component.v || component.h > 4 || component.v > 4)\n {\n throw new Error(\"jpeg: unsupported component sampling\");\n }\n maxH = Math.max(maxH, component.h);\n maxV = Math.max(maxV, component.v);\n list.push(component);\n }\n const consumed = 8 + components * 3;\n if (length !== consumed) this.#offset += Math.max(0, length - consumed);\n if (marker === 0xc2) throw new Error(\"jpeg: progressive scans are not supported by the software decoder\");\n this.#frame = { width, height, precision, components: list, maxH, maxV };\n }\n\n readQuantizationTables()\n {\n const end = this.#offset + this.readU16() - 2;\n while (this.#offset < end)\n {\n const info = this.readU8();\n const precision = info >>> 4;\n const id = info & 0x0f;\n if (precision > 1) throw new Error(\"jpeg: unsupported 16-bit quantization table\");\n const table = new Uint16Array(64);\n for (let i = 0; i < 64; i++) table[ZIGZAG[i]] = precision ? this.readU16() : this.readU8();\n this.#quantization.set(id, table);\n }\n this.#offset = end;\n }\n\n readHuffmanTables()\n {\n const end = this.#offset + this.readU16() - 2;\n while (this.#offset < end)\n {\n const info = this.readU8();\n const table = new Array(17).fill(null).map(() => []);\n const counts = [];\n for (let length = 1; length <= 16; length++) counts.push(this.readU8());\n let code = 0;\n let valueIndex = 0;\n for (let length = 1; length <= 16; length++)\n {\n for (let i = 0; i < counts[length - 1]; i++)\n {\n table[length].push({ code, value: this.#bytes[this.#offset + valueIndex] });\n valueIndex++;\n code++;\n }\n code <<= 1;\n }\n this.#offset += valueIndex;\n this.#huffman.set(`${info >>> 4}:${info & 0x0f}`, table);\n }\n this.#offset = end;\n }\n\n readRestartInterval()\n {\n const length = this.readU16();\n if (length !== 4) throw new Error(\"jpeg: invalid restart interval segment\");\n this.#restartInterval = this.readU16();\n }\n\n readScanHeader()\n {\n const length = this.readU16();\n const count = this.readU8();\n if (!this.#frame || count !== this.#frame.components.length) throw new Error(\"jpeg: unsupported scan component count\");\n const byId = new Map(this.#frame.components.map(component => [ component.id, component ]));\n for (let i = 0; i < count; i++)\n {\n const id = this.readU8();\n const tables = this.readU8();\n const component = byId.get(id);\n if (!component) throw new Error(`jpeg: scan references unknown component ${id}`);\n component.dc = tables >>> 4;\n component.ac = tables & 0x0f;\n }\n const spectralStart = this.readU8();\n const spectralEnd = this.readU8();\n const successive = this.readU8();\n if (spectralStart !== 0 || spectralEnd !== 63 || successive !== 0)\n {\n throw new Error(\"jpeg: progressive or non-sequential scan is not supported\");\n }\n const consumed = 6 + count * 2;\n if (length !== consumed) this.#offset += Math.max(0, length - consumed);\n this.#scan = { byId };\n }\n\n decodeScan()\n {\n const frame = this.#frame;\n const mcuWidth = 8 * frame.maxH;\n const mcuHeight = 8 * frame.maxV;\n const mcuColumns = Math.ceil(frame.width / mcuWidth);\n const mcuRows = Math.ceil(frame.height / mcuHeight);\n for (const component of frame.components)\n {\n component.planeWidth = mcuColumns * component.h * 8;\n component.planeHeight = mcuRows * component.v * 8;\n component.plane = new Uint8Array(component.planeWidth * component.planeHeight);\n }\n\n const reader = new EntropyReader(this.#bytes, this.#offset);\n let mcuIndex = 0;\n for (let row = 0; row < mcuRows; row++)\n {\n for (let column = 0; column < mcuColumns; column++)\n {\n for (const component of frame.components)\n {\n for (let y = 0; y < component.v; y++)\n {\n for (let x = 0; x < component.h; x++)\n {\n const block = this.decodeBlock(reader, component);\n const originX = (column * component.h + x) * 8;\n const originY = (row * component.v + y) * 8;\n writeBlock(component.plane, component.planeWidth, originX, originY, block);\n }\n }\n }\n mcuIndex++;\n if (this.#restartInterval && mcuIndex % this.#restartInterval === 0 && mcuIndex < mcuColumns * mcuRows)\n {\n reader.align();\n reader.consumeRestart();\n for (const component of frame.components) component.previousDc = 0;\n }\n }\n }\n const data = new Uint8Array(frame.width * frame.height * 4);\n for (let y = 0; y < frame.height; y++)\n {\n for (let x = 0; x < frame.width; x++)\n {\n const offset = (y * frame.width + x) * 4;\n if (frame.components.length === 1)\n {\n const value = frame.components[0].plane[y * frame.components[0].planeWidth + x];\n data[offset] = value; data[offset + 1] = value; data[offset + 2] = value;\n }\n else\n {\n const yValue = sampleComponent(frame.components[0], x, y, frame.width, frame.height);\n const cb = sampleComponent(frame.components[1], x, y, frame.width, frame.height) - 128;\n const cr = sampleComponent(frame.components[2], x, y, frame.width, frame.height) - 128;\n data[offset] = clampByte(yValue + 1.402 * cr);\n data[offset + 1] = clampByte(yValue - 0.344136 * cb - 0.714136 * cr);\n data[offset + 2] = clampByte(yValue + 1.772 * cb);\n }\n data[offset + 3] = 255;\n }\n }\n return { width: frame.width, height: frame.height, data };\n }\n\n decodeBlock(reader, component)\n {\n const quantization = this.#quantization.get(component.quantizationId);\n const dcTable = this.#huffman.get(`0:${component.dc}`);\n const acTable = this.#huffman.get(`1:${component.ac}`);\n if (!quantization || !dcTable || !acTable) throw new Error(\"jpeg: missing quantization or Huffman table\");\n const coefficients = new Int32Array(64);\n const category = decodeHuffman(reader, dcTable);\n const delta = receiveExtend(reader, category);\n component.previousDc += delta;\n coefficients[0] = component.previousDc;\n let index = 1;\n while (index < 64)\n {\n const value = decodeHuffman(reader, acTable);\n if (value === 0) break;\n if (value === 0xf0) { index += 16; continue; }\n index += value >>> 4;\n if (index >= 64) throw new Error(\"jpeg: invalid AC coefficient run\");\n coefficients[ZIGZAG[index]] = receiveExtend(reader, value & 0x0f);\n index++;\n }\n for (let i = 0; i < 64; i++) coefficients[i] *= quantization[i];\n return inverseDct(coefficients);\n }\n\n readU8()\n {\n if (this.#offset >= this.#bytes.length) throw new Error(\"jpeg: unexpected end of input\");\n return this.#bytes[this.#offset++];\n }\n\n readU16()\n {\n return (this.readU8() << 8) | this.readU8();\n }\n\n readMarker(expected = null)\n {\n const marker = this.nextMarker();\n if (expected !== null && marker !== expected) throw new Error(\"jpeg: missing SOI marker\");\n return marker;\n }\n\n nextMarker()\n {\n while (this.#offset < this.#bytes.length && this.#bytes[this.#offset++] !== 0xff)\n {\n // Scan forward to the next marker prefix.\n }\n while (this.#offset < this.#bytes.length && this.#bytes[this.#offset] === 0xff) this.#offset++;\n if (this.#offset >= this.#bytes.length) throw new Error(\"jpeg: unexpected end while reading marker\");\n return this.#bytes[this.#offset++];\n }\n\n skipSegment()\n {\n const length = this.readU16();\n if (length < 2 || this.#offset + length - 2 > this.#bytes.length) throw new Error(\"jpeg: invalid segment length\");\n this.#offset += length - 2;\n }\n}\n\n/**\n * Bit-level reader over JPEG entropy-coded data that handles byte stuffing\n * and restart markers for the baseline decoder.\n */\nclass EntropyReader\n{\n #bytes;\n #offset;\n #buffer = 0;\n #bits = 0;\n #marker = null;\n\n constructor(bytes, offset)\n {\n this.#bytes = bytes;\n this.#offset = offset;\n }\n\n readBit()\n {\n if (!this.#bits)\n {\n let value = this.#bytes[this.#offset++];\n if (value === 0xff)\n {\n while (this.#bytes[this.#offset] === 0xff) this.#offset++;\n const marker = this.#bytes[this.#offset++];\n if (marker !== 0x00) { this.#marker = marker; throw new Error(\"jpeg: unexpected marker in entropy data\"); }\n value = 0xff;\n }\n if (value === undefined) throw new Error(\"jpeg: unexpected end in entropy data\");\n this.#buffer = value;\n this.#bits = 8;\n }\n return (this.#buffer >>> --this.#bits) & 1;\n }\n\n readBits(count)\n {\n let value = 0;\n for (let i = 0; i < count; i++) value = (value << 1) | this.readBit();\n return value;\n }\n\n align()\n {\n this.#bits = 0;\n }\n\n consumeRestart()\n {\n while (this.#bytes[this.#offset] === 0xff) this.#offset++;\n const marker = this.#bytes[this.#offset++];\n if (marker < 0xd0 || marker > 0xd7) throw new Error(\"jpeg: missing restart marker\");\n }\n}\n\nfunction decodeHuffman(reader, table)\n{\n let code = 0;\n for (let length = 1; length <= 16; length++)\n {\n code = (code << 1) | reader.readBit();\n const entry = table[length].find(item => item.code === code);\n if (entry) return entry.value;\n }\n throw new Error(\"jpeg: invalid Huffman code\");\n}\n\nfunction receiveExtend(reader, size)\n{\n if (!size) return 0;\n const value = reader.readBits(size);\n const threshold = 1 << (size - 1);\n return value < threshold ? value - ((1 << size) - 1) : value;\n}\n\nfunction inverseDct(coefficients)\n{\n const output = new Uint8Array(64);\n for (let y = 0; y < 8; y++)\n {\n for (let x = 0; x < 8; x++)\n {\n let sum = 0;\n for (let v = 0; v < 8; v++)\n {\n for (let u = 0; u < 8; u++)\n {\n sum += SCALE[u] * SCALE[v] * coefficients[v * 8 + u] * COSINE[x][u] * COSINE[y][v];\n }\n }\n output[y * 8 + x] = clampByte(128 + sum / 4);\n }\n }\n return output;\n}\n\nfunction writeBlock(plane, planeWidth, originX, originY, block)\n{\n for (let y = 0; y < 8; y++)\n {\n const targetY = originY + y;\n if (targetY >= plane.length / planeWidth) continue;\n for (let x = 0; x < 8; x++)\n {\n const targetX = originX + x;\n if (targetX < planeWidth) plane[targetY * planeWidth + targetX] = block[y * 8 + x];\n }\n }\n}\n\nfunction sampleComponent(component, x, y, width, height)\n{\n const sampleX = Math.min(component.planeWidth - 1, Math.floor(x * component.planeWidth / width));\n const sampleY = Math.min(component.planeHeight - 1, Math.floor(y * component.planeHeight / height));\n return component.plane[sampleY * component.planeWidth + sampleX];\n}\n\nfunction clampByte(value)\n{\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n"],"names":["ZIGZAG","COSINE","Array","from","length","_","x","u","Math","cos","PI","SCALE","value","sqrt","decodeJpegToRgba","bytes","metadata","decoder","BaselineJpegDecoder","image","decode","payloadType","sourceFormat","mimeType","containerOnly","isDecoded","rgbaDecodeSupported","width","height","pixelFormat","data","strideBytes","origin","colorSpace","alphaMode","canDecodeJpeg","precision","components","marker","progressive","Map","constructor","readMarker","nextMarker","readScanHeader","decodeScan","readQuantizationTables","readFrame","readHuffmanTables","readRestartInterval","skipSegment","Error","readU16","readU8","list","maxH","maxV","i","id","sampling","component","h","v","quantizationId","dc","ac","previousDc","plane","planeWidth","planeHeight","max","push","consumed","end","info","table","Uint16Array","set","fill","map","counts","code","valueIndex","count","byId","tables","get","spectralStart","spectralEnd","successive","frame","mcuWidth","mcuHeight","mcuColumns","ceil","mcuRows","Uint8Array","reader","EntropyReader","mcuIndex","row","column","y","block","decodeBlock","originX","originY","writeBlock","align","consumeRestart","offset","yValue","sampleComponent","cb","cr","clampByte","quantization","dcTable","acTable","coefficients","Int32Array","category","decodeHuffman","delta","receiveExtend","index","inverseDct","expected","readBit","undefined","readBits","entry","find","item","size","threshold","output","sum","targetY","targetX","sampleX","min","floor","sampleY","round"],"mappings":"AAAA,MAAMA,MAAM,GAAG,CACX,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC5B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC7B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CACjC;AAED,MAAMC,MAAM,GAAGC,KAAK,CAACC,IAAI,CAAC;AAAEC,EAAAA,MAAM,EAAE;AAAE,CAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAC1CJ,KAAK,CAACC,IAAI,CAAC;AAAEC,EAAAA,MAAM,EAAE;AAAE,CAAC,EAAE,CAACC,CAAC,EAAEE,CAAC,KAAKC,IAAI,CAACC,GAAG,CAAE,CAAC,CAAC,GAAGH,CAAC,GAAG,CAAC,IAAIC,CAAC,GAAGC,IAAI,CAACE,EAAE,GAAI,EAAE,CAAC,CAAC,CAAC;AAEpF,MAAMC,KAAK,GAAGT,KAAK,CAACC,IAAI,CAAC;AAAEC,EAAAA,MAAM,EAAE;AAAE,CAAC,EAAE,CAACC,CAAC,EAAEO,KAAK,KAAKA,KAAK,KAAK,CAAC,GAAG,CAAC,GAAGJ,IAAI,CAACK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAElF,SAASC,gBAAgBA,CAACC,KAAK,EAAEC,QAAQ,GAAG,EAAE,EACrD;AACI,EAAA,MAAMC,OAAO,GAAG,IAAIC,mBAAmB,CAACH,KAAK,CAAC;AAC9C,EAAA,MAAMI,KAAK,GAAGF,OAAO,CAACG,MAAM,EAAE;EAC9B,OAAO;AACHC,IAAAA,WAAW,EAAE,MAAM;AACnBC,IAAAA,YAAY,EAAE,MAAM;AACpBC,IAAAA,QAAQ,EAAE,YAAY;AACtBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,mBAAmB,EAAE,IAAI;IACzBC,KAAK,EAAER,KAAK,CAACQ,KAAK;IAClBC,MAAM,EAAET,KAAK,CAACS,MAAM;AACpBC,IAAAA,WAAW,EAAE,YAAY;IACzBC,IAAI,EAAEX,KAAK,CAACW,IAAI;AAChBC,IAAAA,WAAW,EAAEZ,KAAK,CAACQ,KAAK,GAAG,CAAC;AAC5BK,IAAAA,MAAM,EAAE,UAAU;AAClBC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,SAAS,EAAE,QAAQ;AACnBlB,IAAAA,QAAQ,EAAE;AAAE,MAAA,GAAGA,QAAQ;AAAEC,MAAAA,OAAO,EAAE;AAAoB;GACzD;AACL;AAEO,SAASkB,aAAaA,CAACnB,QAAQ,GAAG,EAAE,EAC3C;AACI,EAAA,OAAOA,QAAQ,CAACM,YAAY,KAAK,MAAM,IACnCN,QAAQ,CAACoB,SAAS,KAAK,CAAC,IACxBpB,QAAQ,CAACqB,UAAU,IAAI,CAAC,IAAIrB,QAAQ,CAACqB,UAAU,IAAI,CAAC,KACnDrB,QAAQ,CAACsB,MAAM,KAAK,IAAI,IAAItB,QAAQ,CAACsB,MAAM,KAAK,IAAI,CAAC,IACtDtB,QAAQ,CAACuB,WAAW,KAAK,IAAI;AACrC;;AAEA;AACA;AACA;AACA;AACA,MAAMrB,mBAAmB,CACzB;AACI,EAAA,MAAM;EACN,OAAO,GAAG,CAAC;AACX,EAAA,aAAa,GAAG,IAAIsB,GAAG,EAAE;AACzB,EAAA,QAAQ,GAAG,IAAIA,GAAG,EAAE;EACpB,MAAM,GAAG,IAAI;EACb,KAAK,GAAG,IAAI;EACZ,gBAAgB,GAAG,CAAC;EAEpBC,WAAWA,CAAC1B,KAAK,EACjB;AACI,IAAA,IAAI,CAAC,MAAM,GAAGA,KAAK;AACvB,EAAA;AAEAK,EAAAA,MAAMA,GACN;AACI,IAAA,IAAI,CAACsB,UAAU,CAAC,IAAI,CAAC;IACrB,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAACtC,MAAM,EACxC;AACI,MAAA,MAAMkC,MAAM,GAAG,IAAI,CAACK,UAAU,EAAE;MAChC,IAAIL,MAAM,KAAK,IAAI,EAAE;MACrB,IAAIA,MAAM,KAAK,IAAI,EACnB;QACI,IAAI,CAACM,cAAc,EAAE;AACrB,QAAA,OAAO,IAAI,CAACC,UAAU,EAAE;AAC5B,MAAA;MACA,IAAIP,MAAM,KAAK,IAAI,EAAE,IAAI,CAACQ,sBAAsB,EAAE,CAAC,KAC9C,IAAIR,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,IAAI,EAAE,IAAI,CAACS,SAAS,CAACT,MAAM,CAAC,CAAC,KAClF,IAAIA,MAAM,KAAK,IAAI,EAAE,IAAI,CAACU,iBAAiB,EAAE,CAAC,KAC9C,IAAIV,MAAM,KAAK,IAAI,EAAE,IAAI,CAACW,mBAAmB,EAAE,CAAC,KAChD,IAAIX,MAAM,IAAI,IAAI,IAAIA,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAK,IAAI,EAAE,IAAI,CAACY,WAAW,EAAE,CAAC,KAC5E,IAAIZ,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,IAAI,IAAIA,MAAM,IAAI,IAAI,IAAIA,MAAM,IAAI,IAAI,EAAE,SAAS,KACrF,IAAI,CAACY,WAAW,EAAE;AAC3B,IAAA;AACA,IAAA,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;AACnD,EAAA;EAEAJ,SAASA,CAACT,MAAM,EAChB;AACI,IAAA,MAAMlC,MAAM,GAAG,IAAI,CAACgD,OAAO,EAAE;AAC7B,IAAA,MAAMhB,SAAS,GAAG,IAAI,CAACiB,MAAM,EAAE;AAC/B,IAAA,MAAMzB,MAAM,GAAG,IAAI,CAACwB,OAAO,EAAE;AAC7B,IAAA,MAAMzB,KAAK,GAAG,IAAI,CAACyB,OAAO,EAAE;AAC5B,IAAA,MAAMf,UAAU,GAAG,IAAI,CAACgB,MAAM,EAAE;IAChC,IAAIjB,SAAS,KAAK,CAAC,EAAE,MAAM,IAAIe,KAAK,CAAC,CAAA,mCAAA,EAAsCf,SAAS,CAAA,CAAE,CAAC;AACvF,IAAA,IAAI,CAACT,KAAK,IAAI,CAACC,MAAM,IAAI,CAACS,UAAU,IAAIA,UAAU,GAAG,CAAC,EAAE,MAAM,IAAIc,KAAK,CAAC,gCAAgC,CAAC;IAEzG,MAAMG,IAAI,GAAG,EAAE;IACf,IAAIC,IAAI,GAAG,CAAC;AAAEC,MAAAA,IAAI,GAAG,CAAC;IACtB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpB,UAAU,EAAEoB,CAAC,EAAE,EACnC;AACI,MAAA,MAAMC,EAAE,GAAG,IAAI,CAACL,MAAM,EAAE;AACxB,MAAA,MAAMM,QAAQ,GAAG,IAAI,CAACN,MAAM,EAAE;AAC9B,MAAA,MAAMO,SAAS,GAAG;QACdF,EAAE;QACFG,CAAC,EAAEF,QAAQ,KAAK,CAAC;QACjBG,CAAC,EAAEH,QAAQ,GAAG,IAAI;AAClBI,QAAAA,cAAc,EAAE,IAAI,CAACV,MAAM,EAAE;AAC7BW,QAAAA,EAAE,EAAE,CAAC;AACLC,QAAAA,EAAE,EAAE,CAAC;AACLC,QAAAA,UAAU,EAAE,CAAC;AACbC,QAAAA,KAAK,EAAE,IAAI;AACXC,QAAAA,UAAU,EAAE,CAAC;AACbC,QAAAA,WAAW,EAAE;OAChB;MACD,IAAI,CAACT,SAAS,CAACC,CAAC,IAAI,CAACD,SAAS,CAACE,CAAC,IAAIF,SAAS,CAACC,CAAC,GAAG,CAAC,IAAID,SAAS,CAACE,CAAC,GAAG,CAAC,EACtE;AACI,QAAA,MAAM,IAAIX,KAAK,CAAC,sCAAsC,CAAC;AAC3D,MAAA;MACAI,IAAI,GAAG/C,IAAI,CAAC8D,GAAG,CAACf,IAAI,EAAEK,SAAS,CAACC,CAAC,CAAC;MAClCL,IAAI,GAAGhD,IAAI,CAAC8D,GAAG,CAACd,IAAI,EAAEI,SAAS,CAACE,CAAC,CAAC;AAClCR,MAAAA,IAAI,CAACiB,IAAI,CAACX,SAAS,CAAC;AACxB,IAAA;AACA,IAAA,MAAMY,QAAQ,GAAG,CAAC,GAAGnC,UAAU,GAAG,CAAC;AACnC,IAAA,IAAIjC,MAAM,KAAKoE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAIhE,IAAI,CAAC8D,GAAG,CAAC,CAAC,EAAElE,MAAM,GAAGoE,QAAQ,CAAC;IACvE,IAAIlC,MAAM,KAAK,IAAI,EAAE,MAAM,IAAIa,KAAK,CAAC,mEAAmE,CAAC;IACzG,IAAI,CAAC,MAAM,GAAG;MAAExB,KAAK;MAAEC,MAAM;MAAEQ,SAAS;AAAEC,MAAAA,UAAU,EAAEiB,IAAI;MAAEC,IAAI;AAAEC,MAAAA;KAAM;AAC5E,EAAA;AAEAV,EAAAA,sBAAsBA,GACtB;AACI,IAAA,MAAM2B,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAACrB,OAAO,EAAE,GAAG,CAAC;AAC7C,IAAA,OAAO,IAAI,CAAC,OAAO,GAAGqB,GAAG,EACzB;AACI,MAAA,MAAMC,IAAI,GAAG,IAAI,CAACrB,MAAM,EAAE;AAC1B,MAAA,MAAMjB,SAAS,GAAGsC,IAAI,KAAK,CAAC;AAC5B,MAAA,MAAMhB,EAAE,GAAGgB,IAAI,GAAG,IAAI;MACtB,IAAItC,SAAS,GAAG,CAAC,EAAE,MAAM,IAAIe,KAAK,CAAC,6CAA6C,CAAC;AACjF,MAAA,MAAMwB,KAAK,GAAG,IAAIC,WAAW,CAAC,EAAE,CAAC;AACjC,MAAA,KAAK,IAAInB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAEkB,KAAK,CAAC3E,MAAM,CAACyD,CAAC,CAAC,CAAC,GAAGrB,SAAS,GAAG,IAAI,CAACgB,OAAO,EAAE,GAAG,IAAI,CAACC,MAAM,EAAE;MAC1F,IAAI,CAAC,aAAa,CAACwB,GAAG,CAACnB,EAAE,EAAEiB,KAAK,CAAC;AACrC,IAAA;AACA,IAAA,IAAI,CAAC,OAAO,GAAGF,GAAG;AACtB,EAAA;AAEAzB,EAAAA,iBAAiBA,GACjB;AACI,IAAA,MAAMyB,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAACrB,OAAO,EAAE,GAAG,CAAC;AAC7C,IAAA,OAAO,IAAI,CAAC,OAAO,GAAGqB,GAAG,EACzB;AACI,MAAA,MAAMC,IAAI,GAAG,IAAI,CAACrB,MAAM,EAAE;AAC1B,MAAA,MAAMsB,KAAK,GAAG,IAAIzE,KAAK,CAAC,EAAE,CAAC,CAAC4E,IAAI,CAAC,IAAI,CAAC,CAACC,GAAG,CAAC,MAAM,EAAE,CAAC;MACpD,MAAMC,MAAM,GAAG,EAAE;MACjB,KAAK,IAAI5E,MAAM,GAAG,CAAC,EAAEA,MAAM,IAAI,EAAE,EAAEA,MAAM,EAAE,EAAE4E,MAAM,CAACT,IAAI,CAAC,IAAI,CAAClB,MAAM,EAAE,CAAC;MACvE,IAAI4B,IAAI,GAAG,CAAC;MACZ,IAAIC,UAAU,GAAG,CAAC;MAClB,KAAK,IAAI9E,MAAM,GAAG,CAAC,EAAEA,MAAM,IAAI,EAAE,EAAEA,MAAM,EAAE,EAC3C;AACI,QAAA,KAAK,IAAIqD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuB,MAAM,CAAC5E,MAAM,GAAG,CAAC,CAAC,EAAEqD,CAAC,EAAE,EAC3C;AACIkB,UAAAA,KAAK,CAACvE,MAAM,CAAC,CAACmE,IAAI,CAAC;YAAEU,IAAI;YAAErE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAGsE,UAAU;AAAE,WAAC,CAAC;AAC3EA,UAAAA,UAAU,EAAE;AACZD,UAAAA,IAAI,EAAE;AACV,QAAA;AACAA,QAAAA,IAAI,KAAK,CAAC;AACd,MAAA;AACA,MAAA,IAAI,CAAC,OAAO,IAAIC,UAAU;AAC1B,MAAA,IAAI,CAAC,QAAQ,CAACL,GAAG,CAAC,CAAA,EAAGH,IAAI,KAAK,CAAC,IAAIA,IAAI,GAAG,IAAI,CAAA,CAAE,EAAEC,KAAK,CAAC;AAC5D,IAAA;AACA,IAAA,IAAI,CAAC,OAAO,GAAGF,GAAG;AACtB,EAAA;AAEAxB,EAAAA,mBAAmBA,GACnB;AACI,IAAA,MAAM7C,MAAM,GAAG,IAAI,CAACgD,OAAO,EAAE;IAC7B,IAAIhD,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI+C,KAAK,CAAC,wCAAwC,CAAC;IAC3E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAACC,OAAO,EAAE;AAC1C,EAAA;AAEAR,EAAAA,cAAcA,GACd;AACI,IAAA,MAAMxC,MAAM,GAAG,IAAI,CAACgD,OAAO,EAAE;AAC7B,IAAA,MAAM+B,KAAK,GAAG,IAAI,CAAC9B,MAAM,EAAE;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI8B,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC9C,UAAU,CAACjC,MAAM,EAAE,MAAM,IAAI+C,KAAK,CAAC,wCAAwC,CAAC;IACtH,MAAMiC,IAAI,GAAG,IAAI5C,GAAG,CAAC,IAAI,CAAC,MAAM,CAACH,UAAU,CAAC0C,GAAG,CAACnB,SAAS,IAAI,CAAEA,SAAS,CAACF,EAAE,EAAEE,SAAS,CAAE,CAAC,CAAC;IAC1F,KAAK,IAAIH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0B,KAAK,EAAE1B,CAAC,EAAE,EAC9B;AACI,MAAA,MAAMC,EAAE,GAAG,IAAI,CAACL,MAAM,EAAE;AACxB,MAAA,MAAMgC,MAAM,GAAG,IAAI,CAAChC,MAAM,EAAE;AAC5B,MAAA,MAAMO,SAAS,GAAGwB,IAAI,CAACE,GAAG,CAAC5B,EAAE,CAAC;MAC9B,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIT,KAAK,CAAC,CAAA,wCAAA,EAA2CO,EAAE,CAAA,CAAE,CAAC;AAChFE,MAAAA,SAAS,CAACI,EAAE,GAAGqB,MAAM,KAAK,CAAC;AAC3BzB,MAAAA,SAAS,CAACK,EAAE,GAAGoB,MAAM,GAAG,IAAI;AAChC,IAAA;AACA,IAAA,MAAME,aAAa,GAAG,IAAI,CAAClC,MAAM,EAAE;AACnC,IAAA,MAAMmC,WAAW,GAAG,IAAI,CAACnC,MAAM,EAAE;AACjC,IAAA,MAAMoC,UAAU,GAAG,IAAI,CAACpC,MAAM,EAAE;IAChC,IAAIkC,aAAa,KAAK,CAAC,IAAIC,WAAW,KAAK,EAAE,IAAIC,UAAU,KAAK,CAAC,EACjE;AACI,MAAA,MAAM,IAAItC,KAAK,CAAC,2DAA2D,CAAC;AAChF,IAAA;AACA,IAAA,MAAMqB,QAAQ,GAAG,CAAC,GAAGW,KAAK,GAAG,CAAC;AAC9B,IAAA,IAAI/E,MAAM,KAAKoE,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAIhE,IAAI,CAAC8D,GAAG,CAAC,CAAC,EAAElE,MAAM,GAAGoE,QAAQ,CAAC;IACvE,IAAI,CAAC,KAAK,GAAG;AAAEY,MAAAA;KAAM;AACzB,EAAA;AAEAvC,EAAAA,UAAUA,GACV;AACI,IAAA,MAAM6C,KAAK,GAAG,IAAI,CAAC,MAAM;AACzB,IAAA,MAAMC,QAAQ,GAAG,CAAC,GAAGD,KAAK,CAACnC,IAAI;AAC/B,IAAA,MAAMqC,SAAS,GAAG,CAAC,GAAGF,KAAK,CAAClC,IAAI;IAChC,MAAMqC,UAAU,GAAGrF,IAAI,CAACsF,IAAI,CAACJ,KAAK,CAAC/D,KAAK,GAAGgE,QAAQ,CAAC;IACpD,MAAMI,OAAO,GAAGvF,IAAI,CAACsF,IAAI,CAACJ,KAAK,CAAC9D,MAAM,GAAGgE,SAAS,CAAC;AACnD,IAAA,KAAK,MAAMhC,SAAS,IAAI8B,KAAK,CAACrD,UAAU,EACxC;MACIuB,SAAS,CAACQ,UAAU,GAAGyB,UAAU,GAAGjC,SAAS,CAACC,CAAC,GAAG,CAAC;MACnDD,SAAS,CAACS,WAAW,GAAG0B,OAAO,GAAGnC,SAAS,CAACE,CAAC,GAAG,CAAC;AACjDF,MAAAA,SAAS,CAACO,KAAK,GAAG,IAAI6B,UAAU,CAACpC,SAAS,CAACQ,UAAU,GAAGR,SAAS,CAACS,WAAW,CAAC;AAClF,IAAA;AAEA,IAAA,MAAM4B,MAAM,GAAG,IAAIC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;IAC3D,IAAIC,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGL,OAAO,EAAEK,GAAG,EAAE,EACtC;MACI,KAAK,IAAIC,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGR,UAAU,EAAEQ,MAAM,EAAE,EAClD;AACI,QAAA,KAAK,MAAMzC,SAAS,IAAI8B,KAAK,CAACrD,UAAU,EACxC;AACI,UAAA,KAAK,IAAIiE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG1C,SAAS,CAACE,CAAC,EAAEwC,CAAC,EAAE,EACpC;AACI,YAAA,KAAK,IAAIhG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsD,SAAS,CAACC,CAAC,EAAEvD,CAAC,EAAE,EACpC;cACI,MAAMiG,KAAK,GAAG,IAAI,CAACC,WAAW,CAACP,MAAM,EAAErC,SAAS,CAAC;cACjD,MAAM6C,OAAO,GAAG,CAACJ,MAAM,GAAGzC,SAAS,CAACC,CAAC,GAAGvD,CAAC,IAAI,CAAC;cAC9C,MAAMoG,OAAO,GAAG,CAACN,GAAG,GAAGxC,SAAS,CAACE,CAAC,GAAGwC,CAAC,IAAI,CAAC;AAC3CK,cAAAA,UAAU,CAAC/C,SAAS,CAACO,KAAK,EAAEP,SAAS,CAACQ,UAAU,EAAEqC,OAAO,EAAEC,OAAO,EAAEH,KAAK,CAAC;AAC9E,YAAA;AACJ,UAAA;AACJ,QAAA;AACAJ,QAAAA,QAAQ,EAAE;AACV,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAIA,QAAQ,GAAG,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAIA,QAAQ,GAAGN,UAAU,GAAGE,OAAO,EACtG;UACIE,MAAM,CAACW,KAAK,EAAE;UACdX,MAAM,CAACY,cAAc,EAAE;UACvB,KAAK,MAAMjD,SAAS,IAAI8B,KAAK,CAACrD,UAAU,EAAEuB,SAAS,CAACM,UAAU,GAAG,CAAC;AACtE,QAAA;AACJ,MAAA;AACJ,IAAA;AACA,IAAA,MAAMpC,IAAI,GAAG,IAAIkE,UAAU,CAACN,KAAK,CAAC/D,KAAK,GAAG+D,KAAK,CAAC9D,MAAM,GAAG,CAAC,CAAC;AAC3D,IAAA,KAAK,IAAI0E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGZ,KAAK,CAAC9D,MAAM,EAAE0E,CAAC,EAAE,EACrC;AACI,MAAA,KAAK,IAAIhG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoF,KAAK,CAAC/D,KAAK,EAAErB,CAAC,EAAE,EACpC;QACI,MAAMwG,MAAM,GAAG,CAACR,CAAC,GAAGZ,KAAK,CAAC/D,KAAK,GAAGrB,CAAC,IAAI,CAAC;AACxC,QAAA,IAAIoF,KAAK,CAACrD,UAAU,CAACjC,MAAM,KAAK,CAAC,EACjC;UACI,MAAMQ,KAAK,GAAG8E,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC,CAAC8B,KAAK,CAACmC,CAAC,GAAGZ,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC,CAAC+B,UAAU,GAAG9D,CAAC,CAAC;AAC/EwB,UAAAA,IAAI,CAACgF,MAAM,CAAC,GAAGlG,KAAK;AAAEkB,UAAAA,IAAI,CAACgF,MAAM,GAAG,CAAC,CAAC,GAAGlG,KAAK;AAAEkB,UAAAA,IAAI,CAACgF,MAAM,GAAG,CAAC,CAAC,GAAGlG,KAAK;AAC5E,QAAA,CAAC,MAED;UACI,MAAMmG,MAAM,GAAGC,eAAe,CAACtB,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC,EAAE/B,CAAC,EAAEgG,CAAC,EAAEZ,KAAK,CAAC/D,KAAK,EAAE+D,KAAK,CAAC9D,MAAM,CAAC;UACpF,MAAMqF,EAAE,GAAGD,eAAe,CAACtB,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC,EAAE/B,CAAC,EAAEgG,CAAC,EAAEZ,KAAK,CAAC/D,KAAK,EAAE+D,KAAK,CAAC9D,MAAM,CAAC,GAAG,GAAG;UACtF,MAAMsF,EAAE,GAAGF,eAAe,CAACtB,KAAK,CAACrD,UAAU,CAAC,CAAC,CAAC,EAAE/B,CAAC,EAAEgG,CAAC,EAAEZ,KAAK,CAAC/D,KAAK,EAAE+D,KAAK,CAAC9D,MAAM,CAAC,GAAG,GAAG;UACtFE,IAAI,CAACgF,MAAM,CAAC,GAAGK,SAAS,CAACJ,MAAM,GAAG,KAAK,GAAGG,EAAE,CAAC;AAC7CpF,UAAAA,IAAI,CAACgF,MAAM,GAAG,CAAC,CAAC,GAAGK,SAAS,CAACJ,MAAM,GAAG,QAAQ,GAAGE,EAAE,GAAG,QAAQ,GAAGC,EAAE,CAAC;AACpEpF,UAAAA,IAAI,CAACgF,MAAM,GAAG,CAAC,CAAC,GAAGK,SAAS,CAACJ,MAAM,GAAG,KAAK,GAAGE,EAAE,CAAC;AACrD,QAAA;AACAnF,QAAAA,IAAI,CAACgF,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AAC1B,MAAA;AACJ,IAAA;IACA,OAAO;MAAEnF,KAAK,EAAE+D,KAAK,CAAC/D,KAAK;MAAEC,MAAM,EAAE8D,KAAK,CAAC9D,MAAM;AAAEE,MAAAA;KAAM;AAC7D,EAAA;AAEA0E,EAAAA,WAAWA,CAACP,MAAM,EAAErC,SAAS,EAC7B;AACI,IAAA,MAAMwD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC9B,GAAG,CAAC1B,SAAS,CAACG,cAAc,CAAC;AACrE,IAAA,MAAMsD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC/B,GAAG,CAAC,CAAA,EAAA,EAAK1B,SAAS,CAACI,EAAE,EAAE,CAAC;AACtD,IAAA,MAAMsD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAChC,GAAG,CAAC,CAAA,EAAA,EAAK1B,SAAS,CAACK,EAAE,EAAE,CAAC;AACtD,IAAA,IAAI,CAACmD,YAAY,IAAI,CAACC,OAAO,IAAI,CAACC,OAAO,EAAE,MAAM,IAAInE,KAAK,CAAC,6CAA6C,CAAC;AACzG,IAAA,MAAMoE,YAAY,GAAG,IAAIC,UAAU,CAAC,EAAE,CAAC;AACvC,IAAA,MAAMC,QAAQ,GAAGC,aAAa,CAACzB,MAAM,EAAEoB,OAAO,CAAC;AAC/C,IAAA,MAAMM,KAAK,GAAGC,aAAa,CAAC3B,MAAM,EAAEwB,QAAQ,CAAC;IAC7C7D,SAAS,CAACM,UAAU,IAAIyD,KAAK;AAC7BJ,IAAAA,YAAY,CAAC,CAAC,CAAC,GAAG3D,SAAS,CAACM,UAAU;IACtC,IAAI2D,KAAK,GAAG,CAAC;IACb,OAAOA,KAAK,GAAG,EAAE,EACjB;AACI,MAAA,MAAMjH,KAAK,GAAG8G,aAAa,CAACzB,MAAM,EAAEqB,OAAO,CAAC;MAC5C,IAAI1G,KAAK,KAAK,CAAC,EAAE;MACjB,IAAIA,KAAK,KAAK,IAAI,EAAE;AAAEiH,QAAAA,KAAK,IAAI,EAAE;AAAE,QAAA;AAAU,MAAA;MAC7CA,KAAK,IAAIjH,KAAK,KAAK,CAAC;MACpB,IAAIiH,KAAK,IAAI,EAAE,EAAE,MAAM,IAAI1E,KAAK,CAAC,kCAAkC,CAAC;AACpEoE,MAAAA,YAAY,CAACvH,MAAM,CAAC6H,KAAK,CAAC,CAAC,GAAGD,aAAa,CAAC3B,MAAM,EAAErF,KAAK,GAAG,IAAI,CAAC;AACjEiH,MAAAA,KAAK,EAAE;AACX,IAAA;IACA,KAAK,IAAIpE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAE8D,YAAY,CAAC9D,CAAC,CAAC,IAAI2D,YAAY,CAAC3D,CAAC,CAAC;IAC/D,OAAOqE,UAAU,CAACP,YAAY,CAAC;AACnC,EAAA;AAEAlE,EAAAA,MAAMA,GACN;AACI,IAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAACjD,MAAM,EAAE,MAAM,IAAI+C,KAAK,CAAC,+BAA+B,CAAC;IACxF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACtC,EAAA;AAEAC,EAAAA,OAAOA,GACP;AACI,IAAA,OAAQ,IAAI,CAACC,MAAM,EAAE,IAAI,CAAC,GAAI,IAAI,CAACA,MAAM,EAAE;AAC/C,EAAA;AAEAX,EAAAA,UAAUA,CAACqF,QAAQ,GAAG,IAAI,EAC1B;AACI,IAAA,MAAMzF,MAAM,GAAG,IAAI,CAACK,UAAU,EAAE;AAChC,IAAA,IAAIoF,QAAQ,KAAK,IAAI,IAAIzF,MAAM,KAAKyF,QAAQ,EAAE,MAAM,IAAI5E,KAAK,CAAC,0BAA0B,CAAC;AACzF,IAAA,OAAOb,MAAM;AACjB,EAAA;AAEAK,EAAAA,UAAUA,GACV;IACI,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAACvC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAChF;AACI;AAAA,IAAA;AAEJ,IAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAACA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;AAC9F,IAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAACA,MAAM,EAAE,MAAM,IAAI+C,KAAK,CAAC,2CAA2C,CAAC;IACpG,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACtC,EAAA;AAEAD,EAAAA,WAAWA,GACX;AACI,IAAA,MAAM9C,MAAM,GAAG,IAAI,CAACgD,OAAO,EAAE;IAC7B,IAAIhD,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAGA,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAACA,MAAM,EAAE,MAAM,IAAI+C,KAAK,CAAC,8BAA8B,CAAC;AACjH,IAAA,IAAI,CAAC,OAAO,IAAI/C,MAAM,GAAG,CAAC;AAC9B,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA,MAAM8F,aAAa,CACnB;AACI,EAAA,MAAM;AACN,EAAA,OAAO;EACP,OAAO,GAAG,CAAC;EACX,KAAK,GAAG,CAAC;EACT,OAAO,GAAG,IAAI;AAEdzD,EAAAA,WAAWA,CAAC1B,KAAK,EAAE+F,MAAM,EACzB;AACI,IAAA,IAAI,CAAC,MAAM,GAAG/F,KAAK;AACnB,IAAA,IAAI,CAAC,OAAO,GAAG+F,MAAM;AACzB,EAAA;AAEAkB,EAAAA,OAAOA,GACP;AACI,IAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EACf;AACI,MAAA,IAAIpH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;MACvC,IAAIA,KAAK,KAAK,IAAI,EAClB;AACI,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;AACzD,QAAA,MAAM0B,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAIA,MAAM,KAAK,IAAI,EAAE;AAAE,UAAA,IAAI,CAAC,OAAO,GAAGA,MAAM;AAAE,UAAA,MAAM,IAAIa,KAAK,CAAC,yCAAyC,CAAC;AAAE,QAAA;AAC1GvC,QAAAA,KAAK,GAAG,IAAI;AAChB,MAAA;MACA,IAAIA,KAAK,KAAKqH,SAAS,EAAE,MAAM,IAAI9E,KAAK,CAAC,sCAAsC,CAAC;AAChF,MAAA,IAAI,CAAC,OAAO,GAAGvC,KAAK;AACpB,MAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AAClB,IAAA;IACA,OAAQ,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,CAAC;AAC9C,EAAA;EAEAsH,QAAQA,CAAC/C,KAAK,EACd;IACI,IAAIvE,KAAK,GAAG,CAAC;IACb,KAAK,IAAI6C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0B,KAAK,EAAE1B,CAAC,EAAE,EAAE7C,KAAK,GAAIA,KAAK,IAAI,CAAC,GAAI,IAAI,CAACoH,OAAO,EAAE;AACrE,IAAA,OAAOpH,KAAK;AAChB,EAAA;AAEAgG,EAAAA,KAAKA,GACL;AACI,IAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AAClB,EAAA;AAEAC,EAAAA,cAAcA,GACd;AACI,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;AACzD,IAAA,MAAMvE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1C,IAAA,IAAIA,MAAM,GAAG,IAAI,IAAIA,MAAM,GAAG,IAAI,EAAE,MAAM,IAAIa,KAAK,CAAC,8BAA8B,CAAC;AACvF,EAAA;AACJ;AAEA,SAASuE,aAAaA,CAACzB,MAAM,EAAEtB,KAAK,EACpC;EACI,IAAIM,IAAI,GAAG,CAAC;EACZ,KAAK,IAAI7E,MAAM,GAAG,CAAC,EAAEA,MAAM,IAAI,EAAE,EAAEA,MAAM,EAAE,EAC3C;IACI6E,IAAI,GAAIA,IAAI,IAAI,CAAC,GAAIgB,MAAM,CAAC+B,OAAO,EAAE;AACrC,IAAA,MAAMG,KAAK,GAAGxD,KAAK,CAACvE,MAAM,CAAC,CAACgI,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACpD,IAAI,KAAKA,IAAI,CAAC;AAC5D,IAAA,IAAIkD,KAAK,EAAE,OAAOA,KAAK,CAACvH,KAAK;AACjC,EAAA;AACA,EAAA,MAAM,IAAIuC,KAAK,CAAC,4BAA4B,CAAC;AACjD;AAEA,SAASyE,aAAaA,CAAC3B,MAAM,EAAEqC,IAAI,EACnC;AACI,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,CAAC;AACnB,EAAA,MAAM1H,KAAK,GAAGqF,MAAM,CAACiC,QAAQ,CAACI,IAAI,CAAC;AACnC,EAAA,MAAMC,SAAS,GAAG,CAAC,IAAKD,IAAI,GAAG,CAAE;AACjC,EAAA,OAAO1H,KAAK,GAAG2H,SAAS,GAAG3H,KAAK,IAAI,CAAC,CAAC,IAAI0H,IAAI,IAAI,CAAC,CAAC,GAAG1H,KAAK;AAChE;AAEA,SAASkH,UAAUA,CAACP,YAAY,EAChC;AACI,EAAA,MAAMiB,MAAM,GAAG,IAAIxC,UAAU,CAAC,EAAE,CAAC;EACjC,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;IACI,KAAK,IAAIhG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;MACI,IAAImI,GAAG,GAAG,CAAC;MACX,KAAK,IAAI3E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;QACI,KAAK,IAAIvD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;AACIkI,UAAAA,GAAG,IAAI9H,KAAK,CAACJ,CAAC,CAAC,GAAGI,KAAK,CAACmD,CAAC,CAAC,GAAGyD,YAAY,CAACzD,CAAC,GAAG,CAAC,GAAGvD,CAAC,CAAC,GAAGN,MAAM,CAACK,CAAC,CAAC,CAACC,CAAC,CAAC,GAAGN,MAAM,CAACqG,CAAC,CAAC,CAACxC,CAAC,CAAC;AACtF,QAAA;AACJ,MAAA;AACA0E,MAAAA,MAAM,CAAClC,CAAC,GAAG,CAAC,GAAGhG,CAAC,CAAC,GAAG6G,SAAS,CAAC,GAAG,GAAGsB,GAAG,GAAG,CAAC,CAAC;AAChD,IAAA;AACJ,EAAA;AACA,EAAA,OAAOD,MAAM;AACjB;AAEA,SAAS7B,UAAUA,CAACxC,KAAK,EAAEC,UAAU,EAAEqC,OAAO,EAAEC,OAAO,EAAEH,KAAK,EAC9D;EACI,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;AACI,IAAA,MAAMoC,OAAO,GAAGhC,OAAO,GAAGJ,CAAC;AAC3B,IAAA,IAAIoC,OAAO,IAAIvE,KAAK,CAAC/D,MAAM,GAAGgE,UAAU,EAAE;IAC1C,KAAK,IAAI9D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAC1B;AACI,MAAA,MAAMqI,OAAO,GAAGlC,OAAO,GAAGnG,CAAC;MAC3B,IAAIqI,OAAO,GAAGvE,UAAU,EAAED,KAAK,CAACuE,OAAO,GAAGtE,UAAU,GAAGuE,OAAO,CAAC,GAAGpC,KAAK,CAACD,CAAC,GAAG,CAAC,GAAGhG,CAAC,CAAC;AACtF,IAAA;AACJ,EAAA;AACJ;AAEA,SAAS0G,eAAeA,CAACpD,SAAS,EAAEtD,CAAC,EAAEgG,CAAC,EAAE3E,KAAK,EAAEC,MAAM,EACvD;EACI,MAAMgH,OAAO,GAAGpI,IAAI,CAACqI,GAAG,CAACjF,SAAS,CAACQ,UAAU,GAAG,CAAC,EAAE5D,IAAI,CAACsI,KAAK,CAACxI,CAAC,GAAGsD,SAAS,CAACQ,UAAU,GAAGzC,KAAK,CAAC,CAAC;EAChG,MAAMoH,OAAO,GAAGvI,IAAI,CAACqI,GAAG,CAACjF,SAAS,CAACS,WAAW,GAAG,CAAC,EAAE7D,IAAI,CAACsI,KAAK,CAACxC,CAAC,GAAG1C,SAAS,CAACS,WAAW,GAAGzC,MAAM,CAAC,CAAC;EACnG,OAAOgC,SAAS,CAACO,KAAK,CAAC4E,OAAO,GAAGnF,SAAS,CAACQ,UAAU,GAAGwE,OAAO,CAAC;AACpE;AAEA,SAASzB,SAASA,CAACvG,KAAK,EACxB;AACI,EAAA,OAAOJ,IAAI,CAAC8D,GAAG,CAAC,CAAC,EAAE9D,IAAI,CAACqI,GAAG,CAAC,GAAG,EAAErI,IAAI,CAACwI,KAAK,CAACpI,KAAK,CAAC,CAAC,CAAC;AACxD;;;;"}
1
+ {"version":3,"file":"jpeg.js","sources":["../../../../../src/formats/jpeg/core/jpeg.js"],"sourcesContent":["const ZIGZAG = [\n 0, 1, 5, 6, 14, 15, 27, 28,\n 2, 4, 7, 13, 16, 26, 29, 42,\n 3, 8, 12, 17, 25, 30, 41, 43,\n 9, 11, 18, 24, 31, 40, 44, 53,\n 10, 19, 23, 32, 39, 45, 52, 54,\n 20, 22, 33, 38, 46, 51, 55, 60,\n 21, 34, 37, 47, 50, 56, 59, 61,\n 35, 36, 48, 49, 57, 58, 62, 63\n];\n\nconst COSINE = Array.from({ length: 8 }, (_, x) =>\n Array.from({ length: 8 }, (_, u) => Math.cos(((2 * x + 1) * u * Math.PI) / 16)));\n\nconst SCALE = Array.from({ length: 8 }, (_, value) => value === 0 ? 1 / Math.sqrt(2) : 1);\n\n/**\n * Decodes baseline JPEG bytes into a normalized RGBA payload for the JPEG format\n * reader.\n */\nexport function decodeJpegToRgba(bytes, metadata = {})\n{\n const decoder = new BaselineJpegDecoder(bytes);\n const image = decoder.decode();\n return {\n payloadType: \"rgba\",\n sourceFormat: \"jpeg\",\n mimeType: \"image/jpeg\",\n containerOnly: false,\n isDecoded: true,\n rgbaDecodeSupported: true,\n width: image.width,\n height: image.height,\n pixelFormat: \"rgba8unorm\",\n data: image.data,\n strideBytes: image.width * 4,\n origin: \"top-left\",\n colorSpace: \"srgb\",\n alphaMode: \"opaque\",\n metadata: { ...metadata, decoder: \"software-baseline\" }\n };\n}\n\n/**\n * Reports whether JPEG metadata is supported by the software decoder for the\n * JPEG format reader.\n */\nexport function canDecodeJpeg(metadata = {})\n{\n return metadata.sourceFormat === \"jpeg\" &&\n metadata.precision === 8 &&\n metadata.components >= 1 && metadata.components <= 3 &&\n (metadata.marker === 0xc0 || metadata.marker === 0xc1) &&\n metadata.progressive !== true;\n}\n\n/**\n * Pure-JS baseline sequential JPEG decoder that parses markers, quantization\n * and Huffman tables, and entropy-coded scans into RGBA pixels.\n */\nclass BaselineJpegDecoder\n{\n #bytes;\n #offset = 0;\n #quantization = new Map();\n #huffman = new Map();\n #frame = null;\n #scan = null;\n #restartInterval = 0;\n\n /** Creates a BaselineJpegDecoder with caller-provided initial state. */\n constructor(bytes)\n {\n this.#bytes = bytes;\n }\n\n /**\n * Decodes the current baseline JPEG stream into RGBA pixels for the JPEG\n * decoder.\n */\n decode()\n {\n this.readMarker(0xd8);\n while (this.#offset < this.#bytes.length)\n {\n const marker = this.nextMarker();\n if (marker === 0xd9) break;\n if (marker === 0xda)\n {\n this.readScanHeader();\n return this.decodeScan();\n }\n if (marker === 0xdb) this.readQuantizationTables();\n else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) this.readFrame(marker);\n else if (marker === 0xc4) this.readHuffmanTables();\n else if (marker === 0xdd) this.readRestartInterval();\n else if (marker >= 0xe0 && marker <= 0xef || marker === 0xfe) this.skipSegment();\n else if (marker === 0xd8 || marker === 0x01 || marker >= 0xd0 && marker <= 0xd7) continue;\n else this.skipSegment();\n }\n throw new Error(\"jpeg: no baseline scan found\");\n }\n\n /**\n * Reads JPEG frame dimensions, sampling, and component metadata for the JPEG\n * decoder.\n */\n readFrame(marker)\n {\n const length = this.readU16();\n const precision = this.readU8();\n const height = this.readU16();\n const width = this.readU16();\n const components = this.readU8();\n if (precision !== 8) throw new Error(`jpeg: unsupported sample precision ${precision}`);\n if (!width || !height || !components || components > 3) throw new Error(\"jpeg: unsupported frame layout\");\n\n const list = [];\n let maxH = 0, maxV = 0;\n for (let i = 0; i < components; i++)\n {\n const id = this.readU8();\n const sampling = this.readU8();\n const component = {\n id,\n h: sampling >>> 4,\n v: sampling & 0x0f,\n quantizationId: this.readU8(),\n dc: 0,\n ac: 0,\n previousDc: 0,\n plane: null,\n planeWidth: 0,\n planeHeight: 0\n };\n if (!component.h || !component.v || component.h > 4 || component.v > 4)\n {\n throw new Error(\"jpeg: unsupported component sampling\");\n }\n maxH = Math.max(maxH, component.h);\n maxV = Math.max(maxV, component.v);\n list.push(component);\n }\n const consumed = 8 + components * 3;\n if (length !== consumed) this.#offset += Math.max(0, length - consumed);\n if (marker === 0xc2) throw new Error(\"jpeg: progressive scans are not supported by the software decoder\");\n this.#frame = { width, height, precision, components: list, maxH, maxV };\n }\n\n /**\n * Reads JPEG quantization tables into natural coefficient order for the JPEG\n * decoder.\n */\n readQuantizationTables()\n {\n const end = this.#offset + this.readU16() - 2;\n while (this.#offset < end)\n {\n const info = this.readU8();\n const precision = info >>> 4;\n const id = info & 0x0f;\n if (precision > 1) throw new Error(\"jpeg: unsupported 16-bit quantization table\");\n const table = new Uint16Array(64);\n for (let i = 0; i < 64; i++) table[ZIGZAG[i]] = precision ? this.readU16() : this.readU8();\n this.#quantization.set(id, table);\n }\n this.#offset = end;\n }\n\n /**\n * Builds JPEG Huffman lookup tables from their canonical definitions for the\n * JPEG decoder.\n */\n readHuffmanTables()\n {\n const end = this.#offset + this.readU16() - 2;\n while (this.#offset < end)\n {\n const info = this.readU8();\n const table = new Array(17).fill(null).map(() => []);\n const counts = [];\n for (let length = 1; length <= 16; length++) counts.push(this.readU8());\n let code = 0;\n let valueIndex = 0;\n for (let length = 1; length <= 16; length++)\n {\n for (let i = 0; i < counts[length - 1]; i++)\n {\n table[length].push({ code, value: this.#bytes[this.#offset + valueIndex] });\n valueIndex++;\n code++;\n }\n code <<= 1;\n }\n this.#offset += valueIndex;\n this.#huffman.set(`${info >>> 4}:${info & 0x0f}`, table);\n }\n this.#offset = end;\n }\n\n /**\n * Reads the JPEG restart interval declared by a DRI segment for the JPEG\n * decoder.\n */\n readRestartInterval()\n {\n const length = this.readU16();\n if (length !== 4) throw new Error(\"jpeg: invalid restart interval segment\");\n this.#restartInterval = this.readU16();\n }\n\n /**\n * Reads JPEG scan component and spectral-selection metadata for the JPEG\n * decoder.\n */\n readScanHeader()\n {\n const length = this.readU16();\n const count = this.readU8();\n if (!this.#frame || count !== this.#frame.components.length) throw new Error(\"jpeg: unsupported scan component count\");\n const byId = new Map(this.#frame.components.map(component => [ component.id, component ]));\n for (let i = 0; i < count; i++)\n {\n const id = this.readU8();\n const tables = this.readU8();\n const component = byId.get(id);\n if (!component) throw new Error(`jpeg: scan references unknown component ${id}`);\n component.dc = tables >>> 4;\n component.ac = tables & 0x0f;\n }\n const spectralStart = this.readU8();\n const spectralEnd = this.readU8();\n const successive = this.readU8();\n if (spectralStart !== 0 || spectralEnd !== 63 || successive !== 0)\n {\n throw new Error(\"jpeg: progressive or non-sequential scan is not supported\");\n }\n const consumed = 6 + count * 2;\n if (length !== consumed) this.#offset += Math.max(0, length - consumed);\n this.#scan = { byId };\n }\n\n /**\n * Decodes the current JPEG entropy scan into component planes and RGBA\n * pixels for the JPEG decoder.\n */\n decodeScan()\n {\n const frame = this.#frame;\n const mcuWidth = 8 * frame.maxH;\n const mcuHeight = 8 * frame.maxV;\n const mcuColumns = Math.ceil(frame.width / mcuWidth);\n const mcuRows = Math.ceil(frame.height / mcuHeight);\n for (const component of frame.components)\n {\n component.planeWidth = mcuColumns * component.h * 8;\n component.planeHeight = mcuRows * component.v * 8;\n component.plane = new Uint8Array(component.planeWidth * component.planeHeight);\n }\n\n const reader = new EntropyReader(this.#bytes, this.#offset);\n let mcuIndex = 0;\n for (let row = 0; row < mcuRows; row++)\n {\n for (let column = 0; column < mcuColumns; column++)\n {\n for (const component of frame.components)\n {\n for (let y = 0; y < component.v; y++)\n {\n for (let x = 0; x < component.h; x++)\n {\n const block = this.decodeBlock(reader, component);\n const originX = (column * component.h + x) * 8;\n const originY = (row * component.v + y) * 8;\n writeBlock(component.plane, component.planeWidth, originX, originY, block);\n }\n }\n }\n mcuIndex++;\n if (this.#restartInterval && mcuIndex % this.#restartInterval === 0 && mcuIndex < mcuColumns * mcuRows)\n {\n reader.align();\n reader.consumeRestart();\n for (const component of frame.components) component.previousDc = 0;\n }\n }\n }\n const data = new Uint8Array(frame.width * frame.height * 4);\n for (let y = 0; y < frame.height; y++)\n {\n for (let x = 0; x < frame.width; x++)\n {\n const offset = (y * frame.width + x) * 4;\n if (frame.components.length === 1)\n {\n const value = frame.components[0].plane[y * frame.components[0].planeWidth + x];\n data[offset] = value; data[offset + 1] = value; data[offset + 2] = value;\n }\n else\n {\n const yValue = sampleComponent(frame.components[0], x, y, frame.width, frame.height);\n const cb = sampleComponent(frame.components[1], x, y, frame.width, frame.height) - 128;\n const cr = sampleComponent(frame.components[2], x, y, frame.width, frame.height) - 128;\n data[offset] = clampByte(yValue + 1.402 * cr);\n data[offset + 1] = clampByte(yValue - 0.344136 * cb - 0.714136 * cr);\n data[offset + 2] = clampByte(yValue + 1.772 * cb);\n }\n data[offset + 3] = 255;\n }\n }\n return { width: frame.width, height: frame.height, data };\n }\n\n /**\n * Decodes one JPEG coefficient block through inverse quantization and IDCT\n * for the JPEG decoder.\n */\n decodeBlock(reader, component)\n {\n const quantization = this.#quantization.get(component.quantizationId);\n const dcTable = this.#huffman.get(`0:${component.dc}`);\n const acTable = this.#huffman.get(`1:${component.ac}`);\n if (!quantization || !dcTable || !acTable) throw new Error(\"jpeg: missing quantization or Huffman table\");\n const coefficients = new Int32Array(64);\n const category = decodeHuffman(reader, dcTable);\n const delta = receiveExtend(reader, category);\n component.previousDc += delta;\n coefficients[0] = component.previousDc;\n let index = 1;\n while (index < 64)\n {\n const value = decodeHuffman(reader, acTable);\n if (value === 0) break;\n if (value === 0xf0) { index += 16; continue; }\n index += value >>> 4;\n if (index >= 64) throw new Error(\"jpeg: invalid AC coefficient run\");\n coefficients[ZIGZAG[index]] = receiveExtend(reader, value & 0x0f);\n index++;\n }\n for (let i = 0; i < 64; i++) coefficients[i] *= quantization[i];\n return inverseDct(coefficients);\n }\n\n /**\n * Reads an unsigned 8-bit value from the JPEG byte cursor for the JPEG\n * decoder.\n */\n readU8()\n {\n if (this.#offset >= this.#bytes.length) throw new Error(\"jpeg: unexpected end of input\");\n return this.#bytes[this.#offset++];\n }\n\n /**\n * Reads an unsigned 16-bit big-endian value from the JPEG byte cursor for\n * the JPEG decoder.\n */\n readU16()\n {\n return (this.readU8() << 8) | this.readU8();\n }\n\n /** Consumes and validates an expected JPEG marker for the JPEG decoder. */\n readMarker(expected = null)\n {\n const marker = this.nextMarker();\n if (expected !== null && marker !== expected) throw new Error(\"jpeg: missing SOI marker\");\n return marker;\n }\n\n /** Scans forward to the next valid JPEG marker byte for the JPEG decoder. */\n nextMarker()\n {\n while (this.#offset < this.#bytes.length && this.#bytes[this.#offset++] !== 0xff)\n {\n // Scan forward to the next marker prefix.\n }\n while (this.#offset < this.#bytes.length && this.#bytes[this.#offset] === 0xff) this.#offset++;\n if (this.#offset >= this.#bytes.length) throw new Error(\"jpeg: unexpected end while reading marker\");\n return this.#bytes[this.#offset++];\n }\n\n /**\n * Advances past the payload of an unhandled JPEG segment for the JPEG\n * decoder.\n */\n skipSegment()\n {\n const length = this.readU16();\n if (length < 2 || this.#offset + length - 2 > this.#bytes.length) throw new Error(\"jpeg: invalid segment length\");\n this.#offset += length - 2;\n }\n}\n\n/**\n * Bit-level reader over JPEG entropy-coded data that handles byte stuffing\n * and restart markers for the baseline decoder.\n */\nclass EntropyReader\n{\n #bytes;\n #offset;\n #buffer = 0;\n #bits = 0;\n #marker = null;\n\n /**\n * Creates a EntropyReader over caller-provided JPEG bytes and reader\n * options.\n */\n constructor(bytes, offset)\n {\n this.#bytes = bytes;\n this.#offset = offset;\n }\n\n /** Reads one entropy-coded bit for the JPEG binary reader. */\n readBit()\n {\n if (!this.#bits)\n {\n let value = this.#bytes[this.#offset++];\n if (value === 0xff)\n {\n while (this.#bytes[this.#offset] === 0xff) this.#offset++;\n const marker = this.#bytes[this.#offset++];\n if (marker !== 0x00) { this.#marker = marker; throw new Error(\"jpeg: unexpected marker in entropy data\"); }\n value = 0xff;\n }\n if (value === undefined) throw new Error(\"jpeg: unexpected end in entropy data\");\n this.#buffer = value;\n this.#bits = 8;\n }\n return (this.#buffer >>> --this.#bits) & 1;\n }\n\n /**\n * Reads the requested number of entropy-coded bits for the JPEG binary\n * reader.\n */\n readBits(count)\n {\n let value = 0;\n for (let i = 0; i < count; i++) value = (value << 1) | this.readBit();\n return value;\n }\n\n /**\n * Aligns the entropy cursor to the next byte boundary for the JPEG binary\n * reader.\n */\n align()\n {\n this.#bits = 0;\n }\n\n /**\n * Consumes and validates the next JPEG restart marker for the JPEG binary\n * reader.\n */\n consumeRestart()\n {\n while (this.#bytes[this.#offset] === 0xff) this.#offset++;\n const marker = this.#bytes[this.#offset++];\n if (marker < 0xd0 || marker > 0xd7) throw new Error(\"jpeg: missing restart marker\");\n }\n}\n\nfunction decodeHuffman(reader, table)\n{\n let code = 0;\n for (let length = 1; length <= 16; length++)\n {\n code = (code << 1) | reader.readBit();\n const entry = table[length].find(item => item.code === code);\n if (entry) return entry.value;\n }\n throw new Error(\"jpeg: invalid Huffman code\");\n}\n\nfunction receiveExtend(reader, size)\n{\n if (!size) return 0;\n const value = reader.readBits(size);\n const threshold = 1 << (size - 1);\n return value < threshold ? value - ((1 << size) - 1) : value;\n}\n\nfunction inverseDct(coefficients)\n{\n const output = new Uint8Array(64);\n for (let y = 0; y < 8; y++)\n {\n for (let x = 0; x < 8; x++)\n {\n let sum = 0;\n for (let v = 0; v < 8; v++)\n {\n for (let u = 0; u < 8; u++)\n {\n sum += SCALE[u] * SCALE[v] * coefficients[v * 8 + u] * COSINE[x][u] * COSINE[y][v];\n }\n }\n output[y * 8 + x] = clampByte(128 + sum / 4);\n }\n }\n return output;\n}\n\nfunction writeBlock(plane, planeWidth, originX, originY, block)\n{\n for (let y = 0; y < 8; y++)\n {\n const targetY = originY + y;\n if (targetY >= plane.length / planeWidth) continue;\n for (let x = 0; x < 8; x++)\n {\n const targetX = originX + x;\n if (targetX < planeWidth) plane[targetY * planeWidth + targetX] = block[y * 8 + x];\n }\n }\n}\n\nfunction sampleComponent(component, x, y, width, height)\n{\n const sampleX = Math.min(component.planeWidth - 1, Math.floor(x * component.planeWidth / width));\n const sampleY = Math.min(component.planeHeight - 1, Math.floor(y * component.planeHeight / height));\n return component.plane[sampleY * component.planeWidth + sampleX];\n}\n\nfunction clampByte(value)\n{\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n"],"names":["ZIGZAG","COSINE","Array","from","length","_","x","u","Math","cos","PI","SCALE","value","sqrt","decodeJpegToRgba","bytes","metadata","decoder","BaselineJpegDecoder","image","decode","payloadType","sourceFormat","mimeType","containerOnly","isDecoded","rgbaDecodeSupported","width","height","pixelFormat","data","strideBytes","origin","colorSpace","alphaMode","canDecodeJpeg","precision","components","marker","progressive","Map","constructor","readMarker","nextMarker","readScanHeader","decodeScan","readQuantizationTables","readFrame","readHuffmanTables","readRestartInterval","skipSegment","Error","readU16","readU8","list","maxH","maxV","i","id","sampling","component","h","v","quantizationId","dc","ac","previousDc","plane","planeWidth","planeHeight","max","push","consumed","end","info","table","Uint16Array","set","fill","map","counts","code","valueIndex","count","byId","tables","get","spectralStart","spectralEnd","successive","frame","mcuWidth","mcuHeight","mcuColumns","ceil","mcuRows","Uint8Array","reader","EntropyReader","mcuIndex","row","column","y","block","decodeBlock","originX","originY","writeBlock","align","consumeRestart","offset","yValue","sampleComponent","cb","cr","clampByte","quantization","dcTable","acTable","coefficients","Int32Array","category","decodeHuffman","delta","receiveExtend","index","inverseDct","expected","readBit","undefined","readBits","entry","find","item","size","threshold","output","sum","targetY","targetX","sampleX","min","floor","sampleY","round"],"mappings":"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"}
@@ -11,6 +11,11 @@ const DEBUG_OUTPUTS = Object.freeze({
11
11
  wav: "wavJson",
12
12
  mp3: "mp3Json"
13
13
  });
14
+
15
+ /**
16
+ * Normalizes reader options against their supported defaults for the MP3 format
17
+ * reader.
18
+ */
14
19
  function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsAudioFormat") {
15
20
  const values = {
16
21
  ...DEFAULT_VALUES,
@@ -21,9 +26,13 @@ function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsA
21
26
  values.emit = normalizeEmit(values.emit, values.inputType, readerName);
22
27
  return values;
23
28
  }
29
+
30
+ /** Normalizes the requested input representation for the MP3 format reader. */
24
31
  function normalizeInputType(inputType) {
25
32
  return inputType ? String(inputType).replace(/^\./u, "").toLowerCase() : "";
26
33
  }
34
+
35
+ /** Normalizes the requested output representation for the MP3 format reader. */
27
36
  function normalizeEmit(emit, inputType, readerName) {
28
37
  if (emit === undefined || emit === null) return OUTPUT_RAW;
29
38
  if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;
@@ -31,12 +40,16 @@ function normalizeEmit(emit, inputType, readerName) {
31
40
  if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;
32
41
  throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
33
42
  }
43
+
44
+ /** Returns a byte view over the supplied binary input for the MP3 format reader. */
34
45
  function toBytes(input) {
35
46
  if (input instanceof Uint8Array) return input;
36
47
  if (input instanceof ArrayBuffer) return new Uint8Array(input);
37
48
  if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
38
49
  throw new TypeError("Audio input must be Uint8Array, ArrayBuffer, or DataView");
39
50
  }
51
+
52
+ /** Inspects input using normalized format options for the MP3 format reader. */
40
53
  function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
41
54
  const bytes = toBytes(input);
42
55
  const metadata = inspectBytes(bytes);
@@ -51,6 +64,11 @@ function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
51
64
  ...metadata
52
65
  };
53
66
  }
67
+
68
+ /**
69
+ * Reports whether input is supported under normalized format options for the MP3
70
+ * format reader.
71
+ */
54
72
  function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
55
73
  try {
56
74
  const metadata = inspectWithValues(input, values, expectedType);
@@ -98,6 +116,8 @@ function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = ""
98
116
  };
99
117
  }
100
118
  }
119
+
120
+ /** Reads input using normalized format options for the MP3 format reader. */
101
121
  function readWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
102
122
  const bytes = toBytes(input);
103
123
  const metadata = inspectWithValues(bytes, values, expectedType);
@@ -124,6 +144,8 @@ function getAudioMimeType(metadata) {
124
144
  if (metadata.sourceFormat === "wav") return "audio/wav";
125
145
  return "audio/mpeg";
126
146
  }
147
+
148
+ /** Converts a parsed payload into a JSON-safe value for the MP3 format reader. */
127
149
  function toJsonValue(value) {
128
150
  if (value instanceof Uint8Array) return {
129
151
  byteLength: value.byteLength
@@ -136,6 +158,11 @@ function toJsonValue(value) {
136
158
  }
137
159
  return value;
138
160
  }
161
+
162
+ /**
163
+ * Inspects the supplied bytes without decoding their payload for the MP3 format
164
+ * reader.
165
+ */
139
166
  function inspectBytes(bytes) {
140
167
  if (isWAV(bytes)) return inspectWAV(bytes);
141
168
  if (isMP3(bytes)) return inspectMP3(bytes);
@@ -144,9 +171,19 @@ function inspectBytes(bytes) {
144
171
  audioFormat: ""
145
172
  };
146
173
  }
174
+
175
+ /**
176
+ * Reports whether the supplied bytes have a RIFF/WAVE header for the MP3 format
177
+ * reader.
178
+ */
147
179
  function isWAV(bytes) {
148
180
  return bytes.byteLength >= 12 && fourCc(bytes, 0) === "RIFF" && fourCc(bytes, 8) === "WAVE";
149
181
  }
182
+
183
+ /**
184
+ * Reports whether the supplied bytes have a supported MP3 header for the MP3
185
+ * format reader.
186
+ */
150
187
  function isMP3(bytes) {
151
188
  return bytes.byteLength >= 3 && (fourCc(bytes, 0, 3) === "ID3" || bytes[0] === 0xff && (bytes[1] & 0xe0) === 0xe0);
152
189
  }