我正在尝试使用 GStreamer-java,它是 Android 上的 h.264 编码器 (x264enc)。
现在,我尝试对来自测试视频源的原始视频进行编码(将其is-live属性设置为TRUE),当数据开始流入 x264enc 元素时,我在 libx264.so 中获得 SIGSEGV 并且我的应用程序崩溃。看起来代码正在取消引用 NULL... 确切的错误位置在文件“gstreamer_ndk_bundle/x264/encoder/analyze.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 调试信息:这里
我的问题:
- 我怎么知道是什么在抛出 SIGSEGV,因为这行代码似乎没问题?
- 这是 ARM CPU 上 x264 编码器的已知错误或预期行为,还是我缺少一些编码器配置?
- 我注意到如果我将编码器的属性分析设置为0x3:0x113(我在网上找到的一些随机值)我没有得到 SIGSEGV,编码器似乎工作,但我在管道中得到错误:数据流错误。我可以将分析设置为有意义的值吗?
更新
我在 x264_mb_analysis_intra() 函数中运行之前以及在它中断的行之前对所有重要的“h”字段进行了 fprintf 编辑,猜测它可能会有所帮助: http://pastebin.com/sAfX239j