00001 #include "FCam/N900.h"
00002 #include <stdio.h>
00003 #include <math.h>
00004
00005 using namespace FCam;
00006
00007 int main(int argc, const char **argv) {
00008 N900::Sensor sensor;
00009
00010 _Frame *_f = new _Frame;
00011 _f->sensor = &sensor;
00012 _f->whiteBalance = 5000;
00013
00014 Frame f(_f);
00015
00016 printf("Testing demosaic results on a white jaggy circle\n");
00017 Image circle(128, 128, RAW);
00018 short *data = (short *)circle(0,0);
00019 for (int y = 0; y < 128; y++) {
00020 for (int x = 0; x < 128; x++) {
00021 bool in = ((x-64)*(x-64) + (y-64)*(y-64)) < 2500;
00022 *data++ = in ? 1023 : 0;
00023 }
00024 }
00025
00026 _f->image = circle;
00027 FCAM_IMAGE_DEBUG(f.image());
00028 saveDump(demosaic(f), "circle.tmp");
00029
00030 printf("Testing demosaic results on a white anti-aliased circle\n");
00031 data = (short *)circle(0,0);
00032 for (int y = 0; y < 128; y++) {
00033 for (int x = 0; x < 128; x++) {
00034 float d = sqrtf(((x-64)*(x-64) + (y-64)*(y-64)));
00035 *data++ = (d > 50 ? 0 : (d < 49 ? 1023 : (50 - d)*1023));
00036 }
00037 }
00038
00039 saveDump(circle, "circle_in.tmp");
00040 saveDump(demosaic(f), "circle_out.tmp");
00041
00042 printf("Testing demosaic on a subimage\n");
00043 Image canvas(200,200, RAW);
00044 for (int y=0; y < 200; y++) {
00045 for (int x=0; x < 200; x+=2) {
00046 ((short*)canvas(x,y))[0] = 0;
00047 ((short*)canvas(x,y))[1] = 1023;
00048 }
00049 }
00050 Image subCanvas = canvas.subImage(36,36,Size(128,128));
00051 subCanvas.copyFrom(circle);
00052 FCAM_IMAGE_DEBUG(canvas);
00053 FCAM_IMAGE_DEBUG(subCanvas);
00054 saveDump(canvas, "circle_canvas_in.tmp");
00055 saveDump(subCanvas, "circle_sub_in.tmp");
00056 saveDump(demosaic(f), "circle_sub.tmp");
00057
00058 printf("Testing demosaic speed\n");
00059
00060 Image in(64*40, 48*40, RAW);
00061
00062 _f->image = in;
00063
00064 Time t1 = Time::now();
00065
00066 for (int i = 0; i < 10; i++) {
00067 demosaic(f);
00068 }
00069
00070 printf("%d\n", (Time::now() - t1)/10000);
00071
00072 printf("Testing basic thumbnail generation \n");
00073
00074 Image in2(2592,1968, RAW);
00075 for (unsigned int y=0; y < in2.height()-1; y+=2) {
00076 for (unsigned int x=0; x < in2.width()-1; x+=2) {
00077 *((short*)in2(x,y)) = 500 * ((x / 50) % 2) * ((y / 50) % 2);
00078 *((short*)in2(x+1,y)) = 500 * ((x / 25) % 2) * ((y / 25) % 2);
00079 *((short*)in2(x,y+1)) = 500 * ((x / 100) % 2) * ((y / 100) % 2);
00080 *((short*)in2(x+1,y+1)) = 500 * ((x / 50) % 2) * ((y / 50) % 2);
00081 }
00082 }
00083 saveDump(in2, "thumb_in.tmp");
00084 _f->image = in2;
00085 saveDump(makeThumbnail(f), "thumb_out.tmp");
00086
00087 printf("Testing thumbnail speed, N900-asm 2592x1968 GRBG -> 640x480 \n");
00088
00089 _f->image = in2;
00090 Time t3 = Time::now();
00091 for (int i=0; i<10; i++) {
00092 makeThumbnail(f);
00093 }
00094 printf("%d\n", (Time::now() - t3)/10000);
00095
00096 printf("Testing thumbnail speed, generic 2591x1967 GRBG -> 640x480 \n");
00097 Image in3(2591,1967, RAW);
00098 _f->image = in3;
00099 Time t2 = Time::now();
00100 for (int i=0; i<10; i++) {
00101 makeThumbnail(f);
00102 }
00103 printf("%d\n", (Time::now() - t2)/10000);
00104
00105
00106 return 0;
00107 };