Statistics
| Revision:

svn-gvsig-desktop / tags / v1_10_0_Build_1260 / libraries / libjni-addo / src / addo_interfaz.c @ 43469

History | View | Annotate | Download (2.21 KB)

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

    
6
jobject *jni_obj;
7
JNIEnv *jni_env;
8

    
9

    
10
int 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 (jni_env, "org/gvsig/addo/IOverviewIncrement");
17

    
18
        method = (*jni_env)->GetMethodID(jni_env, class_incr, "setPercent", "(I)V");
19
        (*jni_env)->CallVoidMethod(jni_env, (*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
          GDALDatasetH *poDataset;
30
          int anLevels[1024];
31
          const char * pszResampling = "nearest";
32
        const char *filename = (*env)->GetStringUTFChars(env, file, 0);
33
        lon = (*env)->GetArrayLength(env, values);
34

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

    
38
          listValues = (*env)->GetIntArrayElements(env, 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 = GDALOpen( filename, GA_Update );
54

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

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

    
64
        err = GDALBuildOverviews( poDataset, pszResampling,
65
                            lon, anLevels, 0, NULL,
66
                            incrementFnc, NULL );
67
    if( err != CE_None ) {
68
                (*env)->ReleaseIntArrayElements(env, values, listValues, 0);
69
                (*env)->ReleaseStringUTFChars(env, file, filename);
70
        return err;
71
    }
72
        GDALClose(poDataset);
73
    GDALDestroyDriverManager();
74

    
75
    (*env)->ReleaseIntArrayElements(env, values, listValues, 0);
76
    (*env)->ReleaseStringUTFChars(env, file, filename);
77

    
78
    return -1;
79
}
80

    
81