Statistics
| Revision:

svn-gvsig-desktop / tags / v1_9_Build_1241 / libraries / libjni-addo / src / addo_interfaz.c @ 40002

History | View | Annotate | Download (2.21 KB)

1 17249 nbrodin
#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 17301 nbrodin
15 17249 nbrodin
        value = (int)(dfComplete * 100);
16
        class_incr = (*jni_env)->FindClass (jni_env, "org/gvsig/addo/IOverviewIncrement");
17 17301 nbrodin
18 17249 nbrodin
        method = (*jni_env)->GetMethodID(jni_env, class_incr, "setPercent", "(I)V");
19
        (*jni_env)->CallVoidMethod(jni_env, (*jni_obj), method, value);
20 17301 nbrodin
  return 1;
21 17249 nbrodin
}
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 17301 nbrodin
        int i = 0;
28 17249 nbrodin
          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 17301 nbrodin
        lon = (*env)->GetArrayLength(env, values);
34
35
        jni_obj = &obj;
36
          jni_env = env;
37
38 17249 nbrodin
          listValues = (*env)->GetIntArrayElements(env, values, 0);
39 17301 nbrodin
40 17249 nbrodin
          for (i = 0; i < lon; i++) {
41
                anLevels[i] = listValues[i];
42
        }
43 17301 nbrodin
44 17249 nbrodin
          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 17301 nbrodin
52
          GDALAllRegister();
53 17249 nbrodin
    poDataset = GDALOpen( filename, GA_Update );
54 17301 nbrodin
55 17249 nbrodin
    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 17301 nbrodin
75 17249 nbrodin
    (*env)->ReleaseIntArrayElements(env, values, listValues, 0);
76
    (*env)->ReleaseStringUTFChars(env, file, filename);
77 17301 nbrodin
78 17249 nbrodin
    return -1;
79
}
80