我正在尝试使用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
我在执行x264_mb_analyse_intra()函数之前的所有重要的“h”字段上打印,并且在它破坏的行之前,猜测它可以帮助:http://pastebin.com/sAfX239j
答案 0 :(得分:1)
正如您所见HERE,问题出现在x264_memcpy_aligned
函数中,由于某种原因,该函数跳转到零地址,这使得SIGSEGV发生。要在此行中修复此评论:
pf->memcpy_aligned = x264_memcpy_aligned_neon;
在档案/x264/common/arm/mc-c.c
中。它应该是第250行,但我发现它不是,所以搜索该文本,它只在文件中出现一次。
现在x264enc正在使用Android,虽然支持的NEON较少......
如果你按照this thread进行操作,你会看到那些人正在努力解决这个问题,所以这个黑客很快就会变得不重要了。
如果您想自己调试,请参阅: