NDK 图像处理遇到的相关问题
写在前面的话:
博主最近在学习Android NDK 视频处理相关东西,出现很多诡异问题,记录一下。
文章地址:http://blog.csdn.net/mikulee/article/details/46865139
欢迎转载,请注明出处,谢谢。
1、SEGV_ACCERR
我在一个函数里面创建了一个640*480大小的一维数组,作为图像数据,例如
int testPixels(){
int len=640*480;
int pixels[len];
int index=0;
for(;index<len;index++){
pixels[index]=0xffff0000;
}
return 0;
}
代码没问题,但是在真机上运行的话,会抛出SEGV_ACCERR错误,而且通过堆栈无法定位问题所在。
通过错误日志看出是在数组index达到45000以后,pixels就无法访问了,就会出现SEGV_ACCERR。上网查找资料,无果。怀疑是int的数值范围不够,sizeof(int)=4,是可以容纳640*480数值的。
最后,灵光一现,会不会是函数栈大小的问题。这个应该和编译器或什么有关。所以决定尝试在堆上建立pixels的存储空间,如下面代码:
int* pixels=NULL;
int testPixels(){
int len=640*480;
if(pixels==NULL){
//这里如果为空,就创建一个。暂时不考虑释放问题。
pixels=(int*)malloc(len*sizeof(int));
}
int index=0;
for(;index<len;index++){
pixels[index]=0xffff0000;
}
return 0;
}
问题得以解决。
<