/normxcorr/trunk

To get this branch, use:
bzr branch http://suren.me/webbzr/normxcorr/trunk
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
#include <stdio.h>
#include <windows.h>
#include "../dict_hw.h"

#define uint64_t unsigned __int64
#define uint32_t unsigned __int32

__declspec(dllexport) uint64_t DictInit(uint32_t ncp, uint32_t corrsize, float *x, float *y, uint32_t *ret) {
    int err;
    DICTContext ctx = dictCreateContext();
    if (ctx) {
        err = dictSetup(ctx, ncp, corrsize?corrsize:15, 1, 0);
	if (!err) err = dictSetTemplatePoints((DICTContext)ctx, x, y);
	if (!err) err = dictSetCurrentPoints((DICTContext)ctx, x, y);

        if (err) {
            dictDestroyContext(ctx);
            ctx = NULL;
        }

	if (ret) *ret = err;
    } else if (ret) *ret = DICT_ERROR_MALLOC;
    
    
    return (uint64_t)ctx;
}

__declspec(dllexport) void DictFree(uint64_t ctx, uint32_t *ret) {
    if (ctx) {
	dictDestroyContext((DICTContext)ctx);
    }
}

__declspec(dllexport) void DictGrid(uint64_t ctx, float *x, float *y, uint32_t *ret) {
    int err;
    
    if ((!ctx)||(!x)||(!y)) return;
    if ((ret)&&(*ret)) return;
    
    err = dictSetTemplatePoints((DICTContext)ctx, x, y);
    if (!err) err = dictSetCurrentPoints((DICTContext)ctx, x, y);
    
    if (ret) *ret = err;
}

__declspec(dllexport) void DictLoadTemplateFile(uint64_t ctx, const char *name, uint32_t *ret) {
    int err;
    
    if ((!ctx)||(!name)) return;
    if ((ret)&&(*ret)) return;

    err = dictLoadTemplateImageFile((DICTContext)ctx, name);
    if (ret) *ret = err;
    
}

__declspec(dllexport) void DictLoadTemplate(uint64_t ctx, const unsigned char *img, uint32_t width, uint32_t height, uint32_t *ret) {
    int err;

    if ((!ctx)||(!img)||(!width)||(!height)) return;
    if ((ret)&&(*ret)) return;

    err = dictLoadTemplateImage((DICTContext)ctx, img, width, height);
    if (ret) *ret = err;
}


__declspec(dllexport) void DictProcessFile(uint64_t ctx, const char *name, float *x, float *y, uint32_t *ret) {
    int err;
    
    if ((!ctx)||(!name)||(!x)||(!y)) return;
    if ((ret)&&(*ret)) return;

    err = dictLoadImageFile((DICTContext)ctx, name);
    if (!err) err = dictGetCurrentPoints((DICTContext)ctx, x, y);
    if (ret) *ret = err;
}


__declspec(dllexport) void DictProcess(uint64_t ctx, const char *img, float *x, float *y, uint32_t *ret) {
    int err;
    
    if ((!ctx)||(!img)||(!x)||(!y)) return;
    if ((ret)&&(*ret)) return;

    err = dictLoadImage((DICTContext)ctx, img);
    if (!err) err = dictGetCurrentPoints((DICTContext)ctx, x, y);
    if (ret) *ret = err;
}

BOOL WINAPI DllMain(HINSTANCE dllhandle, DWORD reason, LPVOID reserved)
{
    int err;
    switch (reason) {
    case DLL_PROCESS_ATTACH:
        /*	    ctx = NULL;
        	    dsDebugSetMethod(DS_DEBUG_METHOD_FILE, OPC_LABVIEW_DATA_DIRECTORY "\\opc.log");
        	    dsDebugSetLevel(DS_DEBUG_ERROR);
        	    dsDebugServer(DS_DEBUG_NOTICE, "opcLabview Loading");
        	    err = opcServerInit();
        	    if (!err) err = dsLockInitContext(&lock);
        	    if (!err) {
        		status = 1;
        		break;
        	    }*/
    case DLL_PROCESS_DETACH:
        /*	    if (status) dsLockFreeContext(&lock);
        	    opcServerDestroy();
        	    dsDebugServer(DS_DEBUG_NOTICE, "opcLabview Unloading");
        	    if (err) return FALSE;*/
        break;

    case DLL_THREAD_ATTACH:
        break;

    case DLL_THREAD_DETACH:
        break;
    }

    return TRUE;
}