主题 : tiny6410 JPEG硬编码出错 问题(已解决) 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 74945
精华: 0
发帖: 50
金钱: 250 两
威望: 50 点
贡献值: 0 点
综合积分: 100 分
注册时间: 2012-07-31
最后登录: 2018-05-03
楼主  发表于: 2012-12-29 11:37

 tiny6410 JPEG硬编码出错 问题(已解决)

其实也是粗心造成的,解决方法见第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重新编辑 ]
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2013-01-04 10:24
内核不同,可能也会出现不同的问题

另外,我们提供了jpeg编码和解吗的例子和文档
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.