static void video_capture_init(MSFilter *f) { AndroidReaderContext* d = new AndroidReaderContext(f, 0); ms_message("Init of Android VIDEO capture filter (%p)", d); JNIEnv *env = ms_get_jni_env(); d->helperClass = getHelperClassGlobalRef(env); f->data = d; }
static void video_capture_detect(MSWebCamManager *obj){ ms_message("Detecting Android VIDEO cards"); JNIEnv *env = ms_get_jni_env(); jclass helperClass = getHelperClassGlobalRef(env); // create 3 int arrays - assuming 2 webcams at most jintArray indexes = (jintArray)env->NewIntArray(2); jintArray frontFacing = (jintArray)env->NewIntArray(2); jintArray orientation = (jintArray)env->NewIntArray(2); jmethodID method = env->GetStaticMethodID(helperClass,"detectCameras", "([I[I[I)I"); int count = env->CallStaticIntMethod(helperClass, method, indexes, frontFacing, orientation); ms_message("%d cards detected", count); for(int i=0; i<count; i++) { MSWebCam *cam = ms_web_cam_new(&ms_android_video_capture_desc); AndroidWebcamConfig* c = new AndroidWebcamConfig(); env->GetIntArrayRegion(indexes, i, 1, &c->id); env->GetIntArrayRegion(frontFacing, i, 1, &c->frontFacing); env->GetIntArrayRegion(orientation, i, 1, &c->orientation); cam->data = c; cam->name = ms_strdup("Android video name"); char* idstring = (char*) malloc(15); snprintf(idstring, 15, "Android%d", c->id); cam->id = idstring; ms_web_cam_manager_add_cam(obj,cam); ms_message("camera created: id=%d frontFacing=%d orientation=%d [msid:%s]\n", c->id, c->frontFacing, c->orientation, idstring); } env->DeleteGlobalRef(helperClass); ms_message("Detection of Android VIDEO cards done"); }