static jobjectArray _make_title_infos(JNIEnv * env, const BLURAY_DISC_INFO *disc_info) { jobjectArray titleArr = bdj_make_array(env, "org/videolan/TitleInfo", disc_info->num_titles + 2); for (unsigned i = 0; i <= disc_info->num_titles; i++) { jobject titleInfo = _make_title_info(env, disc_info->titles[i], i); (*env)->SetObjectArrayElement(env, titleArr, i, titleInfo); } jobject titleInfo = _make_title_info(env, disc_info->first_play, 65535); (*env)->SetObjectArrayElement(env, titleArr, disc_info->num_titles + 1, titleInfo); return titleArr; }
JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getTitleInfoN (JNIEnv * env, jclass cls, jlong np, jint title) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; BD_DEBUG(DBG_JNI, "getTitleInfoN(%d)\n", (int)title); if (title == 65535) { if (bdj->index->first_play.object_type == indx_object_type_hdmv) return _make_title_info(env, 65535, indx_object_type_hdmv, bdj->index->first_play.hdmv.playback_type, NULL, bdj->index->first_play.hdmv.id_ref); else return _make_title_info(env, 65535, indx_object_type_bdj, bdj->index->first_play.bdj.playback_type, bdj->index->first_play.bdj.name, -1); } else if (title == 0) { if (bdj->index->top_menu.object_type == indx_object_type_hdmv) return _make_title_info(env, 0, indx_object_type_hdmv, bdj->index->top_menu.hdmv.playback_type, NULL, bdj->index->top_menu.hdmv.id_ref); else return _make_title_info(env, 0, indx_object_type_bdj, bdj->index->top_menu.bdj.playback_type, bdj->index->top_menu.bdj.name, -1); } else if ((title > 0) && (title <= bdj->index->num_titles)) { if (bdj->index->titles[title - 1].object_type == indx_object_type_hdmv) return _make_title_info(env, title, indx_object_type_hdmv, bdj->index->titles[title - 1].hdmv.playback_type, NULL, bdj->index->titles[title - 1].hdmv.id_ref); else return _make_title_info(env, title, indx_object_type_bdj, bdj->index->titles[title - 1].bdj.playback_type, bdj->index->titles[title - 1].bdj.name, -1); } return NULL; }