【问题标题】:Can a high-performance jpeglib-turbo implmentation decompress/compress in <100ms?高性能 jpeglib-turbo 实现能否在 <100 毫秒内解压缩/压缩?
【发布时间】:2012-04-13 18:35:29
【问题描述】:

我目前正在使用 jpeglib-turbo 库在 C++ 中实现 jpeg 大小调整器。

我已经获得了使用库进行 JPEG 解压缩和重新压缩的 100 毫秒目标。使用推荐的优化设置(记录在 jpeglib-turbo usage.txt 中)我能想到的最好的设置大约是 320 毫秒,所以我想知道 100 毫秒是否可能/现实?这将是将 3000x4000 像素的图像从大约 6Mb 的大小解压缩/重新压缩到 130Kb。

我用于快速解压的代码是:

    dinfo.dct_method = JDCT_IFAST;
    dinfo.do_fancy_upsampling = FALSE;
    dinfo.two_pass_quantize = FALSE;
    dinfo.dither_mode = JDITHER_ORDERED;
    dinfo.scale_num = 1/8;

【问题讨论】:

  • 出于好奇,为什么需要这么快? 6MB JPEG 的 320 毫秒非常快。
  • 你没有提到平台。这是手机用的吗?桌面?单线程还是多线程?我有一些我一直在处理的快速“DCT 缩略图”代码。在我的 2GHz Core i7(使用单线程)上,它可以在大约 120 毫秒内从 6 兆字节的 JPEG 数据(4000x4000 图像)中提取 1/8 大小的 RGB32 图像。将 500x500 的图像重新压缩到 130KB 可能需要另外 40-100 毫秒(我还没有对压缩器进行极端优化)。缩略图提取代码的时间关键部分是用 64 位汇编语言编写的。联系我了解更多信息(bitbank@pobox.com)。
  • 这个项目是开源的吗?发布链接:)

标签: libjpeg libjpeg-turbo


【解决方案1】:

感谢您的回答。

实际上可以在100ms左右解压再压缩。在联系了 libjpeg-turbo 的作者后,他告诉我我使用的 dinfo.scale_num 属性是错误的。该属性是比例 numerator - 我还需要设置 scale_denom(分母)属性。

所以好的代码应该是:

 dinfo.dct_method = JDCT_IFAST;
 dinfo.do_fancy_upsampling = FALSE;
 dinfo.two_pass_quantize = FALSE;
 dinfo.dither_mode = JDITHER_ORDERED;
 dinfo.scale_num = 1;
 dinfo.scale_denom = 8;

我希望代码如此之快,因为图像缩放对于用户来说应该是难以察觉的,因为它在速度/用户体验是最重要的客户端应用程序中。

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多