#jpeg

sys turbojpeg-sys

为 TurboJPEG 提供原始绑定

7个版本 (1个稳定版)

1.0.0 2024年2月3日
1.0.0-pre.02024年2月2日
0.2.3 2022年11月23日
0.2.2 2022年9月23日
0.1.0 2021年5月2日

图像 中排名第500

Download history 1230/week @ 2024-04-12 1093/week @ 2024-04-19 757/week @ 2024-04-26 862/week @ 2024-05-03 919/week @ 2024-05-10 1154/week @ 2024-05-17 784/week @ 2024-05-24 1006/week @ 2024-05-31 912/week @ 2024-06-07 901/week @ 2024-06-14 754/week @ 2024-06-21 1137/week @ 2024-06-28 962/week @ 2024-07-05 819/week @ 2024-07-12 729/week @ 2024-07-19 826/week @ 2024-07-26

每月下载量 3,502
7 个crate中使用(通过 turbojpeg

Unlicense OR MIT

4.5MB
86K SLoC

C 52K SLoC // 0.2% comments Assembly 24K SLoC // 0.2% comments GNU Style Assembly 7K SLoC // 0.1% comments Rust 2.5K SLoC // 0.0% comments Bitbake 743 SLoC

turbojpeg-sys

turbojpeg 库提供的原始Rust绑定。如果您想在Rust中处理JPEG文件,应使用 turbojpeg crate 中的高级绑定。

这些绑定适用于 TurboJPEG 版本 3.0,并使用新API(以 tj3 前缀)。请注意,Linux的大部分包管理器只有 TurboJPEG 2.0 或 2.1。

构建

我们支持多种构建原生 TurboJPEG 库和链接到它的选项。您可以从三个方面进行控制

  • 源码:我们应该自己编译库,还是使用系统中的编译版本?
  • 链接:我们应该使用静态链接还是动态链接?
  • 绑定:我们应该使用预生成的Rust绑定,还是应该在构建时生成它们?

源码

TurboJPEG是用C语言编写的,因此我们必须自己编译它或查找系统上的编译库。您可以使用 TURBOJPEG_SOURCE 环境变量来控制我们的行为

  • TURBOJPEG_SOURCE=vendor推荐,如果启用了 cmake 功能,则为默认值):我们使用 cmake crate 从源代码构建 TurboJPEG 并将其链接到您的Rust可执行文件。我们使用crate中捆绑的 TurboJPEG 源代码(版本 3.0.1)。

    此选项需要C编译器,如果您想编译使 TurboJPEG 快速的SIMD代码,您还需要 NASM 或 Yasm。默认情况下,如果 TurboJPEG 找不到 NASM,您将收到编译错误。但是,您可以禁用默认功能 require-simd,这样,当找不到 NASM 时,TurboJPEG 将跳过SIMD代码(但性能会受到影响)。

  • TURBOJPEG_SOURCE=pkg-config(如果禁用了 cmake 功能且启用了 pkg-config,则为默认值):我们使用 pkg-config 查找库。

  • TURBOJPEG_SOURCE=explicit(如果禁用了 cmakepkg-config 功能,则为默认值):我们在 TURBOJPEG_LIB_DIR 中查找库。如果您想在构建时生成绑定(见下文),则还应设置 TURBOJPEG_INCLUDE_DIR 以指向包含 turbojpeg.h 头文件的目录。

链接

我们可以将上一步编译的库链接到 Rust 可执行文件中,是静态链接(库成为可执行文件的一部分)还是动态链接(库在运行时查找)。您可以使用环境变量来控制此行为

  • TURBOJPEG_STATIC=1 配置静态链接。
  • TURBOJPEG_DYNAMIC=1(或 TURBOJPEG_SHARED=1)配置动态链接。

如果您未指定任何这些变量,则默认行为取决于 TURBOJPEG_SOURCE。如果 TURBOJPEG_SOURCEvendorexplicit,则默认进行静态链接。但是,如果您使用 pkg-config,则 pkg-config crate 决定;它通常默认使用动态链接。

绑定

要使用 C 库在 Rust 中,我们需要一些样板“绑定”代码来导出 C 符号(函数和变量)到 Rust。我们有两种选择,您可以使用 TURBOJPEG_BINDING 环境变量来控制这个决定

  • TURBOJPEG_BINDING=pregenerated(除非启用了 bindgen 功能,否则为默认值):使用与这个包一起提供的绑定代码。这通常可以正常工作,并且是推荐选项。

  • TURBOJPEG_BINDING=bindgen(如果启用了 bindgen 功能,则为默认值):在构建期间使用 bindgen 生成绑定。这通常不是必需的,但如果您的 TurboJPEG 以某种方式与我们的预生成绑定代码不兼容,这可能会帮到您。

功能

这个包支持多个功能

  • cmake(默认):允许我们从源代码构建 TurboJPEG(《TURBOJPEG_SOURCE=vendor)。
  • require-simd(默认):在从源代码构建 TurboJPEG 时,如果未找到 NASM 并且将跳过快速 SIMD 代码,则终止编译。
  • pkg-config(默认):允许我们使用 pkg-config(《TURBOJPEG_SOURCE=pkg-config)找到 TurboJPEG。
  • bindgen:允许我们使用 bindgen 在构建时生成绑定。

请注意,turbojpeg 包“导出”这些功能。

依赖