ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Deeplake 内置 OpenJPEG:JPEG 2000 编解码库的源码结构、构建方式与 API 使用指南

Deeplake 内置 OpenJPEG:JPEG 2000 编解码库的源码结构、构建方式与 API 使用指南 数据库向量数据库数据湖人工智能RAG【免费下载链接】deeplakeDeeplake is AI Data Runtime for Agents. It provides serverless postgres with a multimodal datalake, enabling scalable retrieval and training.项目地址https://gitcode.com/gh_mirrors/de/deeplake点击查看免费下载导读本文围绕 Deeplake 仓库中捆绑的第三方库 cpp/3rd_party/openjpeg/README.md 展开系统介绍 OpenJPEG 是什么、以何种许可证开放、在仓库中的目录组织方式、CMake 构建参数以及对外暴露的稳定 C API 与编码/解码参数模型。读者读完本文后将能理解这个 JPEG 2000 参考实现如何被集成进 Deeplake 的 C 构建体系并掌握利用其openjp2库做图像压缩/解压的关键接口与配置项。OpenJPEG 是什么JPEG 2000 的官方参考实现OpenJPEG 是一个用 C 语言编写的开源 JPEG 2000 编解码器codec。JPEG 2000 是联合图像专家组JPEG制定的静态图像压缩标准OpenJPEG 的开发目标就是推动这一标准的普及。自 2015 年 4 月起它被 ISO/IEC 与 ITU-T 正式认定为 JPEG 2000 参考软件Reference Software。在 Deeplake 仓库中OpenJPEG 以第三方库形式被完整收录其源码位于 cpp/3rd_party/openjpeg包含核心编解码库openjp2及其构建脚本、变更日志与许可文件。结合 cpp/3rd_party/CMakeLists.txt 可以看到它通过add_subdirectory(openjpeg)被纳入 Deeplake C 的第三方依赖构建流程并作为3RD_PARTY_LIBS中的openjp2链接给上层使用——这正是 Deeplake 处理多模态数据如图像类型时底层可依赖的 JPEG 2000 编解码能力。许可证与使用边界BSD 2-ClauseOpenJPEG 采用BSD 2-clause Simplified License见 cpp/3rd_party/openjpeg/LICENSE这意味着任何人都可以使用或修改代码包括商用应用唯一的限制是在源码或二进制文档中保留版权声明如果你对代码做了可能对其他用户有价值的改进官方鼓励通过提交 pull request 或 issue 回馈社区但这不是强制要求。这一点对 Deeplake 这样的集成方非常重要——把openjp2静态编译进自己的 C 二进制并对外分发是许可允许的只需保留版权与许可说明。目录结构从库内核到周边应用仓库中 cpp/3rd_party/openjpeg/README.md 给出的原始目录层级描述如下上层src/lib、src/bin、wrapping、thirdparty、doc、tests、cmake、scripts为上游完整版结构src/lib各库的实现源码openjp2openjp2 库源码覆盖 JPEG 2000 Part 1 与 Part 2openjpwl构建 JPWL无线 JPEG 2000风格库所需的额外源码openjpip用于 JPEG 2000 图像远程浏览的完整客户端-服务器架构openjp3dJP3D 实现openmj2MJ2Motion JPEG 2000实现src/bin使用 openjpeg 库的所有应用common所有应用共用的文件jp2基础编解码工具mj2Motion JPEG 2000 可执行程序jpipOpenJPIP 应用服务器与 dec 服务器其中java子目录提供 JPIP 的 Java 客户端查看器jp3dJP3D 应用tcltk是 JP3D 的测试工具wxOPJViewer基于 wxWidget 的 j2k 文件显示 GUIwrapping/java供 Java 程序调用的 JNI 封装thirdparty部分应用依赖的第三方库仅当系统找不到对应库时才构建。注意libopenjpeg 本身没有任何依赖docDoxygen 文档配置与 man 手册tests测试套件的配置与工具测试图片位于单独的 openjpeg-data 仓库cmakeCMake 相关文件scripts开发者脚本。当前仓库实际收录的部分Deeplake 仓库出于仅取所需的集成策略只收录了上游 OpenJPEG 的核心编解码库部分实际结构为cpp/3rd_party/openjpeg/ ├── CMakeLists.txt # 顶层构建版本、SOVERSION、opj_config.h 生成 ├── AUTHORS.md / CHANGELOG.md / LICENSE / README.md / THANKS.md └── openjp2/ # openjp2 库全部源码openjp2目录下是完整的编解码实现从源码结构看涵盖了 JPEG 2000 标准的核心模块例如j2k.c码流codestream解析与封装jp2.cJP2 文件格式读写dwt.c离散小波变换5-3 无损与 9-7 有损tcd.ctile 编码/解码器t1.c、t2.cTier-1 熵编码EBCOT与 Tier-2 打包mqc.cMQ 算术编码器mct.c多分量变换pi.cpacket 迭代器实现五种渐进顺序image.c图像对象管理cio.c码流 I/Othread.c线程支持。各模块都通过 openjpeg.h 对外暴露有限 API内部实现细节对应用层隐藏。构建与集成CMake 配置要点本仓库收录的是OpenJPEG 2.4.0由 cpp/3rd_party/openjpeg/CMakeLists.txt 中OPENJPEG_VERSION_MAJOR2、MINOR4、BUILD0确定其二进制 SOVERSION 为7可通过-DOPENJPEG_SOVERSION覆盖默认值。顶层 CMake 行为cpp/3rd_party/openjpeg/CMakeLists.txt 负责通过check_include_file检查系统头文件缺失时必须的头文件会导致构建中止可选头文件则回退到内部实现用configure_file将openjp2/opj_config.h.cmake.in与opj_config_private.h.cmake.in模板生成到构建目录把版本号等宏如OPJ_VERSION_MAJOR/MINOR/BUILD见 opj_config.h.cmake.in注入opj_config.hadd_subdirectory(openjp2)编译库并把OPENJPEG_LIBRARIES、OPENJPEG_VERSION、OPENJPEG_INCLUDE_DIRS等变量通过PARENT_SCOPE返回给上层只有所有前置条件满足时才会置CAN_BUILD_OPENJPEGTRUE。openjp2 子目录的编译选项cpp/3rd_party/openjpeg/openjp2/CMakeLists.txt 定义了本仓库集成时实际生效的构建行为静态库add_library(openjp2 STATIC ...)并以OPJ_STATIC作为公开编译定义这与 openjpeg.h 中静态库使用 hidden 可见性的符号导出策略相对应OPJ_USE_THREAD默认 ON开启线程/互斥锁支持关闭时定义MUTEX_stub。在 Windows 上找不到线程库时自动回退到MUTEX_win32在 POSIX 平台链接pthreadMUTEX_pthread若要求线程但找不到任何线程库则置CAN_BUILD_OPENJPEGFALSEOPJ_DISABLE_TPSOT_FIX默认 OFF用于禁用针对 TPsotTNsot 场景的兼容性修复对应上游 issue #254UNIX 平台会私有链接m数学库。依赖该库的上游代码只需include_directories指向构建目录下的openjpeg/openjp2见 cpp/3rd_party/CMakeLists.txt即可#include openjpeg.h使用公开 API。API/ABI 稳定性设计OpenJPEG 致力于为应用程序提供稳定的 API/ABI具体机制在 openjpeg.h 中体现为两层只暴露有限子集库通过导出/隐藏函数机制仅让带OPJ_API修饰的函数成为公开接口。在 GCC 系编译器上若你无法确定哪些函数可供应用调用官方建议用-fvisibilityhidden编译 OpenJPEG这样只有显式标记为OPJ_API的符号才会对外可见可见性宏定义见 openjpeg.hWindows 上的强制收窄MSVC 原生支持导出/隐藏机制因此 Windows 下可用的 API 就是 OpenJPEG 官方支持的 API 集合。对 Deeplake 而言这意味着将openjp2静态链接进自有二进制时不必担心库内部符号泄漏或未来小版本升级导致链接断裂——只要不触碰非OPJ_API符号即可。核心公开 API 与数据类型速览以下关键接口均可在 openjpeg.h 中定位构成使用该库的骨架。版本与图像对象opj_version()返回库版本字符串openjpeg.hopj_image_create()/opj_image_destroy()创建/销毁opj_image_t图像对象openjpeg.h。支持的码流格式OPJ_CODEC_FORMAT枚举值含义读写能力OPJ_CODEC_J2KJPEG 2000 裸码流读/写OPJ_CODEC_JPTJPT 流JPIP只读OPJ_CODEC_JP2JP2 文件格式读/写OPJ_CODEC_JPPJPP 流JPIP待实现OPJ_CODEC_JPXJPX 文件格式Part-2待实现压缩参数opj_cparameters_t编码时通过opj_set_default_encoder_parameters()初始化、再按需修改的关键字段包括分块tiletile_size_on、cp_tx0/cp_ty0、cp_tdx/cp_tdy层与码率tcp_numlayers、tcp_rates[]各层目标码率需递减末位用1表示无损、tcp_distoratio[]各层 PSNR需递增末位用0表示无损分辨率与小波numresolution、irreversible1用不可逆 DWT 9-70用默认的无损 5-3码块与子带cblockw_init/cblockh_init默认 64×64、modecblk_style、prcw_init[]/prch_init[]precinct 尺寸渐进顺序prog_orderOPJ_LRCP/RLCP/RPCL/PCRL/CPRL与POC[]、numpocs配置文件rsiz用于组合OPJ_PROFILE_*如OPJ_PROFILE_CINEMA_2K/4K、广播OPJ_PROFILE_BC_*、IMFOPJ_PROFILE_IMF_2K等与OPJ_EXTENSION_MCT码流上限max_cs_size整条码流字节上限与tcp_rates冲突时以它为准并告警、max_comp_size单分量上限ROIroi_compno、roi_shiftMCTtcp_mct、mct_data命令行字段infile/outfile、decod_format0:PGX, 1:PxM, 2:BMP, 3:TIF、cod_format0:J2K, 1:JP2, 2:JPT。解压参数opj_dparameters_t解码时通过opj_set_default_decoder_parameters()初始化常用字段cp_reduce丢弃最高的若干个分辨率层级输出分辨率相当于原图除以2^reducecp_layer最多解码前 N 个质量层DA_x0/DA_x1/DA_y0/DA_y1解码区域感兴趣区域裁剪tile_index、nb_tile_to_decode按 tile 解码m_verbose冗长输出开关。编解码主流程函数opj_create_compress(OPJ_CODEC_FORMAT)→opj_setup_encoder()→opj_start_compress()→opj_encode()→opj_end_compress()→opj_destroy_codec()openjpeg.hopj_create_decompress(OPJ_CODEC_FORMAT)→opj_setup_decoder()→opj_read_header()→opj_set_decode_area()→opj_decode()→opj_end_decompress()→opj_destroy_codec()openjpeg.h线程控制opj_codec_set_threads()openjpeg.h配合上文OPJ_USE_THREAD构建选项使用流抽象opj_stream_create_file_stream()或opj_stream_create() 自定义 read/write/skip/seek 回调适配内存、文件或网络来源事件回调opj_set_info_handler()/opj_set_warning_handler()/opj_set_error_handler()用于接收库运行时的消息。版本演进与维护状态2.4.0 快照本仓库收录的 2.4.0 版本在 CHANGELOG.md 中有完整记录其发布集中在鲁棒性与性能上值得集成方关注的方向包括安全性加固修复了多处由 fuzzing 发现的堆/全局缓冲区溢出涉及pi.c、t2.c、dwt.c、tcd.c、mqc.c并加入对 width/height/numcomps、POC、SGcod/SPcoc/SPcod 等字段的合法性校验性能单线程 DWT5-3 与 9-7优化以及编码器多线程支持功能编码器支持生成 PLT marker、IMF profile 写入以及opj_decompress输入目录的容错处理。这些演进也解释了为什么使用方应保持OPJ_API边界内的调用——上游正是在保持 ABI 兼容的前提下持续修复安全与正确性问题。在 Deeplake 中的角色小结总结来看OpenJPEG 在 Deeplake 仓库中的定位是开箱即用的 JPEG 2000 编解码基础设施通过 cpp/3rd_party/CMakeLists.txt 与顶层 CMake 体系串联以静态库openjp2形式随 C 工程一同编译无需系统预装libopenjpeg 自身无第三方依赖许可证为 BSD 2-Clause允许闭源商用集成仅需保留版权声明对外提供稳定的 C API编码/解码参数模型清晰可满足图像无损/有损压缩、渐进传输、ROI 解码、按 tile/分辨率抽取等 JPEG 2000 典型诉求目录只保留核心openjp2模块这与 Deeplake 按需引入第三方库的集成策略一致方便后续升级或替换。如需在自有项目中复用可参考仓库内openjp2的构建配置与 openjpeg.h 的公开头文件二者共同构成了使用该库的完整依据。赞分享数据库向量数据库数据湖人工智能RAG【免费下载链接】deeplakeDeeplake is AI Data Runtime for Agents. It provides serverless postgres with a multimodal datalake, enabling scalable retrieval and training.项目地址https://gitcode.com/gh_mirrors/de/deeplake点击查看免费下载相关推荐JUCE 内置 libvorbis 1.3.7 指南Ogg Vorbis 编解码库的源码结构与构建集成JUCE 内置 libvorbis 1.3.7 指南Ogg Vorbis 编解码库的源码结构与构建集成 本篇文章以 JUCE 仓库中随源码分发的 libvor音视频音频处理桌面应用移动开发插件系统跨平台Mars 仓库内嵌 Zstandard 库zstd/lib源码结构与构建指南Mars 仓库内嵌 Zstandard 库zstd/lib源码结构与构建指南 导读 本文以 Mars 仓库中 mars/zstd/lib/README.md网络通信移动开发Sunshine 快速上手指南如何搭建自己的游戏串流服务器Sunshine 快速上手指南如何搭建自己的游戏串流服务器 想在客厅电视上玩 PC 游戏Sunshine 能把一台闲置电脑变成自托管的游戏串流主机由 Mo音视频后端上一篇阿里开源Wan2.1-I2V-14B-720P720P视频生成的开源革命下一篇RailsAdmin从2.x升级到3.x兼容性处理与功能迁移创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表