【发布时间】:2012-07-12 13:41:18
【问题描述】:
我正在尝试使用 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 调试信息:HERE
我的问题:
- 我怎么知道是什么在抛出 SIGSEGV,因为这行代码似乎没问题?
- 这是 ARM CPU 上 x264 编码器的已知错误还是预期行为,或者我缺少某些编码器配置?
- 我注意到如果我将编码器的属性 analysis 设置为 0x3:0x113(我在网上找到的一些随机值)我不会t 获取 SIGSEGV,编码器似乎可以工作,但我在管道中遇到错误:数据流错误。我可以将 analyze 设置为有意义的值吗?
更新
我在 x264_mb_analysis_intra() 函数中执行之前以及在它中断的行之前对所有重要的“h”字段进行了 fprintf 编辑,猜测它可能会有所帮助:http://pastebin.com/sAfX239j
【问题讨论】:
标签: android gstreamer segmentation-fault x264 libx264