先上log,在四个平台上各测两次
convert on linux
this a test for convert used time.
rgb888 init used:4 ms.
qt convert:rgb888 -> rgb565 used:10 ms.
qt convert:rgb565 -> rgb888 used:10 ms.
soft convert:rgb565 -> rgb888 used:6 ms <--half.
soft convert:rgb565 -> rgb888 used:23 ms.
soft convert:rgb565 -> yuyv used:14 ms.
soft convert:yuyv -> rgb888 used:10 ms.
this a test for convert used time.
rgb888 init used:5 ms.
qt convert:rgb888 -> rgb565 used:9 ms.
qt convert:rgb565 -> rgb888 used:16 ms.
soft convert:rgb565 -> rgb888 used:2 ms <--half.
soft convert:rgb565 -> rgb888 used:11 ms.
soft convert:rgb565 -> yuyv used:14 ms.
soft convert:yuyv -> rgb888 used:10 ms.
convert on windows xp
this a test for convert used time.
rgb888 init used:0 ms.
qt convert:rgb888 -> rgb565 used:16 ms.
qt convert:rgb565 -> rgb888 used:47 ms.
soft convert:rgb565 -> rgb888 used:15 ms <--half.
soft convert:rgb565 -> rgb888 used:0 ms.
soft convert:rgb565 -> yuyv used:16 ms.
soft convert:yuyv -> rgb888 used:16 ms.
this a test for convert used time.
rgb888 init used:15 ms.
qt convert:rgb888 -> rgb565 used:31 ms.
qt convert:rgb565 -> rgb888 used:32 ms.
soft convert:rgb565 -> rgb888 used:0 ms <--half.
soft convert:rgb565 -> rgb888 used:0 ms.
soft convert:rgb565 -> yuyv used:0 ms.
soft convert:yuyv -> rgb888 used:0 ms.
convert on mini2440 (arm-linux-gcc4.3.2)
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:34 ms.
qt convert:rgb888 -> rgb565 used:68 ms.
qt convert:rgb565 -> rgb888 used:83 ms.
soft convert:rgb565 -> rgb888 used:22 ms <--half.
soft convert:rgb565 -> rgb888 used:77 ms.
soft convert:rgb565 -> yuyv used:113 ms.
soft convert:yuyv -> rgb888 used:104 ms.
^C
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:34 ms.qt convert:rgb888 -> rgb565 used:69 ms.
qt convert:rgb565 -> rgb888 used:83 ms.
soft convert:rgb565 -> rgb888 used:22 ms <--half.
soft convert:rgb565 -> rgb888 used:78 ms.
soft convert:rgb565 -> yuyv used:113 ms.
soft convert:yuyv -> rgb888 used:102 ms.
convert on tiny6410 (arm-linux-gcc4.3.2)
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:44 ms.qt convert:rgb888 -> rgb565 used:62 ms.
qt convert:rgb565 -> rgb888 used:93 ms.
soft convert:rgb565 -> rgb888 used:21 ms <--half.
soft convert:rgb565 -> rgb888 used:76 ms.
soft convert:rgb565 -> yuyv used:103 ms.
soft convert:yuyv -> rgb888 used:86 ms.
^C
[root@FriendlyARM qt4_code]# ./convert_test -qws
this a test for convert used time.
rgb888 init used:44 ms.
qt convert:rgb888 -> rgb565 used:61 ms.
qt convert:rgb565 -> rgb888 used:92 ms.
soft convert:rgb565 -> rgb888 used:21 ms <--half.
soft convert:rgb565 -> rgb888 used:75 ms.
soft convert:rgb565 -> yuyv used:105 ms.
soft convert:yuyv -> rgb888 used:87 ms.
从上面看到tiny6410速度没有上去!!!还比2440差!怎么回事??友善的技术人员能否解释下呢?

下面附主程序源码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "convert.h"
#include <QApplication>
#define width 640
#define height 480
#define depth 3
Convert::Convert(QMainWindow *parent):QMainWindow(parent)
{
int h,w;
Rgb_convert = new rgb_utils();
printf("this a test for convert used time.\n");
Img_888 = new QImage(width,height,QImage::Format_RGB888);
Img_888->fill(0);
char *Image_ptr=(char *)Img_888->bits();
char Image_val_g=0;
char Image_val_b=0;
/************rgb888 init*************/
timer_calc.start();
for(h=0;h<height;h++){
for(w=0;w<width;w++){
*Image_ptr++=(char)(w & 0xff);
//*Image_ptr++=(char)((w & 0xff00)>>8);
//*Image_ptr++=(char)((w & 0xff0000)>>16);
*Image_ptr++=Image_val_g;
*Image_ptr++=Image_val_b;
}
Image_val_g++;
if(Image_val_g==0)Image_val_b++;
}
printf("rgb888 init used:%d ms.\n",timer_calc.elapsed());
Img_888->save("./original_rgb888.png");
//以上为原始图像生成代码。看下真实图像
/*************qt convert***************/
timer_calc.start();
Img_565 =new QImage(Img_888->convertToFormat(QImage::Format_RGB16));
printf("qt convert:rgb888 -> rgb565 used:%d ms.\n",timer_calc.elapsed());
Img_565->save("./rgb888convertTorgb565.png");
timer_calc.start();
Img_temp_888 = new QImage(Img_565->convertToFormat(QImage::Format_RGB888));
printf("qt convert:rgb565 -> rgb888 used:%d ms.\n",timer_calc.elapsed());
Img_temp_888->save("./rgb565converTorgb888.png");
/*************soft convert***************/
Img_temp_888 = new QImage(width/2,height/2,QImage::Format_RGB888);
timer_calc.start();
Rgb_convert->compress_rgb565_to_rgb((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_temp_888->bits(),width/2,height/2);
printf("soft convert:rgb565 -> rgb888 used:%d ms <--half.\n",timer_calc.elapsed());
Img_temp_888->save("./rgb565softconverTorgb888_half.png");
Img_temp_888 = new QImage(width,height,QImage::Format_RGB888);
timer_calc.start();
Rgb_convert->compress_rgb565_to_rgb((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_temp_888->bits(),width,height);
printf("soft convert:rgb565 -> rgb888 used:%d ms.\n",timer_calc.elapsed());
Img_temp_888->save("./rgb565softconverTorgb888.png");
Img_yuyv = new QImage(width,height,QImage::Format_RGB16);
timer_calc.start();
Rgb_convert->compress_rgb565_to_yuyv((uint8_t *)Img_565->bits(),width,height,(uint8_t *)Img_yuyv->bits());
printf("soft convert:rgb565 -> yuyv used:%d ms.\n",timer_calc.elapsed());
timer_calc.start();
Rgb_convert->compress_yuyv_to_rgb(Img_yuyv->bits(),Img_temp_888->bits(),width,height);
printf("soft convert:yuyv -> rgb888 used:%d ms.\n",timer_calc.elapsed());
Img_temp_888->save("./rgb565_yuyv_rgb888.png");
}
附件为整个源码,希望其他人也测试下。看看是啥原因??
[ 此帖被xphyym在2011-06-02 16:15重新编辑 ]