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