其实也是粗心造成的,解决方法见第6篇帖子
tiny6410板子
256 ram
2g nand
void PhotoEncoder::init()
{
int inBufferSize = 0;
memset(&ExifInfo, 0x00, sizeof(ExifFileInfo));
makeExifParam(&ExifInfo);
ExifInfo.Width = width;
ExifInfo.Height = height;
jpegEncodeHandle = SsbSipJPEGEncodeInit();//
if(jpegEncodeHandle < 0)
{
qDebug() << "SsbSipJPEGDecodeInit failed";
return;
}
//设置模式
if(SsbSipJPEGSetConfig(JPEG_SET_SAMPING_MODE, JPG_422) != JPEG_OK)
{
qDebug() << "SsbSipJPEGSetConfig JPEG_SET_SAMPING_MODE failed";
return;
}
//宽度
if (SsbSipJPEGSetConfig(JPEG_SET_ENCODE_WIDTH, width) != JPEG_OK)
{
qDebug() << "SsbSipJPEGSetConfig JPEG_SET_ENCODE_WIDTH failed";
return;
}
//高度
if (SsbSipJPEGSetConfig(JPEG_SET_ENCODE_HEIGHT, height) != JPEG_OK)
{
qDebug() << "SsbSipJPEGSetConfig JPEG_SET_ENCODE_HEIGHT failed";
return;
}
//质量等级
if (SsbSipJPEGSetConfig(JPEG_SET_ENCODE_QUALITY, JPG_QUALITY_LEVEL_1) != JPEG_OK)
{
qDebug() << "SsbSipJPEGSetConfig JPEG_SET_ENCODE_QUALITY failed";
return;
}
inBufferSize = width*height*2;//width*height*bpp / 8
inBuf = SsbSipJPEGGetEncodeInBuf(jpegEncodeHandle, inBufferSize);
if(inBuf == NULL)
{
qDebug() << "SsbSipJPEGGetEncodeInBuf failed";
return;
}
}
使用jpeg硬编码出现问题 ,提示:
[JPEG_DRV: ERROR] s3c_jpeg_ioctl: DD::JPG Invalid ioctl : 0x5问题定位在 SsbSipJPEGGetEncodeInBuf 这个函数内,查看这个函数
void *SsbSipJPEGGetEncodeInBuf(int dev_fd, long size)
{
if(size < 0 || size > MAX_YUV_SIZE){
LOG_MSG(LOG_ERROR, "SsbSipJPEGGetEncodeInBuf", "Invalid Encoder input buffer size(%ld)\n", size);
return NULL;
}
jCtx->encParam->dataSize = size;
jCtx->InBuf = (char *)ioctl(dev_fd, IOCTL_JPG_GET_FRMBUF, jCtx->mappedAddr);
LOG_MSG(LOG_TRACE, "SsbSipJPEGEncodeInBuf", "EncodeInBuf : 0x%x size :%d\n", jCtx->InBuf, jCtx->encParam->dataSize);
return (jCtx->InBuf);
}
应该是jCtx->InBuf = (char *)ioctl(dev_fd, IOCTL_JPG_GET_FRMBUF, jCtx->mappedAddr);这句出错了这个是不是跟硬件有关系了
程序在别家6410板子上运行没有这个问题
忘各位大神赐教。。。。
[ 此帖被leavor在2013-01-05 13:18重新编辑 ]