summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/disparity/src/c/script_disparity.c
blob: 431c02c25e2f457780d11823d7958320bf6173c1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/********************************
Author: Sravanthi Kota Venkata
********************************/

#include <stdio.h>
#include <stdlib.h>
#include "disparity.h"
#include <malloc.h>
#include "extra.h"
#define DISPARITY_MEM 1<<24
int main(int argc, char* argv[])
{
    SET_UP
    mallopt(M_TOP_PAD, DISPARITY_MEM);
    mallopt(M_MMAP_MAX, 0);
    int rows = 32;
    int cols = 32;
    I2D *imleft, *imright;
    volatile I2D* retDisparity;
    I2D *IrightPadded, *IleftPadded, *Iright_moved;
    I2D *retDisp, *halfWin;
    I2D *range;
    F2D *retSAD, *minSAD, *SAD, *integralImg;
    unsigned int *start, *endC, *elapsed;
    
    int i, j;
    char im1[100], im2[100], timFile[100];
    int WIN_SZ=8, SHIFT=64;
    FILE* fp;
    
    printf("Image 1: ");
    scanf("%s", im1);
    printf("Image 2: ");
    scanf("%s", im2);
#ifdef CHECK
    char checkFile[100] = "./expected_C.txt";
#endif
    imleft = readImage(im1);
    imright = readImage(im2);

    rows = imleft->height;
    cols = imleft->width;

#ifdef test
    WIN_SZ = 2;
    SHIFT = 1;
#endif
#ifdef sim_fast
    WIN_SZ = 4;
    SHIFT = 4;
#endif
#ifdef sim
    WIN_SZ = 4;
    SHIFT = 8;
#endif


    int nr, nc, k;
    int half_win_sz;
    nr = imleft->height;
    nc = imleft->width;
    half_win_sz = WIN_SZ / 2;

    minSAD = fSetArray(nr, nc, 255.0*255.0);
    retDisp = iSetArray(nr, nc, SHIFT);
    halfWin = iSetArray(1,2,half_win_sz);


    if(WIN_SZ > 1)
    {
        IleftPadded = padarray2(imleft, halfWin);
        IrightPadded = padarray2(imright, halfWin);
    }
    else
    {
        IleftPadded = imleft;
        IrightPadded = imright;
    }

    int paddedRows, paddedCols;
    paddedRows = IleftPadded->height;
    paddedCols = IleftPadded->width;
    SAD = fSetArray(paddedRows, paddedCols,255);
    integralImg = fSetArray(paddedRows, paddedCols,0);
    retSAD = fMallocHandle(paddedRows- WIN_SZ, paddedCols - WIN_SZ);
    Iright_moved = iSetArray(paddedRows, paddedCols, 0);

    range = iMallocHandle(1, 2);
    printf("starting..\n");
    for_each_job{
    retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT, 
		   minSAD, retDisp, halfWin,
		   IrightPadded, IleftPadded, Iright_moved,
		   retSAD, SAD, integralImg,
		   range);
    }
    printf("ending\n");

#ifdef CHECK   
    /** Self checking - use expected.txt from data directory  **/
    {
        int tol, ret=0;
        tol = 2;
#ifdef GENERATE_OUTPUT
        writeMatrix(retDisparity, argv[1]);
#endif
        ret = selfCheck(retDisparity, checkFile, tol);
        if (ret == -1)
            printf("Error in Disparity Map\n");
    }
    /** Self checking done **/
#endif

    //end of benchmark
    fFreeHandle(minSAD);
    fFreeHandle(SAD);
    fFreeHandle(integralImg);
    iFreeHandle(IrightPadded);
    iFreeHandle(IleftPadded);
    iFreeHandle(Iright_moved);
    fFreeHandle(retSAD);
    iFreeHandle(imleft);
    iFreeHandle(imright);
    iFreeHandle(retDisparity);
    iFreeHandle(halfWin);
    iFreeHandle(range);
    free(start);
    free(endC);
    free(elapsed);
    WRITE_TO_FILE;
    return 0;
}