decimen-optical-transfer 的 vendored 解码器:decimen-codec WASM 构建的许可证构成与运行时身份
前端通信【免费下载链接】decimen-optical-transfer项目地址https://gitcode.com/gh_mirrors/de/decimen-optical-transfer点击查看免费下载decimen-codec 是 decimen-optical-transfer 项目内置vendored的 QR 解码引擎一份基于 zxing-cpp 定制编译的 WebAssembly 二进制配套 embind 胶水与类型声明一起被提交在仓库的vendor/decimen-codec/目录下。它的NOTICE.md用十几行文字交代了这个构建的出处、身份标识和许可证构成而它在仓库中的真实角色——一条被“跟踪”tracked的快速解码路径以及两条被编译进 WASM 的读取 API——正是整个接收端吞吐设计的核心。本文以该 NOTICE 为骨架结合仓库源码展开这份构建的身份、接入方式与许可证边界帮助你快速判断能否在自己的项目里复用这份 vendored 制品。一、它是什么QR-only、reader-only 的定制 zxing-cpp 构建NOTICE.md开门见山给出了三层定义compiled decoder仓库 vendored 的不是源码而是编译产物即vendor/decimen-codec/decimen_codec.wasmQR-only、reader-only只保留 QR 码的读取decode能力二维码生成encoder等无关能力被编译掉custom WebAssembly build of zxing-cpp它基于 zxing-cpp 定制构建且带有tracked decode path——一个为屏幕→相机这种“已知码大致位置”场景优化的快速解码路径small embind wrapper通过 Emscripten 的 embind 导出一小组 JavaScript API供上层调用。在 decimen-optical-transfer 仓库里这个构建不是可选依赖而是接收端工作的核心receive/worker.ts顶部注释明确写着“QR decode worker: the decimen-codec engine (a custom zxing-cpp build) compiled to WASM”并解释了为什么要走 WASMSafari 从未实现过BarcodeDetectorWebKit bug 281848因此 WASM 是唯一可移植的 QR 解码途径。二、它放在哪里vendored 目录的四个文件vendor/decimen-codec/目录下共四个文件职责划分清晰文件职责decimen_codec.wasm编译产物本体解码引擎的二进制decimen_codec.jsEmscripten 生成的 embind 胶水层负责加载 WASM、导出 APIdecimen_codec.d.ts手工编写的 TypeScript 类型声明描述 embind API 的形状NOTICE.md本篇文章的骨架文档构建出处、身份与许可证构成LICENSE.zxing-cpp上游 zxing-cpp 的 Apache-2.0 许可证全文其中decimen_codec.d.ts开头注明“Source of truth:decimen-codec/wrapper/decimen_codec.cpp”即类型声明的权威来源是 decimen-codec 上游仓库中的 C 包装器源码本仓库这份.d.ts需要与其保持同步。两个运行时身份标识version() 与 build()NOTICE 指出“banner on the first line ofdecimen_codec.js”和模块的version()/build()运行时导出共同标识这个构建。类型声明给出了二者的确切语义version(): string—— 构建时的 decimen-codec package.json 版本号例如0.1.0build(): string—— 构建标识git 短哈希若从未提交dirty的源码树构建则带-dirty后缀。这两个导出让接收端或任何接入方可以在运行时精确报告“我正在运行哪个版本的解码器”这在诊断与回归定位中非常有用——docs/technical/diagnostics.md中的诊断运行报告会记录完整环境信息其中就包括这类构建身份。三、它如何被接入两种 WASM 加载方式receive/wasm-url.ts展示了被托管构建served builds的加载方式import wasmUrl from ../vendor/decimen-codec/decimen_codec.wasm?url; export default wasmUrl;即把.wasm作为独立资源asset打包由 service worker 预缓存而独立单文件构建standalone builds则换成receive/wasm-url.inline.ts对应的内联方案。内联方案的实现位于build/inline-codec-wasm.ts由于 Vite 的?inline对.wasm不生效Vite 会接管该扩展名并让 Rollup 把二进制当 JavaScript 解析该 Vite 插件改用虚拟模块virtual:codec-wasm-data-url把vendor/decimen-codec/decimen_codec.wasm读入并编码为data:application/wasm;base64,的 Data URL 导出。这样独立页面可以完全自包含不依赖外部文件。在 worker 内部模块初始化通过locateFile把.wasm重定向到上述 URLconst ready: PromiseDecimenModule DecimenCodec({ locateFile: (path: string, prefix: string) (path.endsWith(.wasm) ? wasmUrl : prefix path), });四、它导出什么readFull 与 readTracked 双路径decimen_codec.d.ts完整描述了 embind 导出面除version()/build()外核心是两条读取 API 与若干调试 APIAPI签名要点用途readFull(ptr, width, height, tryHarder, maxSymbols, returnErrors) → DecimenResultVector全帧扫描完整检测流程可配置 tryHarder、符号数上限与是否返回错误结果readTracked(ptr, width, height, dim, x0..y3) → DecimenResult跟踪路径跳过检测用缓存的四边形 模块数直接重建变换、采样网格trackedMatrix同 readTracked 参数 →Uint8Array \| null调试原始采样的模块网格dim×dim行主序 0/1projectPoint四边形 模块空间点 →{x, y, valid}调试把模块空间点投影回图像坐标binarizedRow(ptr, width, height, y) → Uint8Array \| null调试二值化矩阵的某一行每像素 0/1相关数据结构包括DecimenPointx/y、DecimenQuad四个角点即 topLeft/topRight/bottomRight/bottomLeft、DecimenResultvalid、error、bytes、position、modules其中 modules 表示符号的模块数17 4·version未知时为 0以及DecimenResultVectorsize()/get()/delete()模拟 C 端返回的 vector。两条路径的协作跟踪优先全量兜底receive/worker.ts给出了两条路径的实际调用逻辑当裁剪区域crop带有上次解码成功的quad与模块数dim时先走readTracked——变换直接从四边形重建网格直接采样完全跳过检测阶段。注释记录基准测试结果在 V40版本 40 的 QR 码上单次解码比全量路径快2.0–2.6 倍这省下的是手机端的 CPU 与发热若跟踪命中失败回落到同一缓冲区上的readFull全量扫描同时用其结果重新锚定四边形。跟踪是机会主义的从不承担成败“Tracked is opportunistic, never load-bearing”。全量扫描的调用参数同样值得注意const vec zx.readFull(ptr, pw, ph, true, full ? 12 : 2, full);即 tryHarder 始终开启“real marginal captures are where it earns its keep”全帧扫描允许最多 12 个符号、裁剪扫描只允许 2 个因为错误结果也计入符号数上限见注释“error results COUNT against the symbol cap, hence the headroom above 9 codes”returnErrors在全帧模式下开启使 zxing 检测到但解码失败的符号仍返回位置信息——ChecksumError等错误结果里的位置依然像素级准确接收端据此在下一帧对准裁剪框实现“全帧失败处裁剪解码成功”。解码流程以 RGBA 像素为输入worker 通过_malloc在 WASM 堆分配width×height×4字节用HEAPU8.set拷入像素后调用读取 API结束后_free释放。像素可以来自两种捕获模式——跨线程传输的 ArrayBufferreadback 回退方案或 ImageBitmapGPU 侧裁剪Safari 17/现代浏览器后者的好处是主线程完全不碰像素。预热warm-up设计worker 启动后会用一块 8×8 的全白像素调用一次readFull再丢弃结果目的是完成 WASM 实例化与首次调用的 JIT避免真实第一帧为此付出延迟。池worker pool通过{id: -1}的 ping 消息忽略这次预热。五、许可证构成AGPL 主框架Apache-2.0 与 MIT 的夹层NOTICE 的许可证陈述可以拆成三层decimen-codec 自身AGPL-3.0-or-later与 decimen-optical-transfer 项目整体许可证一致见仓库根目录 LICENSE。这也意味着如果你要在自己的项目里复用这份 vendored 构建AGPL 的传染性条款需要纳入合规考量上游 zxing-cppApache License, Version 2.0NOTICE 特别注明 zxing-cpp 是“unmodified”未修改——在 decimen-codec 上游源码仓库中以固定版本pinned submodule引入。Apache-2.0 与 AGPL-3.0 可以并存但前者要求再分发时保留其 NOTICE 文本这正是仓库在vendor/decimen-codec/下保留 LICENSE.zxing-cpp 全文的原因Emscripten 运行时输出MIT-licensed。decimen_codec.js胶水由 Emscripten 生成Emscripten 的运行时输出以 MIT 许可发布这是构建链中最宽松的一层。仓库根目录的 NOTICE 文件对整份制品做了汇总vendored decimen-codec 构建位于vendor/decimen-codecAGPL-3.0-or-later源码维护在 decimen-codec 上游仓库zxing-cpp 以 Apache-2.0 并入。另外 README.md 的 License 一节还补充了一个项目层面的历史细节decimen-optical-transfer 自 v0.4.0 起采用 AGPL-3.0-or-laterv0.3.0 及之前的版本曾以 MIT 发布且仍保留原条款。六、对复用者的三点提示基于以上源码证据如果你打算在自己项目中接入这份 vendored 解码器有几点值得留意加载方式二选一被托管部署可用.wasm独立资源 service worker 预缓存单文件场景用build/inline-codec-wasm.ts的 Data URL 内联方案。两种方案在receive/下都有一一对应的实现可参考运行时身份可校验接入后调用version()与build()即可确认构建来源配合 banner 首行可做精确的版本审计许可证边界分发制品时需同时满足 AGPL-3.0-or-laterdecimen-codec 与项目整体、Apache-2.0zxing-cpp保留 NOTICE 文本与 MITEmscripten 运行时输出三套条款——这正是 vendor/decimen-codec/NOTICE.md 与 LICENSE.zxing-cpp 必须随制品一起分发的根本原因。如需进一步了解解码器在接收链路中的具体角色与基准测试方法可继续阅读 docs/technical/architecture.md、docs/technical/diagnostics.md 与receive/worker.ts。赞分享前端通信【免费下载链接】decimen-optical-transfer项目地址https://gitcode.com/gh_mirrors/de/decimen-optical-transfer点击查看免费下载相关推荐Aptos 执行器Executor深入解析从区块执行到状态提交的完整技术指南Aptos 执行器Executor深入解析从区块执行到状态提交的完整技术指南 导读 Aptos 是一条 Layer 1 区块链其核心架构是一个 复制状态前端通信Decimen Optical Transfer 架构解析三页面、共享核心与单用途构建插件的无框架设计Decimen Optical Transfer 架构解析三页面、共享核心与单用途构建插件的无框架设计 本篇技术指南围绕 docs/technical/arc前端通信如何快速切换游戏DLSS版本DLSS Swapper让升级降级回退一步到位如何快速切换游戏DLSS版本DLSS Swapper让升级降级回退一步到位 游戏更新后画面开始闪烁、帧数莫名下滑你折腾完驱动又调遍游戏内设置最后才发现是它桌面应用上一篇Pandoc 转 Typst 引文语法映射从 pandoc 引用到 Typst 引用标记下一篇AI_NovelGenerator 实战指南基于大语言模型的多章节长篇小说生成全流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Brython 包(.brython.js)实战指南:从 `brython-cli make_package` 到浏览器端按需加载

Brython 包(.brython.js)实战指南:从 `brython-cli make_package` 到浏览器端按需加载

编程语言语言运行时编译器前端 【免费下载链接】brython Brython (Browser Python) is an implementation of Python 3 running in the browser 项目地址: https://gitcode.com/gh_mirrors/br/brython 点击查看 免费下载 Brython(Browser Python&#x…

2026/10/10 11:25:18 阅读更多 →
Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操

Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操

Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 苹果停止支持的第 4 年&am…

2026/10/9 7:45:18 阅读更多 →
深入理解webpack:前端工程化核心配置与优化实战

深入理解webpack:前端工程化核心配置与优化实战

学习前端,绕不开webpack。这个工具太常用了,以至于很多人把它当作“框架”来称呼——“学习前端webpack的框架”这话虽然有点概念混淆,但背后透露的需求非常真实:想搞懂前端工程化,想把打包配置玩明白,想弄…

2026/10/9 7:45:18 阅读更多 →

最新新闻

YOLO实时物体检测实战:从齿条螺栓螺母裂纹数据集到TensorRT部署

YOLO实时物体检测实战:从齿条螺栓螺母裂纹数据集到TensorRT部署

简介:面向工业质检与计算机视觉开发者的YOLO实时物体检测工程包,聚焦齿条、螺栓、螺母及裂缝等目标的识别与定位,适合有深度学习基础的开发者进行算法研究或项目移植;YOLO本身将检测任务转化为单个回归问题,通过网格与…

2026/10/10 16:02:54 阅读更多 →
用C#与easyHook实现Win32 API Hook:程序行为监控与远程注入实战

用C#与easyHook实现Win32 API Hook:程序行为监控与远程注入实战

简介:这是一份C# EasyHook库的完整使用示例工程,面向需要在运行时实现跨进程函数拦截与注入的.NET开发者,适合对Windows钩子机制有一定了解、希望快速上手EasyHook的读者。包内包含WinForms测试窗口、类库工程与可运行Demo,覆盖了…

2026/10/10 16:02:54 阅读更多 →
yolov5果蔬识别实战:数据集构建、训练调参与产线部署避坑指南

yolov5果蔬识别实战:数据集构建、训练调参与产线部署避坑指南

简介:这是一套面向深度学习入门者与计算机视觉方向学生的YOLOv5果蔬识别完整项目包,围绕土豆、圣女果、大白菜、大葱、梨、胡萝卜、芒果、苹果、西红柿、韭菜、香蕉、黄瓜等十余类常见果蔬的检测任务展开,可用于课程设计、毕业设计或算法练手…

2026/10/10 16:02:54 阅读更多 →
O2O平台CRM系统架构设计:从线索公私海到平台化落地

O2O平台CRM系统架构设计:从线索公私海到平台化落地

简介:美团O2O的CRM系统架构设计.doc 以美团 CRM 为样本,系统拆解 O2O 平台如何借助客户关系管理增强线下资源控制与服务品质。资源面向产品经理、B端运营及电商架构师,适合需要理解销售线索管理、运营中台、数据决策支持和移动办公场景的读者…

2026/10/10 16:02:54 阅读更多 →
ElasticSearch搜索系统建设实战:从Docker部署到线上自愈

ElasticSearch搜索系统建设实战:从Docker部署到线上自愈

简介:本资源是一份面向Java开发者与技术分享者的ElasticSearch入门到进阶PPT课件,共40余页,系统梳理了搜索引擎选型必要性、Lucene演进脉络、ES核心架构(节点/集群/分片/副本)、RESTful API实践要点及与Solr、Splunk的…

2026/10/10 16:02:54 阅读更多 →
热电联产机组联合优化调度:Matlab+YALMIP建模风电消纳与储热电锅炉算例

热电联产机组联合优化调度:Matlab+YALMIP建模风电消纳与储热电锅炉算例

1. 冬季供暖季的弃风困局:热电联产机组到底卡在哪每年供暖季一过,风电场的同事就开始盯着调度曲线叹气:白天风光还好,一到后半夜风速上来了,风电场却得压出力,甚至有整场停机的时候。而另一边,热…

2026/10/10 16:01:52 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →