LibJPEG的CbCr值是否应该是有符号或无符号的

时间:2011-08-11 15:10:13

标签: yuv libjpeg

我有一个SoC相机模块,可以输出以下范围内的YCbCr数据: Y(0 - > 255) Cb和Cr(-127-> 127)

现在我的问题是,libjpeg是否接受这些签名值,或者我应该更改签名值,使它们在0 - >范围内。 255?

我使用ATMEL提供的libjpeg'bolt-on'jpeg压缩器作为SAM3s-EK的一部分。 ijg_compress_raw_no_padding函数的bolt-on部分的代码如下所示...据我所知,这需要我整齐的YCbCr数据并操作到libjpeg喜欢的形式; - )

    static void _init_sarray_imcu_row(JSAMPIMAGE *image,JSAMPLE *src,uint32_t y_pos,uint32_t width,uint32_t rows)
{
    JSAMPLE *r0;
    JSAMPLE *r1;
    JSAMPARRAY ay = (*image)[0];
    JSAMPARRAY au = (*image)[1];
    JSAMPARRAY av = (*image)[2];
    JSAMPROW ry0,ru,rv,ry1;    

    int i,j;
    for( i = 0; i < rows/2 ;i++)
    {
        r0 = & src[ (i * 2 + y_pos) * width * 2];
        r1 = & src[ (i * 2 + y_pos + 1) * width * 2];

        ry0 = ay[i*2];
        ry1 = ay[i*2+1];

        ru = au[i];
        rv = av[i];

        for(j = 0; j < width /2; j++)
        {
            ry0[j * 2] = r0[j*4];
            ry1[j * 2] = r1[j*4];
            ry0[j * 2 + 1] = r0[j*4+2];
            ry1[j * 2 +1] = r1[j*4+2];

            ru[j] = (r0[ j * 4 + 1] + r1[j*4+1])/2;
            rv[j] = (r0[ j * 4 + 3] + r1[j*4+3])/2;

        }


    }
}

我也不完全确定我发送此函数的原始数据数组中值的顺序,即; YCbCrY或YCbYCr等等,但我可以玩,因为在观看输出图像时它变得很明显。

因为它是我得到一个图像,其中一些颜色似乎混合,红色&amp;蓝色似乎被交换,黄色和绿色相同。

所以我重复我的初步问题,以防它丢失在那里:

此功能是否仅接受区域0-> 255中的值,或者它是否接受来自具有Y(0-> 255)和Cb&amp;的相机的数据。 Cr(-127-> 127)≤

如果有人可以就订单提出建议,那么阵列应该打包也会有所帮助。

非常感谢 deBoogle

1 个答案:

答案 0 :(得分:0)

根据Wikipedia,JFIF正在使用0-255。看起来你必须在你的Cb和Cr色差上添加128.