私は GStreamer-java をいじろうとしていますが、これは Android の h.264 エンコーダー (x264enc) です。
ここで、テスト ビデオ ソースから未加工のビデオをエンコードしようとしました (そのis-liveプロパティをTRUEに設定)。データが x264enc 要素に流れ始めると、libx264.so で SIGSEGV が取得され、アプリがクラッシュします。そして、コードが NULL を逆参照しているように見えます...正確なエラーの場所は、ファイル「gstreamer_ndk_bundle/x264/encoder/analyse.c」の 963 行目です。そして、この行です。
h->mc.memcpy_aligned( h->mb.pic.i8x8_dct_buf, h->dct.luma8x8, sizeof(h->mb.pic.i8x8_dct_buf) );
私のデバイスの CPU は Cortex 8 で、NEON 機能を備えています...
すべての構造体フィールドをファイルに出力しようとしましたh
が、初期化されていないフィールドはありません。
LogCat からの Android DEBUG 情報: HERE
私の質問:
- このコード行は問題ないように見えるので、SIGSEGV をスローしているものをどのように知ることができますか?
- これは既知のバグですか、または ARM CPU 上の x264 エンコーダーの予想される動作ですか? または、エンコーダーの構成が不足していますか?
- エンコーダーのプロパティ分析を0x3:0x113 (オンラインで見つけたランダムな値) に設定すると、SIGSEGV が取得されず、エンコーダーが動作しているように見えますが、パイプラインでエラーが発生することに気付きました: Data flow error。分析を意味のある値に設定することはできますか?
アップデート
x264_mb_analyse_intra() 関数で実行が実行される直前、およびそれが壊れる行の直前に、すべての重要な「h」フィールドを fprintf-ed しました 。