1 /*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /* ---- includes ----------------------------------------------------------- */
18
19 #include "b_APIEm/DCR.h"
20 #include "b_BasicEm/Functions.h"
21
22 /* ------------------------------------------------------------------------- */
23
24 /* ========================================================================= */
25 /* */
26 /* ---- \ghd{ auxiliary functions } ---------------------------------------- */
27 /* */
28 /* ========================================================================= */
29
30 /* ------------------------------------------------------------------------- */
31
32 /* ========================================================================= */
33 /* */
34 /* ---- \ghd{ constructor / destructor } ----------------------------------- */
35 /* */
36 /* ========================================================================= */
37
38 /* ------------------------------------------------------------------------- */
39
bpi_DCR_init(struct bbs_Context * cpA,struct bpi_DCR * ptrA)40 void bpi_DCR_init( struct bbs_Context* cpA,
41 struct bpi_DCR* ptrA )
42 {
43 ptrA->maxImageWidthE = 0;
44 ptrA->maxImageHeightE = 0;
45 ptrA->imageDataPtrE = NULL;
46 ptrA->imageWidthE = 0;
47 ptrA->imageHeightE = 0;
48 bts_Int16Vec2D_init( &ptrA->offsE );
49 bts_IdCluster2D_init( cpA, &ptrA->mainClusterE );
50 bts_IdCluster2D_init( cpA, &ptrA->sdkClusterE );
51 ptrA->confidenceE = 0;
52 ptrA->approvedE = FALSE;
53 ptrA->idE = 0;
54 ptrA->roiRectE = bts_Int16Rect_create( 0, 0, 0, 0 );
55 bbs_UInt16Arr_init( cpA, &ptrA->cueDataE );
56 }
57
58 /* ------------------------------------------------------------------------- */
59
bpi_DCR_exit(struct bbs_Context * cpA,struct bpi_DCR * ptrA)60 void bpi_DCR_exit( struct bbs_Context* cpA,
61 struct bpi_DCR* ptrA )
62 {
63 ptrA->maxImageWidthE = 0;
64 ptrA->maxImageHeightE = 0;
65 ptrA->imageDataPtrE = NULL;
66 ptrA->imageWidthE = 0;
67 ptrA->imageHeightE = 0;
68 bts_Int16Vec2D_exit( &ptrA->offsE );
69 bts_IdCluster2D_exit( cpA, &ptrA->mainClusterE );
70 bts_IdCluster2D_exit( cpA, &ptrA->sdkClusterE );
71 ptrA->confidenceE = 0;
72 ptrA->approvedE = FALSE;
73 ptrA->idE = 0;
74 bbs_UInt16Arr_exit( cpA, &ptrA->cueDataE );
75 }
76
77 /* ------------------------------------------------------------------------- */
78
79 /* ========================================================================= */
80 /* */
81 /* ---- \ghd{ operators } -------------------------------------------------- */
82 /* */
83 /* ========================================================================= */
84
85 /* ------------------------------------------------------------------------- */
86
87 /* ========================================================================= */
88 /* */
89 /* ---- \ghd{ query functions } -------------------------------------------- */
90 /* */
91 /* ========================================================================= */
92
93 /* ------------------------------------------------------------------------- */
94
95 /* ========================================================================= */
96 /* */
97 /* ---- \ghd{ modify functions } ------------------------------------------- */
98 /* */
99 /* ========================================================================= */
100
101 /* ------------------------------------------------------------------------- */
102
bpi_DCR_create(struct bbs_Context * cpA,struct bpi_DCR * ptrA,uint32 imageWidthA,uint32 imageHeightA,uint32 cueSizeA,struct bbs_MemTbl * mtpA)103 void bpi_DCR_create( struct bbs_Context* cpA,
104 struct bpi_DCR* ptrA,
105 uint32 imageWidthA,
106 uint32 imageHeightA,
107 uint32 cueSizeA,
108 struct bbs_MemTbl* mtpA )
109 {
110 struct bbs_MemTbl memTblL = *mtpA;
111 struct bbs_MemSeg* espL =
112 bbs_MemTbl_fastestSegPtr( cpA, &memTblL,
113 bpi_DCR_MAX_CLUSTER_SIZE * bbs_SIZEOF16( struct bts_Int16Vec2D ) );
114 if( bbs_Context_error( cpA ) ) return;
115
116 bts_IdCluster2D_create( cpA, &ptrA->mainClusterE, bpi_DCR_MAX_CLUSTER_SIZE, espL );
117 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 );
118 if( bbs_Context_error( cpA ) ) return;
119 bts_IdCluster2D_create( cpA, &ptrA->sdkClusterE, bpi_DCR_MAX_SDK_CLUSTER_SIZE, espL );
120 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 );
121 if( bbs_Context_error( cpA ) ) return;
122 if( bbs_Context_error( cpA ) ) return;
123 bbs_UInt16Arr_create( cpA, &ptrA->cueDataE, cueSizeA, espL );
124 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 );
125
126 ptrA->maxImageWidthE = imageWidthA;
127 ptrA->maxImageHeightE = imageHeightA;
128 }
129
130 /* ------------------------------------------------------------------------- */
131
132 /* ========================================================================= */
133 /* */
134 /* ---- \ghd{ I/O } -------------------------------------------------------- */
135 /* */
136 /* ========================================================================= */
137
138 /* ------------------------------------------------------------------------- */
139
140 /* ========================================================================= */
141 /* */
142 /* ---- \ghd{ exec functions } --------------------------------------------- */
143 /* */
144 /* ========================================================================= */
145
146 /* ------------------------------------------------------------------------- */
147
bpi_DCR_assignGrayByteImage(struct bbs_Context * cpA,struct bpi_DCR * ptrA,const void * bufferPtrA,uint32 widthA,uint32 heightA)148 void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA,
149 struct bpi_DCR* ptrA,
150 const void* bufferPtrA,
151 uint32 widthA,
152 uint32 heightA )
153 {
154 bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" )
155
156 if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE )
157 {
158 bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).",
159 fNameL,
160 widthA, heightA,
161 ptrA->maxImageWidthE, ptrA->maxImageHeightE );
162 return;
163 }
164
165 if( ( widthA & 1 ) != 0 )
166 {
167 bbs_ERROR1( "%s:\nWidth of image must be even.\n", fNameL );
168 return;
169 }
170
171 ptrA->imageDataPtrE = ( void* )bufferPtrA;
172 ptrA->imageWidthE = widthA;
173 ptrA->imageHeightE = heightA;
174
175 /* reset some data */
176 ptrA->roiRectE = bts_Int16Rect_create( 0, 0, widthA, heightA );
177 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 );
178 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 );
179 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 );
180 }
181
182 /* ------------------------------------------------------------------------- */
183
bpi_DCR_assignGrayByteImageROI(struct bbs_Context * cpA,struct bpi_DCR * ptrA,const void * bufferPtrA,uint32 widthA,uint32 heightA,const struct bts_Int16Rect * pRectA)184 void bpi_DCR_assignGrayByteImageROI( struct bbs_Context* cpA,
185 struct bpi_DCR* ptrA,
186 const void* bufferPtrA,
187 uint32 widthA,
188 uint32 heightA,
189 const struct bts_Int16Rect* pRectA )
190 {
191 bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImageROI( struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" )
192
193 if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE )
194 {
195 bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).",
196 fNameL,
197 widthA, heightA,
198 ptrA->maxImageWidthE, ptrA->maxImageHeightE );
199 return;
200 }
201
202 if( ( widthA & 1 ) != 0 )
203 {
204 bbs_ERROR1( "%s:\nWidth of image must be even.\n",
205 fNameL );
206 return;
207 }
208
209 if( pRectA->x2E < pRectA->x1E || pRectA->y2E < pRectA->y1E ||
210 pRectA->x1E < 0 || pRectA->y1E < 0 ||
211 pRectA->x2E > ( int32 )widthA || pRectA->y2E > ( int32 )heightA )
212 {
213 bbs_ERROR1( "%s:\nInvalid ROI rectangle.\n", fNameL );
214 return;
215 }
216
217 ptrA->imageDataPtrE = ( void* )bufferPtrA;
218 ptrA->imageWidthE = widthA;
219 ptrA->imageHeightE = heightA;
220
221 /* reset some data */
222 ptrA->roiRectE = *pRectA;
223 bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 );
224 bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 );
225 bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 );
226 }
227
228 /* ------------------------------------------------------------------------- */
229
bpi_DCR_confidence(struct bbs_Context * cpA,const struct bpi_DCR * ptrA)230 int32 bpi_DCR_confidence( struct bbs_Context* cpA,
231 const struct bpi_DCR* ptrA )
232 {
233 return ptrA->confidenceE;
234 }
235
236 /* ------------------------------------------------------------------------- */
237
238 /* ========================================================================= */
239