2 void testImageStripeYUV(int size
, VSFrameInfo
* fi
, VSFrame
* img
){
4 vsFrameInfoInit(fi
, size
, 4, PF_YUV420P
);
5 vsFrameAllocate(img
,fi
);
6 memset(img
->data
[0],100,sizeof(uint8_t)*fi
->width
*fi
->height
);
7 for(j
=0; j
<fi
->height
; j
++){
9 img
->data
[0][i
+j
*img
->linesize
[0]]= sin(((double)i
)/size
/(double)j
)*128+128;
12 memset(img
->data
[1],100,sizeof(uint8_t)*(fi
->width
>> 1) *(fi
->height
>>1));
13 memset(img
->data
[2],100,sizeof(uint8_t)*(fi
->width
>> 1) *(fi
->height
>>1));
14 for(j
=0; j
<fi
->height
/2; j
++){
15 for(i
=0; i
<size
/2; i
++){
16 img
->data
[1][i
+j
*img
->linesize
[1]]= sin(((double)i
)/size
/j
*2.0)*128+128;
17 img
->data
[2][i
+j
*img
->linesize
[2]]= cos(((double)i
)/size
/j
*4.0)*128+128;
23 void test_transform_implementation(const TestData
* testdata
){
27 testImageStripeYUV(128,&fi
,&src
);
29 vsFrameAllocate(&dest
,&fi
);
31 vsFrameAllocate(&cfinal
,&fi
);
33 VSTransformConfig conf
= vsTransformGetDefaultConfig("test_transform_implementation");
35 fprintf(stderr
,"--- Validate Interpolations ----\n");
42 t
.alpha
= 2*M_PI
/(180.0);
44 for(it
=VS_Zero
; it
<=VS_BiCubic
; it
++){
45 vsFrameCopy(&dest
, &src
, &fi
);
47 test_bool(vsTransformDataInit(&td
, &conf
, &fi
, &fi
) == VS_OK
);
49 fprintf(stderr
,"Transform: %s\n", getInterpolationTypeName(it
));
50 test_bool(vsTransformPrepare(&td
,&dest
,&dest
)== VS_OK
);
51 test_bool(transformPlanar_float(&td
, t
)== VS_OK
);
53 vsFrameCopy(&cfinal
,&td
.dest
,&fi
);
54 vsTransformDataCleanup(&td
);
56 vsFrameCopy(&dest
, &src
, &fi
);
57 test_bool(vsTransformDataInit(&td
, &conf
, &fi
, &fi
) == VS_OK
);
58 test_bool(vsTransformPrepare(&td
,&dest
,&dest
)== VS_OK
);
59 test_bool(transformPlanar(&td
, t
)== VS_OK
);
63 for(i
=0; i
<fi
.width
*fi
.height
; i
++){
64 int diff
= cfinal
.data
[0][i
] - td
.dest
.data
[0][i
];
67 printf("%i,%i: %i\n", i
/fi
.width
, i
%fi
.width
, diff
);
70 vsTransformDataCleanup(&td
);
71 printf("***Difference: %i\n", sum
);
79 void test_transform_performance(const TestData
* testdata
){
82 VSTransformConfig conf
= vsTransformGetDefaultConfig("test_transform_performance");
83 fprintf(stderr
,"--- Performance of Transforms ----\n");
88 int timeC
, timeCFP
; //, timeOrc;
89 vsFrameAllocate(&dest
, &testdata
->fi
);
90 vsFrameAllocate(&cfinal
, &testdata
->fi
);
92 for(it
=VS_Zero
; it
<=VS_BiCubic
; it
++){
95 //// Float implementation
97 test_bool(vsTransformDataInit(&td
, &conf
, &testdata
->fi
, &testdata
->fi
) == VS_OK
);
99 fprintf(stderr
,"Transform: %s", getInterpolationTypeName(it
));
100 start
= timeOfDayinMS();
101 for(i
=0; i
<numruns
; i
++){
102 VSTransform t
= null_transform();
104 t
.alpha
= (i
+1)*2*M_PI
/(180.0);
106 vsFrameCopy(&dest
, &testdata
->frames
[0], &testdata
->fi
);
107 test_bool(vsTransformPrepare(&td
,&dest
,&dest
)== VS_OK
);
108 test_bool(transformPlanar_float(&td
, t
)== VS_OK
);
110 timeC
= timeOfDayinMS() - start
;
111 fprintf(stderr
,"\n***C elapsed time for %i runs: %i ms ****\n",
115 storePGMImage("transformed.pgm", td
.dest
.data
[0], testdata
->fi
);
116 storePGMImage("transformed_u.pgm", td
.dest
.data
[1], testdata
->fi_color
);
117 fprintf(stderr
,"stored transformed.pgm\n");
119 vsFrameCopy(&cfinal
,&td
.dest
,&testdata
->fi
);
120 vsTransformDataCleanup(&td
);
122 //// fixed point implementation
123 test_bool(vsTransformDataInit(&td
, &conf
, &testdata
->fi
, &testdata
->fi
) == VS_OK
);
124 start
= timeOfDayinMS();
125 for(i
=0; i
<numruns
; i
++){
126 VSTransform t
= null_transform();
128 t
.alpha
= (i
+1)*2*M_PI
/(180.0);
130 vsFrameCopy(&dest
, &testdata
->frames
[0], &testdata
->fi
);
131 test_bool(vsTransformPrepare(&td
,&dest
,&dest
)== VS_OK
);
132 test_bool(transformPlanar(&td
, t
)== VS_OK
);
134 timeCFP
= timeOfDayinMS() - start
;
135 fprintf(stderr
,"***FP elapsed time for %i runs: %i ms ****\n",
138 storePGMImage("transformed_FP.pgm", td
.dest
.data
[0], testdata
->fi
);
139 storePGMImage("transformed_u_FP.pgm", td
.dest
.data
[1], testdata
->fi_color
);
140 fprintf(stderr
,"stored transformed_FP.pgm\n");
142 fprintf(stderr
,"***Speedup %3.2f\n", (double)timeC
/timeCFP
);
145 for(i
=0; i
<testdata
->fi
.width
*testdata
->fi
.height
; i
++){
146 int diff
= cfinal
.data
[0][i
] - td
.dest
.data
[0][i
];
149 //printf("%i,%i: %i\n", i/fi.width, i%fi.width, diff);
152 printf("***Difference: %i\n", sum
);
153 vsTransformDataCleanup(&td
);
158 vsFrameFree(&cfinal
);