Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <jni.h>
- #include <android/log.h>
- #include "cvsba/sba.h"
- #include "BA/projHybrid.h"
- #include "BA/jacprojHybrid.h"
- #define LOG_TAG "BundleAdjustmentJNI"
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
- #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
- extern "C" {
- JNIEXPORT jdoubleArray JNICALL Java_hu_u_1szeged_inf_nativelib_BundleAdjustmentJNI_hybridBA(JNIEnv* env, jobject obj,
- jdoubleArray p0, jdoubleArray affineAndPoints2d, jint ncams, jintArray visib_mask, jdoubleArray intrinsics,
- jint pts_count, jint pts3d_count );
- };
- static void proj_motstr(int j, int i, double *aj, double *bi, double *xij, void *adata)
- {
- // double* ncams = (double*)(&adata)[0];
- // double **affineAndPts2D = (double **)(&adata)[1];
- // double **intrinsics = (double **)(&adata)[2];
- int *ncams=((int **)&adata)[0];
- double *affineAndPts2D = ((double **)((&adata + sizeof(int *))))[0];
- double *intrinsics = ((double **)((&adata + sizeof(int *))))[1];
- LOGD("4.4 %d", *ncams);
- LOGD("4.5 %f", intrinsics[2]);
- LOGD("4.6 %f", affineAndPts2D[4]);
- projHybrid(j, i, aj, bi, (double)(*ncams), affineAndPts2D, intrinsics, xij);
- }
- static void projac_motstr(int j, int i, double *aj, double *bi, double *Aij, double *Bij, void *adata)
- {
- // double* ncams = (double*)(&adata)[0];
- // double **affineAndPts2D = (double **)(&adata)[1];
- // double **intrinsics = (double **)(&adata)[2];
- int *ncams=((int **)&adata)[0];
- double *affineAndPts2D = ((double **)((&adata + sizeof(int *))))[0];
- double *intrinsics = ((double **)((&adata + sizeof(int *))))[1];
- jacprojHybrid(j, i, aj, bi, (double)(*ncams), affineAndPts2D, intrinsics, Aij, Bij);
- }
- JNIEXPORT jdoubleArray JNICALL Java_hu_u_1szeged_inf_nativelib_BundleAdjustmentJNI_hybridBA(JNIEnv* env, jobject obj,
- jdoubleArray p0, jdoubleArray affineAndPoints2d, jint ncams, jintArray visib_mask, jdoubleArray intrinsics ,
- jint pts_count, jint pts3d_count) {
- double *P0 = env->GetDoubleArrayElements(p0, 0);
- env->ReleaseDoubleArrayElements(p0, P0, 0);
- double *AffineAndPoints2d = env->GetDoubleArrayElements(affineAndPoints2d, 0);
- env->ReleaseDoubleArrayElements(affineAndPoints2d, AffineAndPoints2d, 0);
- double *Intrinsics = env->GetDoubleArrayElements(intrinsics, 0);
- env->ReleaseDoubleArrayElements(intrinsics, Intrinsics, 0);
- int * ivmask = env->GetIntArrayElements(visib_mask, 0);
- env->ReleaseIntArrayElements(visib_mask, ivmask, 0);
- /*for(int i=0;i<ncams*pts3d_count;i++){
- LOGD("ivmask[%d]: %d", i,ivmask[i]);
- }*/
- char vmask[ncams*pts3d_count];
- //LOGD("vmask: %p", vmask);
- for(int i=0;i<ncams*pts3d_count;i++){
- if(ivmask[i]==0){
- vmask[i]=0;
- }else{
- vmask[i]=1;
- }
- //LOGD("vmask[%d]: %d", i,vmask[i]);
- }
- int cnp = 6;
- int p2dnp = 6;
- int p3Dnp=5;
- LOGD("3.4 %d", ncams);
- LOGD("3.5 %f", Intrinsics[2]);
- LOGD("3.6 %f", AffineAndPoints2d[4]);
- void* adata[3];
- adata[0]=&ncams;
- adata[1]=AffineAndPoints2d;
- adata[2]=Intrinsics;
- double opts[SBA_OPTSSZ]={SBA_INIT_MU, SBA_STOP_THRESH, SBA_STOP_THRESH, SBA_STOP_THRESH, 0.0};
- //sba(npts, 0, ncams, 1, dmask, p0, cnp, p3Dnp, affineAndPts2D, p2Dnp, 'projHybrid', 'jacprojHybrid',
- // 100, 1, opts, 'motstr', ncams, affineAndPts2D, intrinsics)
- sba_motstr_levmar(pts3d_count, 0, ncams, 0, vmask, P0, cnp, p3Dnp, AffineAndPoints2d , NULL, p2dnp, proj_motstr, projac_motstr, adata, 100, 1,opts,NULL);
- int l=ncams*cnp+pts3d_count*p3Dnp;
- jdoubleArray jResults = env->NewDoubleArray(l);
- env->SetDoubleArrayRegion(jResults, 0, l, &P0[0]);
- return jResults;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement