4

Webカメラからキャプチャしたフレームをコピーしようとして、Opencvで作業しています。__memcpy_ssse3()フレームをコピーすると、160 行目または 1675 行目でセグメンテーション違反が発生します。

gdb ショー:

0 __memmove_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:1675

/home/david/opencv/OpenCV-2.4.2/modules/core/src/copy.cpp:181 の cv::Mat::copyTo (this=0xbfca3450, _dst=...) の 1 0xb75ec6d0

2 0xb75984f6 in cv::Mat::Mat (this=0xbfca358c, img=0xb1300c90, copyData=true) /home/david/opencv/OpenCV-2.4.2/modules/core/src/matrix.cpp:510

それを呼び出す関数はcv::MAt::Mat(IplImg *I, bool copy).

USB カメラまたはファイルを開くときはすべて完璧ですが、IP 経由で Web カメラからビデオ ストリームを読み取ろうとすると、1 分後にクラッシュします。

私は ssse3 サポートなしで ffmpeg と opencv をビルドしようとしましたが、私のアプリケーション-mno-seee3もフラグ付きでコンパイルされました。

Opencv のバージョンは 2.4.2 ですが、2.3.1 にも問題があります。ffmpeg のバージョンは 11.1 で、8.X でも同じ問題が発生します。gcc のバージョンは 4.6.3、Ubuntu のブランチです。プロセッサは Intel core2 です。

ヒントはありますか?

4

2 に答える 2

8

SSE 操作でのセグメンテーション エラーは、メモリの位置合わせが正しくないことが原因です。通過-mpreferred-stack-boundary=4 -mstackrealignしてみて、それが解消されるかどうかを確認してください。その場合は、スタックを調べて、どのコードがずれているかを調べる必要があります。

于 2012-07-16T18:37:35.920 に答える
4

解決しました、皆様ありがとうございました。スレッド間のロックに誤りがあり、なぜか他のスレッドでメモリがオーバーライドまたは解放されました。ロックの依存関係を修正した後、segfault の問題は解決しました。

于 2012-07-18T15:22:19.423 に答える