Windows(Intel x86アーキテクチャ)でVS-2008を使用してコンパイルされたTheoraビデオdeocderライブラリとアプリケーションがあります。このセットアップを使用して、theora ビット ストリーム (*.ogg ファイル) をデコードします。このデコーダー ライブラリのソース コードは、FFMPEG v0.5 ソース パッケージから使用され、windows-VS-2008 の組み合わせでコンパイルできるようにいくつかの変更が加えられています。
ここで、gcc を使用して構築した Linux (Intel x86 アーキテクチャ) 上の ffmpeg(V0.5) アプリケーションを使用して同じ theora ビットストリームをデコードし、デコードされた出力 yuv ファイルを取得すると、この出力ファイルは、から取得した出力と 1 ビットの違いがあります。 windows-VS2008 セットアップ、およびそれも出力ファイルの数バイトであり、すべてではありません。2 つの出力がビット一致することを期待していました。
私は以下の要因を疑っています:
a.) 2 つのコンパイラ gcc と MS-VS2008 の間でデータ型の不一致がありますか?
b.) コードが log、pow、exp、cos などのランタイム数学ライブラリ関数を使用していないことを確認しましたが、それでも私のコードには (a+b+c)/3.Could のような演算がいくつか含まれています。これは問題になりますか?
この「3 で割る」またはその他の数値の実装は、2 つの設定で異なる場合があります。
c.) ある種の丸め/切り捨ての影響が異なって発生していますか?
d.) Windows セットアップには存在しない makefile/configure オプションとして Linux に存在するマクロが欠落している可能性はありますか?
しかし、問題とその修正を絞り込むことはできません。
1.) 上記の私の疑問は有効ですか、またはこれらの 2 つの異なるセットアップによって生成される出力にこれらの 1 ビットの違いを引き起こす可能性のある他の問題がある可能性があります。
2.) これをデバッグして修正するにはどうすればよいですか?
linux-gcc セットアップと Windows MS コンパイラの出力の違いに関するこのシナリオは、一般的なコードにも当てはまります (ビデオ デコーダ アプリケーションの場合に必ずしも固有ではありません)。
これに関しては、どんな指針も役に立ちます。
ありがとう、
-広告