3 int checkCompareImg(VSMotionDetect
* md
, const VSFrame
* frame
){
13 int linesize
= frame
->linesize
[0];
15 for(i
=-10;i
<10; i
+=2){
16 printf("\nCheck: shiftX = %i\n",i
);
17 error
= compareSubImg(Y_c
, Y_c
, &field
,
18 linesize
, linesize
, md
->fi
.height
,
20 fprintf(stderr
,"mismatch %i: %i\n", i
, error
);
25 void test_checkCompareImg(const TestData
* testdata
){
27 VSMotionDetectConfig conf
= vsMotionDetectGetDefaultConfig("test_checkCompareImg");
30 test_bool(vsMotionDetectInit(&md
, &conf
, &testdata
->fi
) == VS_OK
);
32 test_bool(checkCompareImg(&md
,&testdata
->frames
[0]));
33 vsMotionDetectionCleanup(&md
);
37 typedef unsigned int (*cmpSubImgFunc
)(unsigned char* const I1
, unsigned char* const I2
,
39 int width1
, int width2
, int height
, int bytesPerPixel
,
40 int d_x
, int d_y
, unsigned int threshold
);
42 // runs the compareSubImg routine and returns the time and stores the difference.
43 // if diffsRef is given than the results are validated
44 int runcompare( cmpSubImgFunc cmpsubfunc
,
45 VSFrame frame1
, VSFrame frame2
, Field f
,
46 VSFrameInfo fi
, int* diffs
, int* diffsRef
, int numruns
){
47 int start
= timeOfDayinMS();
49 for(i
=0; i
<numruns
; i
++){
50 diffs
[i
]=cmpsubfunc(frame1
.data
[0], frame2
.data
[0],
51 &f
, frame1
.linesize
[0], frame2
.linesize
[0], fi
.height
,
52 2, i
%200, i
/200, INT_MAX
);
54 int end
= timeOfDayinMS();
56 for(i
=0; i
<numruns
; i
++){
57 if(diffs
[i
]!=diffsRef
[i
]){
58 fprintf(stderr
, "ERROR! Ref difference %i, Opt difference %i\n",
59 diffsRef
[i
], diffs
[i
]);
67 void test_compareImg_performance(const TestData
* testdata
){
72 fprintf(stderr
,"********** Compare speedtest:\n");
78 timeC
=runcompare(compareSubImg_thr
, testdata
->frames
[0], testdata
->frames
[1],
79 f
, testdata
->fi
, diffsC
, 0, numruns
);
80 fprintf(stderr
,"***C time for %i runs: %i ms ****\n", numruns
, timeC
);
82 timeO
=runcompare(compareSubImg_orc
, testdata
->frames
[0], testdata
->frames
[1],
83 f
, testdata
->fi
, diffsO
, diffsC
, numruns
);
84 fprintf(stderr
,"***orc time for %i runs: %i ms \tSpeedup %3.2f\n",
85 numruns
, timeO
, (double)timeC
/timeO
);
86 timeO
=runcompare(compareSubImg_thr_orc
, testdata
->frames
[0], testdata
->frames
[1],
87 f
, testdata
->fi
, diffsO
, diffsC
, numruns
);
88 fprintf(stderr
,"***thr_orc time for %i runs: %i ms \tSpeedup %3.2f\n",
89 numruns
, timeO
, (double)timeC
/timeO
);
92 timeO
=runcompare(compareSubImg_thr_sse2
, testdata
->frames
[0], testdata
->frames
[1],
93 f
, testdata
->fi
, diffsO
, diffsC
, numruns
);
94 fprintf(stderr
,"***thr_sse2 time for %i runs: %i ms \tSpeedup %3.2f\n",
95 numruns
, timeO
, (double)timeC
/timeO
);
98 timeO
=runcompare(compareSubImg_thr_sse2_asm
, testdata
->frames
[0], testdata
->frames
[1],
99 f
, testdata
->fi
, diffsO
, diffsC
, numruns
);
100 fprintf(stderr
,"***thr_asm time for %i runs: %i ms \tSpeedup %3.2f\n",
101 numruns
, timeO
, (double)timeC
/timeO
);