gpt4 book ai didi

ffmpeg - 为什么压缩缓冲区需要大于 LZW 压缩中的输入缓冲区?

转载 作者:行者123 更新时间:2023-12-04 22:47:23 25 4
gpt4 key购买 nike

我目前正在将 LZW 压缩和解压缩方法从 FFmpeg 源代码实现到我的项目。我偶然发现的是输出缓冲区的大小(将存储压缩数据的地方)需要大于我们要压缩的输入缓冲区的大小。这与压缩本身不矛盾吗?

下一部分代码位于ff_lzw_encode() lzwenc.c 的一部分的函数源文件。

if (insize * 3 > (s->bufsize - s->output_bytes) * 2)
{
printf("Size of output buffer is too small!\n");
return -1;
}

对于我的特定示例,我正在尝试在本地发送原始视频帧之前对其进行压缩。但是,如果我为大小为 (insize * 3) / 2 的缓冲区分配内存(将存储压缩数据的地方),使用 send() 发送不是需要更多时间吗?功能比发送大小为 insize 的原始缓冲区?

最佳答案

您不能保证“压缩”表单的大小小于甚至等于输入的大小。考虑无法以任何方式压缩的纯随机数据的最坏情况,最好的情况是压缩到其原始大小的 100%;除此之外,还需要添加一些压缩元数据或转义序列,从而导致例如100% + 5 个字节。

事实上,将不可压缩的数据“压缩”到“仅”100% 的原始大小通常不会自动发生。如果算法只是尝试正常压缩输入,结果甚至可能比输入大得多。智能压缩工具会检测到这种情况并退回以发送未压缩的数据 block ,然后添加一些元数据以至少指示该 block 未压缩。

您分配的缓冲区必须足够大以包含最坏情况下的“压缩”字节数,因此需要一些“净空”。

wouldn't that take more time to send using send() function than sending raw buffer



是的,它会的。这就是为什么您不发送整个(分配的)缓冲区,而只发送来自该缓冲区的字节数,因为压缩函数表明它已使用。

关于ffmpeg - 为什么压缩缓冲区需要大于 LZW 压缩中的输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36568587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com