LZ4:压缩图像格式的压缩

时间:2016-12-27 14:05:43

标签: c++ c compression lz4

我正在使用LZ4 compressor C lib。我压缩的一些文件是JPG和PNG。由于某些原因,我无法理解,方法

 int compressedSize =   LZ4_compress_default((char*)data,
            compressedData, uncompressedSize, uncompressedSize);

有时会返回我正在压缩的图像(或零)的负值。

例如,我正在压缩两个标准JPG图像。一个返回值为'-236',而第二个返回精确的压缩字节数,这意味着第一个没有压缩。归零意味着LZ4无法压缩。我不知道-236的意思。是因为源数据已经在某种程度上被压缩了吗?

1 个答案:

答案 0 :(得分:4)

函数返回定义是:

  return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize)
           or 0 if compression fails

如果压缩导致的大小大于uncompressedSize,这很可能是已经压缩的文件,则该函数将失败。然而,这并不能解释为什么它返回了负值 - 这是没有记录的。但仍然存在如下情况:如果需要容纳压缩文件,则需要通过提供更大的缓冲区来增加文件大小。

查看source code,返回值由LZ4_compress_generic()生成:

return (int) (((char*)op)-dest);

如果op&lt; {},则指针算术将返回负值。 dest,虽然查看代码,但很难看出可能会发生这种情况。如果它是一个问题(当然如果只提供一个更大的目标缓冲区不能解决问题),我建议您逐步调试调试器中的代码以确定问题所在。