summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/disparity/src/c/script_disparity.c
blob: 7d45ada66c3e68dceecf3c41b2a28571d6ce28fd (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
/********************************
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;
    
    scanf("%s", im1);
    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);
    for_each_job {
        retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT,
               minSAD, retDisp, halfWin,
               IrightPadded, IleftPadded, Iright_moved,
               retSAD, SAD, integralImg,
               range);
    }

#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;
}