2011-08-11 66 views
0

我有個氨基酸的SoC相機模塊,其輸出在以下範圍YCbCr數據: Y(0 - > 255) Cb和Cr(-127 - > 127)爲的libjpeg是否應CBCR值符號或無符號

現在我的問題是,libjpeg接受這些有符號值還是應該更改有符號值,使它們在0 - > 255的範圍內?

我使用ATMEL提供的libjpeg'bolt-on'jpeg壓縮器作爲SAM3s-EK的一部分。對於該ijg_compress_raw_no_padding功能栓接部分的代碼如下所示......據我可以看到這需要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等等,但是我可以玩,因爲當輸出圖像被查看時它變得明顯。

因爲它是我得到一些圖像,其中一些顏色似乎混在一起,紅色&藍色似乎被交換和黃色和綠色相同。

所以我重複我最初的問題,以防萬一有人在那裏失去:

,這種功能只有在區域0-> 255接受值或從相機Y並接受它的數據( 0-> 255)和Cb & Cr(-127-> 127)?

如果有人可以建議訂單數組應該打包,這也將有所幫助。

非常感謝 deBoogle

回答

0

根據Wikipedia JFIF使用0-255。它看起來像你必須添加128到你的Cb和Cr顏色差異。