Statistics
| Revision:

root / trunk / libraries / libjni-addo / src / addo_interfaz.cpp @ 17518

History | View | Annotate | Download (2.17 KB)

1
#include <jni.h>
2
#include <org_gvsig_addo_Jaddo.h>
3
#include "gdal_priv.h"
4
#include "cpl_string.h"
5

    
6
jobject *jni_obj;
7
JNIEnv *jni_env;
8

    
9

    
10
int CPL_STDCALL incrementFnc( double dfComplete, const char *pszMessage, void * pProgressArg ) {
11
        jclass class_incr;
12
        jmethodID method;
13
        int value = 0;
14

    
15
        value = (int)(dfComplete * 100);
16
        class_incr = jni_env->FindClass ("org/gvsig/addo/IOverviewIncrement");
17

    
18
        method = jni_env->GetMethodID( class_incr, "setPercent", "(I)V");
19
        jni_env->CallVoidMethod( (*jni_obj), method, value);
20
  return 1;
21
}
22

    
23
JNIEXPORT jint JNICALL Java_org_gvsig_addo_Jaddo_buildOverviewsNative
24
  (JNIEnv *env, jobject obj, jint method, jstring file, jintArray values) {
25
          int err = 0;
26
          jsize lon = 0;
27
        int i = 0;
28
          jint *listValues = NULL;
29
          GDALDataset *poDataset;
30
          int anLevels[4] = {2, 4, 8, 16};
31
          const char * pszResampling = "nearest";
32
        const char *filename = env->GetStringUTFChars( file, 0);
33
        lon = env->GetArrayLength( values);
34

    
35
        jni_obj = &obj;
36
          jni_env = env;
37

    
38
          listValues = env->GetIntArrayElements( values, 0);
39

    
40
          for (i = 0; i < lon; i++) {
41
                anLevels[i] = listValues[i];
42
        }
43

    
44
          switch(method) {
45
                  case 0: pszResampling = "nearest"; break;
46
                  case 1: pszResampling = "average"; break;
47
                  case 2: pszResampling = "average_mp"; break;
48
                  case 3: pszResampling = "average_magphase"; break;
49
                  case 4: pszResampling = "mode"; break;
50
          }
51

    
52
          GDALAllRegister();
53
    poDataset = (GDALDataset *) GDALOpen( filename, GA_Update );
54

    
55
    if( poDataset == NULL )
56
        poDataset = (GDALDataset *) GDALOpen( filename, GA_ReadOnly );
57

    
58
    if( poDataset == NULL ) {
59
            env->ReleaseIntArrayElements( values, listValues, 0);
60
            env->ReleaseStringUTFChars( file, filename);
61
        return CE_Fatal;
62
    }
63

    
64
        err = poDataset->BuildOverviews(  pszResampling,
65
                            lon, anLevels, 0, NULL,
66
                            incrementFnc, NULL );
67

    
68
    if( err != CE_None ) {
69
                env->ReleaseIntArrayElements( values, listValues, 0);
70
                env->ReleaseStringUTFChars( file, filename);
71
        return err;
72
    }
73

    
74
        delete poDataset;
75
    GDALDestroyDriverManager();
76

    
77
    env->ReleaseIntArrayElements( values, listValues, 0);
78
    env->ReleaseStringUTFChars( file, filename);
79

    
80
    return -1;
81
}
82

    
83