У меня есть библиотека видеодекодера Theora и приложение, скомпилированное с использованием VS-2008 для Windows (архитектура Intel x86). Я использую эту настройку для декодирования потоков битов theora (файлы *. Ogg). Исходный код для этой библиотеки декодера используется из исходного пакета FFMPEG v0.5 с некоторыми изменениями, чтобы он компилировался в комбинации windows-VS-2008.
Теперь, когда я декодирую тот же поток битов theora с помощью приложения ffmpeg (V0.5) на linux (архитектура Intel x86), который я создал с помощью gcc, и получаю некоторый декодированный выходной файл yuv, этот выходной файл имеет 1-битные различия с вывод получен из установки windows-VS2008, и это тоже для нескольких байтов выходного файла, а не для всех. Я ожидал, что 2 выхода будут соответствовать битам.
Я сомневаюсь в следующих факторах:
a.) Некоторое несоответствие типов данных между двумя компиляторами gcc и MS-VS2008?
b.) Я убедился, что в коде не используются никакие математические функции библиотеки времени выполнения, такие как log, pow, exp, cos и т. Д., Но все же в моем коде есть некоторые операции, такие как (a + b + c) / 3. Может ли это быть проблемой?
Реализация этого «деления на три» или любого другого числа может отличаться в двух установках.
в.) Какие-то эффекты округления / усечения происходят по-другому?
d.) Могу ли я пропустить какой-либо макрос, присутствующий в Linux как параметр makefile / configure, которого нет в настройке Windows?
Но я не могу сузить проблему и исправить ее.
1.) Являются ли мои сомнения выше обоснованными, или могут быть какие-либо другие проблемы, которые могут вызвать эти 1-битные различия в выходных данных, создаваемых этими двумя различными установками.
2.) Как мне отладить и исправить это?
Полагаю, этот сценарий различий в выходных данных между установкой linux-gcc и компиляторами Windows MS может быть верным даже для любого универсального кода (не обязательно характерного для моего случая с приложением видеодекодера)
Любые указатели были бы полезны в этом отношении.
спасибо,
-AD