Statistics
| Revision:

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

History | View | Annotate | Download (13.6 KB)

1
/**********************************************************************
2
 * $Id: ltimetadatarecord.cpp 1180 2005-01-25 12:04:45Z 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 <string.h>
30
#include "es_gva_cit_jmrsid_LTIMetadataRecord.h"
31
#include "es_gva_cit_jmrsid_JNIBase.h"
32

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

    
51
LT_USE_NAMESPACE(LizardTech);
52

    
53
/******************************************************************************/
54
//                                                         getTagName
55
/******************************************************************************/
56

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

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

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

    
92

    
93
/******************************************************************************/
94
//                                                         isVector
95
/******************************************************************************/
96

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

    
110
/******************************************************************************/
111
//                                                         isArray
112
/******************************************************************************/
113

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

    
127
/******************************************************************************/
128
//                                                         getDataType
129
/******************************************************************************/
130

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

    
158
/******************************************************************************/
159
//                                                         getScalarData
160
/******************************************************************************/
161

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

    
221

    
222

    
223

    
224
/******************************************************************************/
225
//                                                         getVectorData
226
/******************************************************************************/
227

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

    
293
                   env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
294
                    
295
            }
296
            
297
          }
298
          
299
          return obj_stringarray;
300
          
301
  }
302

    
303
/******************************************************************************/
304
//                                                         getArrayData
305
/******************************************************************************/
306

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

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

    
396
  JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getNumDimsNat
397
  (JNIEnv *env, jobject obj, jlong cPtr){
398
          
399
          jint dims=-1;
400
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
401
          record = *(LTIMetadataRecord **)&cPtr;
402
          if(record!=NULL){
403
                  dims = (jint)record->getNumDims();
404
          }
405
          return dims;
406
  }
407

    
408
/******************************************************************************/
409
//                                                         getDims
410
/******************************************************************************/
411

    
412
JNIEXPORT jintArray JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDimsNat
413
  (JNIEnv *env, jobject obj, jlong cPtr){
414
          
415
          jintArray longitudes=NULL;
416
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
417
          record = *(LTIMetadataRecord **)&cPtr;
418
          if(record!=NULL){
419
                  const lt_uint32* dims = record->getDims();
420
                  const lt_uint32 numdims = record->getNumDims();
421
                  longitudes = env->NewIntArray((int)numdims);
422
                  env->SetIntArrayRegion( longitudes, 0, (int)numdims,(jint *)dims); 
423

    
424
          }
425
          return longitudes;
426
  }
427
  
428
  
429
/******************************************************************************/
430
//                                                                 ~LTIMetadataRecord
431
/******************************************************************************/
432
  
433
JNIEXPORT void JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_FreeLTIMetadataRecordNat
434
  (JNIEnv *env, jobject obj, jlong cPtr){
435
          
436
          LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
437
          
438
          record = *(LTIMetadataRecord **)&cPtr;
439
          if(record!=NULL){
440
                  delete record;
441
          }
442
          
443
  }