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 |