Update to 2.0.0 tree from current Fremantle build
[opencv] / debian / patches / 110_dereferencement.diff
1 Index: opencv-0.9.7/cv/include/cvcompat.h
2 ===================================================================
3 --- opencv-0.9.7.orig/cv/include/cvcompat.h     2005-05-27 13:49:53.000000000 +0200
4 +++ opencv-0.9.7/cv/include/cvcompat.h  2006-06-12 13:38:01.000000000 +0200
5 @@ -164,12 +164,15 @@
6  CV_INLINE void cvFillImage( CvArr* mat, double color )\r
7  {\r
8      CvPoint left_top = { 0, 0 }, right_bottom = { 0, 0 };\r
9 +    union { CvPoint p; CvSize s; } tmp;\r
10  \r
11 -    cvGetRawData( mat, 0, 0, (CvSize*)&right_bottom );\r
12 -    right_bottom.x--;\r
13 +    tmp.p = right_bottom;\r
14 +\r
15 +    cvGetRawData( mat, 0, 0, &tmp.s );\r
16 +    tmp.p.x--;\r
17      right_bottom.y--;\r
18  \r
19 -    cvRectangle( mat, left_top, right_bottom,\r
20 +    cvRectangle( mat, left_top, tmp.p,\r
21                   cvColorToScalar( color, cvGetElemType(mat)),\r
22                   CV_FILLED, 8, 0 );\r
23  }\r
24 @@ -429,8 +432,6 @@
25      vect1->y = pt[1].y - pt[0].y;\r
26      vect2->x = pt[3].x - pt[0].x;\r
27      vect2->y = pt[3].y - pt[0].y;\r
28 -\r
29 -    CV_UNREFERENCED( (left, bottom, right, top) );\r
30  }\r
31  \r
32  typedef int CvDisType;\r
33 @@ -777,29 +778,29 @@
34                                  const float* A, const float* k,\r
35                                  int CV_UNREFERENCED(interpolate) )\r
36  {\r
37 -    float* data;\r
38 +    union { float *f; uchar *u; } data;\r
39      CvSize sz;\r
40 -    cvGetRawData( undistortion_map, (uchar**)&data, 0, &sz );\r
41 +    cvGetRawData( undistortion_map, &data.u, 0, &sz );\r
42      assert( sz.width >= 8 );\r
43      /* just save the intrinsic parameters to the map */\r
44 -    data[0] = A[0]; data[1] = A[4];\r
45 -    data[2] = A[2]; data[3] = A[5];\r
46 -    data[4] = k[0]; data[5] = k[1];\r
47 -    data[6] = k[2]; data[7] = k[3];\r
48 +    data.f[0] = A[0]; data.f[1] = A[4];\r
49 +    data.f[2] = A[2]; data.f[3] = A[5];\r
50 +    data.f[4] = k[0]; data.f[5] = k[1];\r
51 +    data.f[6] = k[2]; data.f[7] = k[3];\r
52  }\r
53  \r
54  CV_INLINE void  cvUnDistort( const CvArr* src, CvArr* dst,\r
55                               const CvArr* undistortion_map,\r
56                               int CV_UNREFERENCED(interpolate) )\r
57  {\r
58 -    float* data;\r
59 +    union { float *f; uchar *u; } data;\r
60      float a[] = {0,0,0,0,0,0,0,0,1};\r
61      CvSize sz;\r
62 -    cvGetRawData( undistortion_map, (uchar**)&data, 0, &sz );\r
63 +    cvGetRawData( undistortion_map, &data.u, 0, &sz );\r
64      assert( sz.width >= 8 );\r
65 -    a[0] = data[0]; a[4] = data[1];\r
66 -    a[2] = data[2]; a[5] = data[3];\r
67 -    cvUnDistortOnce( src, dst, a, data + 4, 1 ); \r
68 +    a[0] = data.f[0]; a[4] = data.f[1];\r
69 +    a[2] = data.f[2]; a[5] = data.f[3];\r
70 +    cvUnDistortOnce( src, dst, a, data.f + 4, 1 ); \r
71  }\r
72  \r
73  \r
74 @@ -836,13 +837,15 @@
75                                    int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS))\r
76  {\r
77      CvGraphScanner* temp_scanner;\r
78 +    void *tmp;\r
79      \r
80      if( !scanner )\r
81          cvError( CV_StsNullPtr, "cvStartScanGraph", "Null scanner pointer", "cvcompat.h", 0 );\r
82  \r
83      temp_scanner = cvCreateGraphScanner( graph, vtx, mask );\r
84      *scanner = *temp_scanner;\r
85 -    cvFree( (void**)&temp_scanner );\r
86 +    tmp = (void *)temp_scanner;\r
87 +    cvFree( &tmp );\r
88  }\r
89  \r
90  \r
91 Index: opencv-0.9.7/cxcore/include/cxcore.h
92 ===================================================================
93 --- opencv-0.9.7.orig/cxcore/include/cxcore.h   2005-07-05 17:59:49.000000000 +0200
94 +++ opencv-0.9.7/cxcore/include/cxcore.h        2006-06-12 13:37:05.000000000 +0200
95 @@ -153,7 +153,10 @@
96          CvMat* mat = (CvMat*)arr; /* the first few fields of CvMat and CvMatND are the same */\r
97          mat->data.ptr = NULL;\r
98          if( mat->refcount != NULL && --*mat->refcount == 0 )\r
99 -            cvFree( (void**)&mat->refcount );\r
100 +        {\r
101 +            void *tmp = (void *)mat->refcount;\r
102 +            cvFree( &tmp );\r
103 +        }\r
104          mat->refcount = NULL;\r
105      }\r
106  }\r
107 Index: opencv-0.9.7/cxcore/include/cxtypes.h
108 ===================================================================
109 --- opencv-0.9.7.orig/cxcore/include/cxtypes.h  2006-06-12 13:37:05.000000000 +0200
110 +++ opencv-0.9.7/cxcore/include/cxtypes.h       2006-06-12 13:37:05.000000000 +0200
111 @@ -219,9 +219,10 @@
112      int i = _mm_cvtsd_si32(t);\r
113      return i - _mm_movemask_pd(_mm_cmplt_sd(t,_mm_cvtsi32_sd(t,i)));\r
114  #else\r
115 +    union { int i; float f; } tmp;\r
116      int temp = cvRound(value);\r
117 -    float diff = (float)(value - temp);\r
118 -    return temp - (*(int*)&diff < 0);\r
119 +    tmp.f = (float)(value - temp);\r
120 +    return temp - (tmp.i < 0);\r
121  #endif\r
122  }\r
123  \r
124 @@ -233,9 +234,10 @@
125      int i = _mm_cvtsd_si32(t);\r
126      return i + _mm_movemask_pd(_mm_cmpgt_sd(t,_mm_cvtsi32_sd(t,i)));\r
127  #else\r
128 +    union { int i; float f; } tmp;\r
129      int temp = cvRound(value);\r
130 -    float diff = (float)(temp - value);\r
131 -    return temp + (*(int*)&diff < 0);\r
132 +    tmp.f = (float)(temp - value);\r
133 +    return temp + (tmp.i < 0);\r
134  #endif\r
135  }\r
136  \r
137 @@ -249,8 +251,11 @@
138  #elif defined __GNUC__\r
139      return isnan(value);\r
140  #else*/\r
141 -    unsigned lo = (unsigned)*(uint64*)&value;\r
142 -    unsigned hi = (unsigned)(*(uint64*)&value >> 32);\r
143 +    union { uint64 i; double d; } tmp;\r
144 +    unsigned lo, hi;\r
145 +    tmp.d = value;\r
146 +    lo = (unsigned)tmp.i;\r
147 +    hi = (unsigned)(tmp.i >> 32);\r
148      return (hi & 0x7fffffff) + (lo != 0) > 0x7ff00000;\r
149  #endif\r
150  }\r
151 @@ -263,8 +268,11 @@
152  #elif defined __GNUC__\r
153      return isinf(value);\r
154  #else*/\r
155 -    unsigned lo = (unsigned)*(uint64*)&value;\r
156 -    unsigned hi = (unsigned)(*(uint64*)&value >> 32);\r
157 +    union { uint64 i; double d; } tmp;\r
158 +    unsigned lo, hi;\r
159 +    tmp.d = value;\r
160 +    lo = (unsigned)tmp.i;\r
161 +    hi = (unsigned)(tmp.i >> 32);\r
162      return (hi & 0x7fffffff) == 0x7ff00000 && lo == 0;\r
163  #endif\r
164  }\r