Statistics
| Revision:

root / trunk / libraries / libjni-mrsid / src / ltimetadatarecord.cpp @ 720

History | View | Annotate | Download (11.8 KB)

1
/**********************************************************************
2
 * $Id: ltimetadatarecord.cpp 720 2004-12-28 16:18:01Z igbrotru $
3
 *
4
 * Name:     ltimetadatarecord.c
5
 * Project:  JMRSID. Interfaz java to MrSID (Lizardtech).
6
 * Purpose:  
7
 * Author:   Nacho Brodin, brodin_ign@gva.es
8
 *
9
 **********************************************************************/
10
/*Copyright (C) 2004  Nacho Brodin <brodin_ign@gva.es>
11

12
 This program is free software; you can redistribute it and/or
13
 modify it under the terms of the GNU General Public License
14
 as published by the Free Software Foundation; either version 2
15
 of the License, or (at your option) any later version.
16

17
 This program is distributed in the hope that it will be useful,
18
 but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
 GNU General Public License for more details.
21

22
 You should have received a copy of the GNU General Public License
23
 along with this program; if not, write to the Free Software
24
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25
 */
26

    
27

    
28
#include <jni.h>
29
#include "es_gva_cit_jmrsid_LTIMetadataRecord.h"
30
#include "es_gva_cit_jmrsid_JNIBase.h"
31

    
32
#include "lt_types.h"
33
#include "lt_base.h"
34
#include "lt_fileSpec.h"
35
#include "lti_geoCoord.h"
36
#include "lti_pixel.h"
37
#include "lti_navigator.h"
38
#include "lti_sceneBuffer.h"
39
#include "lti_metadataDatabase.h"
40
#include "lti_metadataRecord.h"
41
#include "lti_utils.h"
42
#include "MrSIDImageReader.h"
43
#include "J2KImageReader.h"
44
#include "lti_imageReader.h"
45
#include "lti_sceneBuffer.h"
46
#include "lti_scene.h"
47
//#include "cpl_conv.h"
48
#include "TIFFImageWriter.h"
49

    
50
LT_USE_NAMESPACE(LizardTech);
51

    
52
/******************************************************************************/
53
//                                                         getTagName
54
/******************************************************************************/
55

    
56
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getTagNameNat
57
  (JNIEnv *env, jobject obj, jlong cPtr){
58
          
59
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
60
          jstring res=NULL;
61
          const char *tagname;
62
                    
63
    record = *(LTIMetadataRecord **)&cPtr;
64
    
65
    if(record!=NULL){
66
                tagname=record->getTagName();
67
                res = env->NewStringUTF(tagname); 
68
    }
69

    
70
    return res;
71
          
72
  }
73
  
74
/******************************************************************************/
75
//                                                         isScalar
76
/******************************************************************************/
77

    
78
  JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isScalarNat
79
  (JNIEnv *env, jobject obj, jlong cPtr){
80
          
81
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
82
          
83
          record = *(LTIMetadataRecord **)&cPtr;
84
          
85
          if(record!=NULL){
86
                  if (record->isScalar())return 1;
87
                  else return 0;
88
          }else return -1; 
89
  }
90

    
91

    
92
/******************************************************************************/
93
//                                                         isVector
94
/******************************************************************************/
95

    
96
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isVectorNat
97
  (JNIEnv *env, jobject obj, jlong cPtr){
98
          
99
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
100
          
101
          record = *(LTIMetadataRecord **)&cPtr;
102
          
103
          if(record!=NULL){
104
                  if (record->isVector())return 1;
105
                  else return 0;
106
          }else return -1;
107
  }
108

    
109
/******************************************************************************/
110
//                                                         isArray
111
/******************************************************************************/
112

    
113
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isArrayNat
114
  (JNIEnv *env, jobject obj, jlong cPtr){
115
          
116
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
117
          
118
          record = *(LTIMetadataRecord **)&cPtr;
119
          
120
          if(record!=NULL){
121
                  if (record->isArray())return 1;
122
                  else return 0;
123
          }else return -1;
124
  }
125

    
126
/******************************************************************************/
127
//                                                         getDataType
128
/******************************************************************************/
129

    
130
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDataTypeNat
131
  (JNIEnv *env, jobject obj, jlong cPtr){
132
          
133
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
134
          
135
          record = *(LTIMetadataRecord **)&cPtr;
136
          
137
          if(record!=NULL){
138
                  switch (record->getDataType())
139
                   {
140
                           case LTI_METADATA_DATATYPE_UINT8:
141
                        case LTI_METADATA_DATATYPE_SINT8:
142
                    case LTI_METADATA_DATATYPE_UINT16:
143
                           case LTI_METADATA_DATATYPE_SINT16:
144
                    case LTI_METADATA_DATATYPE_UINT32:
145
                    case LTI_METADATA_DATATYPE_SINT32:
146
                    case LTI_METADATA_DATATYPE_UINT64:
147
                    case LTI_METADATA_DATATYPE_SINT64:return 0;break;
148
                    case LTI_METADATA_DATATYPE_FLOAT32:
149
                    case LTI_METADATA_DATATYPE_FLOAT64:return 1;break;
150
                    case LTI_METADATA_DATATYPE_ASCII:return 2;break;
151
           }
152
          }
153
          
154
          return -1;
155
  }
156

    
157
/******************************************************************************/
158
//                                                         getScalarData
159
/******************************************************************************/
160

    
161
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getScalarDataNat
162
  (JNIEnv *env, jobject obj, jlong cPtr){
163
          
164
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
165
          
166
          record = *(LTIMetadataRecord **)&cPtr;
167
          
168
          if(record!=NULL){
169
                  char dato[255];
170
                  const void* data = record->getScalarData();
171
                  
172
                  switch (record->getDataType())
173
                           {
174
                                case LTI_METADATA_DATATYPE_UINT8:
175
                              sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[0]);
176
                              break;
177
                            case LTI_METADATA_DATATYPE_SINT8:
178
                              sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[0]);
179
                              break;
180
                            case LTI_METADATA_DATATYPE_UINT16:
181
                              sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[0]);
182
                              break;
183
                            case LTI_METADATA_DATATYPE_SINT16:
184
                              sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[0]);
185
                              break;
186
                            case LTI_METADATA_DATATYPE_UINT32:
187
                              sprintf(dato, "%d", ((lt_uint32*)data)[0]);
188
                              break;
189
                            case LTI_METADATA_DATATYPE_SINT32:
190
                              sprintf(dato, "%d", ((lt_int32*)data)[0]);
191
                              break;
192
                            case LTI_METADATA_DATATYPE_UINT64:
193
                              sprintf(dato, "%I64u", ((lt_uint64*)data)[0]);
194
                              break;
195
                            case LTI_METADATA_DATATYPE_SINT64:
196
                              sprintf(dato, "%I64d", ((lt_int64*)data)[0]);
197
                              break;
198
                            case LTI_METADATA_DATATYPE_FLOAT32:
199
                              sprintf(dato, "%f", ((float*)data)[0]);
200
                              break;
201
                            case LTI_METADATA_DATATYPE_FLOAT64:
202
                              sprintf(dato, "%f", ((double*)data)[0]);
203
                              break;
204
                            case LTI_METADATA_DATATYPE_ASCII:
205
                              {
206
                                 const char* p = ((const char**)data)[0];
207
                                 sprintf(dato,"%s", p);
208
                              }
209
                              break;
210
                           }
211
           
212
           return env->NewStringUTF(dato); 
213
           
214
                  
215
          }else return NULL;
216
  }
217

    
218

    
219

    
220

    
221
/******************************************************************************/
222
//                                                         getVectorData
223
/******************************************************************************/
224

    
225
JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getVectorDataNat
226
  (JNIEnv *env, jobject obj, jlong cPtr){
227
          
228
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
229
           char dato[255];
230
         jclass clase;
231
         jmethodID metodo;
232
         jobject obj_stringarray;
233
         jfieldID id_campo;
234
           jobjectArray arr_string;
235
                      
236
          record = *(LTIMetadataRecord **)&cPtr;
237
          
238
          if(record!=NULL){
239
                  lt_uint32 len=0;
240
            const void* data = record->getVectorData(len);
241
            
242
            clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
243
                   metodo = env->GetMethodID(clase, "reserva", "(I)V");
244
                   obj_stringarray = env->NewObject (clase,metodo,len);
245
                   id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;");
246
                   arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo);
247
                   
248
              for (lt_uint32 i=0; i<len; i++)
249
              {
250
                          switch (record->getDataType())
251
                           {
252
                                case LTI_METADATA_DATATYPE_UINT8:
253
                              sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
254
                              break;
255
                            case LTI_METADATA_DATATYPE_SINT8:
256
                              sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
257
                              break;
258
                            case LTI_METADATA_DATATYPE_UINT16:
259
                              sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
260
                              break;
261
                            case LTI_METADATA_DATATYPE_SINT16:
262
                              sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
263
                              break;
264
                            case LTI_METADATA_DATATYPE_UINT32:
265
                              sprintf(dato, "%d", ((lt_uint32*)data)[i]);
266
                              break;
267
                            case LTI_METADATA_DATATYPE_SINT32:
268
                              sprintf(dato, "%d", ((lt_int32*)data)[i]);
269
                              break;
270
                            case LTI_METADATA_DATATYPE_UINT64:
271
                              sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
272
                              break;
273
                            case LTI_METADATA_DATATYPE_SINT64:
274
                              sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
275
                              break;
276
                            case LTI_METADATA_DATATYPE_FLOAT32:
277
                              sprintf(dato, "%f", ((float*)data)[i]);
278
                              break;
279
                            case LTI_METADATA_DATATYPE_FLOAT64:
280
                              sprintf(dato, "%f", ((double*)data)[i]);
281
                              break;
282
                            case LTI_METADATA_DATATYPE_ASCII:
283
                              {
284
                                 const char* p = ((const char**)data)[i];
285
                                 sprintf(dato,"%s", p);
286
                              }
287
                              break;
288
                   }
289

    
290
                   env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
291
                    
292
            }
293
            
294
          }
295
          
296
          return obj_stringarray;
297
          
298
  }
299

    
300
/******************************************************************************/
301
//                                                         getArrayData
302
/******************************************************************************/
303

    
304
JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getArrayDataNat
305
  (JNIEnv *env, jobject obj, jlong cPtr){
306
          
307
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
308
           char dato[255];
309
         jclass clase;
310
         jmethodID metodo;
311
         jobject obj_stringarray;
312
         jfieldID id_campo;
313
           jobjectArray arr_string;
314
                      
315
          record = *(LTIMetadataRecord **)&cPtr;
316
          
317
          if(record!=NULL){
318
                  
319
                  lt_uint32 numDims=0;
320
              const lt_uint32* dims=NULL;
321
        const void* data = record->getArrayData(numDims, dims);
322
              lt_uint32 i=0;
323
              lt_uint32 d=0;
324
              
325
            
326
            clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
327
                   metodo = env->GetMethodID(clase, "reserva", "(I)V");
328
                   obj_stringarray = env->NewObject (clase,metodo,numDims*(*dims));
329
                   id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;");
330
                   arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo);
331
                   
332
              for (d=0; d<numDims; d++)
333
              {
334

    
335
                 lt_uint32 nd=0;
336
                         for (nd=0; nd<dims[d]; nd++)
337
                 {
338
                                  switch (record->getDataType())
339
                                   {
340
                                        case LTI_METADATA_DATATYPE_UINT8:
341
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
342
                                      break;
343
                                    case LTI_METADATA_DATATYPE_SINT8:
344
                                      sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
345
                                      break;
346
                                    case LTI_METADATA_DATATYPE_UINT16:
347
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
348
                                      break;
349
                                    case LTI_METADATA_DATATYPE_SINT16:
350
                                      sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
351
                                      break;
352
                                    case LTI_METADATA_DATATYPE_UINT32:
353
                                      sprintf(dato, "%d", ((lt_uint32*)data)[i]);
354
                                      break;
355
                                    case LTI_METADATA_DATATYPE_SINT32:
356
                                      sprintf(dato, "%d", ((lt_int32*)data)[i]);
357
                                      break;
358
                                    case LTI_METADATA_DATATYPE_UINT64:
359
                                      sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
360
                                      break;
361
                                    case LTI_METADATA_DATATYPE_SINT64:
362
                                      sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
363
                                      break;
364
                                    case LTI_METADATA_DATATYPE_FLOAT32:
365
                                      sprintf(dato, "%f", ((float*)data)[i]);
366
                                      break;
367
                                    case LTI_METADATA_DATATYPE_FLOAT64:
368
                                      sprintf(dato, "%f", ((double*)data)[i]);
369
                                      break;
370
                                    case LTI_METADATA_DATATYPE_ASCII:
371
                                      {
372
                                         const char* p = ((const char**)data)[i];
373
                                         sprintf(dato,"%s", p);
374
                                      }
375
                                      break;
376
                           }
377
        
378
                           env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
379
                            
380
                       ++i;
381
                 }
382
              }
383
            
384
          }
385
          
386
          return obj_stringarray;
387
  }
388
  
389