冰糖纯 发表于 2012-12-17 16:24:44

版主,求教关于Post Processor的问题

我根据光盘中提供的samsung的源码测试yuv到rgb的色彩空间转换,总是segment fault
int main(int argc, char **argv)
{
int   dev_fd, in_fd, out_fd;
int   file_size;
int   buf_size;
int   out_size;
char   *in_addr;
char*in_buf, *out_buf;
struct stat s;
pp_paramspp_param;

if(argc != 11 ) {
printf("Check number of arguments!!!\n");
printf("Usage : ");
printf(" \n\n");
printf(" : 6(RGB16), 9(RGB24), 12(420YCbCr), 14(422CRYCBY)\n");
printf("                   15(422CBYCRY), 16(422YCRYCB), 17(422YCBYCR)\n");
printf(" : 0(DMA), 1(FIFO)\n");
printf(" : 0(ONE-SHOT), 1(FREE-RUN)\n");
return -1;
}
// set post processor configuration
pp_param.SrcFullWidth = atoi(argv);
pp_param.SrcFullHeight = atoi(argv);
pp_param.SrcStartX= 0;
pp_param.SrcStartY= 0;
pp_param.SrcWidth= pp_param.SrcFullWidth;
pp_param.SrcHeight= pp_param.SrcFullHeight;
pp_param.SrcCSpace= atoi(argv);
pp_param.DstStartX= 0;
pp_param.DstStartY= 0;
pp_param.DstFullWidth = atoi(argv);
pp_param.DstFullHeight = atoi(argv);
pp_param.DstWidth= pp_param.DstFullWidth;
pp_param.DstHeight= pp_param.DstFullHeight;
pp_param.DstCSpace= atoi(argv);
pp_param.OutPath= atoi(argv);
pp_param.Mode   = atoi(argv);

// open in/out file
in_fd = open(argv, O_RDONLY);
out_fd = open(argv, O_RDWR | O_CREAT | O_TRUNC, 0644);
if((in_fd < 0) || (out_fd < 0)) {
printf("input/output file open error\n");
return -1;
}
// get input file size
fstat(in_fd, &s);
file_size = s.st_size;

// mapping input file to memory
in_addr = (char *)mmap(0, file_size, PROT_READ, MAP_SHARED, in_fd, 0);
if(in_addr == NULL) {
printf("input file memory mapping failed\n");
return -1;
}
// open post processor
dev_fd = open(DEVICE_FILE_NAME, O_RDWR|O_NDELAY);
if(dev_fd < 0)
{
printf("Post processor open error\n");
return -1;
}
// in_buf is post processor input buffer
buf_size = ioctl(dev_fd, PPROC_GET_BUF_SIZE);
in_buf = (char *) mmap(0, buf_size, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, 0);
if(in_buf == NULL) {
printf("Post processor mmap failed\n");
return -1;
}
out_buf = in_buf + ioctl(dev_fd, PPROC_GET_INBUF_SIZE);
memcpy(in_buf, in_addr, file_size);

pp_param.SrcFrmSt = ioctl(dev_fd, PPROC_GET_PHY_INBUF_ADDR);
pp_param.DstFrmSt = pp_param.SrcFrmSt + ioctl(dev_fd, PPROC_GET_INBUF_SIZE);
ioctl(dev_fd, PPROC_SET_PARAMS, &pp_param);
ioctl(dev_fd, PPROC_START);
out_size = ioctl(dev_fd, PPROC_GET_OUT_DATA_SIZE);
write(out_fd, out_buf, out_size);

munmap(in_buf, buf_size);

close(dev_fd);
close(in_fd);
close(out_fd);

return 0;
}
单步调试到buf_size = ioctl(dev_fd, PPROC_GET_BUF_SIZE);这一句,显示buf_size = -1 证实是驱动返回错误,可是这是你们提供的官方源码啊,这种错误怎么处理?我是用的是你们提供的最新版的3.0.1的内核,能不能给我一份你们在使用post processor是的源码作为参考,nedjk@163.com 谢谢

冰糖纯 发表于 2012-12-18 16:32:16

难道是要沉了,版主在哪里
页: [1]
查看完整版本: 版主,求教关于Post Processor的问题