Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libjni-addo / src / addo_interfaz.c @ 17249

History | View | Annotate | Download (2.24 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
          jni_obj = &obj;
26
          jni_env = env;
27
          
28
          int err = 0;
29
          jsize lon = 0;
30
          jint *listValues = NULL;
31
          GDALDatasetH *poDataset;
32
          int anLevels[1024];
33
          const char * pszResampling = "nearest";
34
        const char *filename = (*env)->GetStringUTFChars(env, file, 0);
35
        lon = (*env)->GetArrayLength(env, values); 
36
        
37
          listValues = (*env)->GetIntArrayElements(env, values, 0);
38
          int i = 0;
39
          for (i = 0; i < lon; i++) {
40
                anLevels[i] = listValues[i];
41
        }
42
        
43
          switch(method) {
44
                  case 0: pszResampling = "nearest"; break;
45
                  case 1: pszResampling = "average"; break;
46
                  case 2: pszResampling = "average_mp"; break;
47
                  case 3: pszResampling = "average_magphase"; break;
48
                  case 4: pszResampling = "mode"; break;
49
          }
50
          
51
          GDALAllRegister();        
52
    poDataset = GDALOpen( filename, GA_Update );
53
    
54
    if( poDataset == NULL )
55
        poDataset = GDALOpen( filename, GA_ReadOnly );
56

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

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

    
80