TI中文支持网
TI专业的中文技术问题搜集分享网站

有关RGB转YUV的优化问题

合众达DM6446开发板,想做rgb转yuv

RGB转YUV中我用查表代替了原来的乘法运算,为什么速度没有提升?

以下是在电脑端实现的核心代码,请指教。

unsigned int my_g[256] ={
0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,
8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,
16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,
24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,
32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,
40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,
48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,
56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63,
64,65,65,66,66,67,67,68,68,69,69,70,70,71,71,72,
72,73,73,74,74,75,75,76,76,77,77,78,78,79,79,80,
80,81,81,82,82,83,83,84,84,85,85,86,86,87,87,88,
88,89,89,90,90,91,91,92,92,93,93,94,94,95,95,96,
96,97,97,98,98,99,99,100,100,101,101,102,102,103,103,104,
104,105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,
112,113,113,114,114,115,115,116,116,117,117,118,118,119,119,120,
120,121,121,122,122,123,123,124,124,125,125,126,126,127,127,128,};

unsigned int my_r[256] ={
0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,
4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,
8,8,8,8,9,9,9,10,10,10,10,11,11,11,11,12,
12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,
16,16,16,17,17,17,17,18,18,18,19,19,19,19,20,20,
20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,
24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,
28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,
32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,
36,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,
41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,
45,45,45,45,46,46,46,47,47,47,47,48,48,48,48,49,
49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,
53,53,53,54,54,54,54,55,55,55,55,56,56,56,57,57,
57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,
61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,};

…………

………….

/*#define MY(R, G, B) ((263 * R + 516 * G + 100 * B + 16384 )>>10) ///////////////////原来的公式。

#define MU(R, G, B) ((-152 * R – 298 * G + 450 * B + 131072)>>10)

#define MV(R, G, B) ((450 * R – 377 * G – 73 * B + 131072)>>10)*/

#define MY(R, G, B) (my_r[R] + my_g[G]+ my_b[B] + 16 )  /////////////用查表代替上面的乘法

#define MU(R, G, B) (-mu_r[R] – mu_g[G]+ mu_b[B] + 128)

#define MV(R, G, B) (mv_r[R] – mv_g[G]- mv_b[B] + 128)

………………

……………..

转换:

for(i=0;i<blocks;i+=4)

{

B1 = *pRGB ;

G1 = *(pRGB + 1);

R1 = *(pRGB + 2);

B2 = *(pRGB + 3);

G2 = *(pRGB + 4);

R2 = *(pRGB + 5);

pRGB = pRGB + 6;

tmp = MU(R1, G1, B1);

tmp = (tmp > 255) ? 255 : tmp;

tmp = (tmp < 0) ? 0 : tmp;

U1 = (unsigned char)tmp;

*(pYUV + i ) = U1;

tmp = MY(R1, G1, B1);

tmp = (tmp > 255) ? 255 : tmp;

tmp = (tmp < 0) ? 0 : tmp;

Y1 = (unsigned char)tmp;

*(pYUV + i +1) = Y1;
tmp = MV(R2, G2, B2);

tmp = (tmp > 255) ? 255 : tmp;

tmp = (tmp < 0) ? 0 : tmp;

V1 = (unsigned char)tmp;

*(pYUV + i +2) = V1;

tmp = MY(R2, G2, B2);

tmp = (tmp > 255) ? 255 : tmp;

tmp = (tmp < 0) ? 0 : tmp;

Y2 = (unsigned char)tmp;

*(pYUV + i +3) = Y2;

}

Chris Meng:

David,

请问你的代码是运行在DSP上还是ARM上?

赞(0)
未经允许不得转载:TI中文支持网 » 有关RGB转YUV的优化问题
分享到: 更多 (0)