我有一个 Theora 视频解码器库和应用程序在 windows(英特尔 x86 架构)上使用 VS-2008 编译。我使用这个设置来解码 theora 比特流(*.ogg 文件)。此解码器库的源代码来自 FFMPEG v0.5 源包,经过一些修改,使其可以在 windows-VS-2008 组合上编译。
现在,当我使用我使用 gcc 构建的 linux(Intel x86 架构)上的 ffmpeg(V0.5)应用程序解码相同的 theora 比特流并获得一些解码的输出 yuv 文件时,该输出文件与从获得的输出有 1 位差异windows-VS2008 设置,以及输出文件的几个字节,不是全部。我希望 2 个输出是位匹配的。
我怀疑以下因素:
a.) 两个编译器 gcc 和 MS-VS2008 之间的某些数据类型不匹配?
b.)我已经验证代码没有使用任何运行时数学库函数,如 log、pow、exp、cos 等......但我的代码仍然有一些操作,如 (a+b+c)/3.Could这是一个问题吗?
这个“除以三”或任何其他数字的实现在两种设置中可能不同。
c.)某种舍入/截断效果发生不同?
d.) 我是否会遗漏 Linux 中作为 makefile/configure 选项存在的任何宏,而 Windows 设置中没有该宏?
但我无法缩小问题范围并解决它。
1.)我的怀疑是否有效,或者是否存在任何其他问题可能导致这两种不同设置产生的输出出现这些 1 位差异。
2.) 我该如何调试和解决这个问题?
我想,这种 linux-gcc 设置和 Windows MS 编译器之间输出差异的场景对于任何通用代码来说都是正确的(不一定特定于我的视频解码器应用程序)
任何指示都会对此有所帮助。
谢谢,
-广告