libbluray | branch: master | hpi1 <[email protected]> | Thu Nov 6 12:38:20 2014 +0200| [03cd2e585ab105812f29ab16cc9e2f30e2698131] | committer: hpi1
Fill BD-J title info from disc info Simpler. No need to re-read disc index. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=03cd2e585ab105812f29ab16cc9e2f30e2698131 --- src/libbluray/bdj/bdj.c | 2 - src/libbluray/bdj/bdj_private.h | 2 - src/libbluray/bdj/java/org/videolan/TitleInfo.java | 16 ++-- src/libbluray/bdj/native/org_videolan_Libbluray.c | 87 +++++--------------- 4 files changed, 26 insertions(+), 81 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index 4b5cd28..2b23113 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -33,7 +33,6 @@ #include "util/macro.h" #include "util/logging.h" -#include "libbluray/bdnav/index_parse.h" #include <jni.h> #include <stdio.h> @@ -573,7 +572,6 @@ void bdj_close(BDJAVA *bdjava) dl_dlclose(bdjava->h_libjvm); } - indx_free(&bdjava->index); X_FREE(bdjava); } diff --git a/src/libbluray/bdj/bdj_private.h b/src/libbluray/bdj/bdj_private.h index a6fb6e6..e5b0bae 100644 --- a/src/libbluray/bdj/bdj_private.h +++ b/src/libbluray/bdj/bdj_private.h @@ -26,13 +26,11 @@ struct bluray; struct bd_argb_buffer_s; -struct indx_root_s; struct bdjava_s { struct bluray *bd; const char *path; - struct indx_root_s *index; bdj_overlay_cb osd_cb; struct bd_argb_buffer_s *buf; diff --git a/src/libbluray/bdj/java/org/videolan/TitleInfo.java b/src/libbluray/bdj/java/org/videolan/TitleInfo.java index decc41b..1c1075b 100644 --- a/src/libbluray/bdj/java/org/videolan/TitleInfo.java +++ b/src/libbluray/bdj/java/org/videolan/TitleInfo.java @@ -19,22 +19,20 @@ package org.videolan; public class TitleInfo { - public TitleInfo(int title, int objType, int playbackType, String bdjoName, int hdmvOID) { + public TitleInfo(int title, int objType, int playbackType, int idRef) { this.title = title; this.objType = objType; this.playbackType = playbackType; - this.bdjoName = bdjoName; - this.hdmvOID = hdmvOID; + if (objType == OBJ_TYPE_BDJ) + this.bdjoName = (new java.text.DecimalFormat("00000")).format(idRef); + else + this.hdmvOID = idRef; } public int getTitleNum() { return title; } - public int getObjType() { - return objType; - } - public int getPlaybackType() { return playbackType; } @@ -58,8 +56,8 @@ public class TitleInfo { private int title; private int objType; private int playbackType; - private String bdjoName; - private int hdmvOID; + private String bdjoName = null; + private int hdmvOID = -1; public static final int OBJ_TYPE_HDMV = 1; public static final int OBJ_TYPE_BDJ = 2; diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.c b/src/libbluray/bdj/native/org_videolan_Libbluray.c index 14d893b..56452d6 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.c +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.c @@ -56,52 +56,26 @@ * build org.videolan.TitleInfo */ -static jobject _make_title_info(JNIEnv* env, int title, int objType, int playbackType, const char* bdjoName, int hdmvOID) +static jobject _make_title_info(JNIEnv* env, const BLURAY_TITLE *title, int title_number) { - jstring name = bdjoName ? (*env)->NewStringUTF(env, bdjoName) : NULL; - jobject ti = bdj_make_object(env, "org/videolan/TitleInfo", - "(IIILjava/lang/String;I)V", - title, objType, playbackType, name, hdmvOID); - if (name) - (*env)->DeleteLocalRef(env, name); + jobject ti = NULL; + if (title) { + int title_type = title->bdj ? 2 : 1; + int playback_type = (!!title->interactive) + ((!!title->bdj) << 1); + ti = bdj_make_object(env, "org/videolan/TitleInfo", + "(IIII)V", + title_number, title_type, playback_type, title->id_ref); + } return ti; } -static jobject _get_title_info(JNIEnv * env, BDJAVA *bdj, jint title) +static jobject _get_title_info(JNIEnv * env, const BLURAY_DISC_INFO *disc_info, jint title_number) { - 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); + if (title_number == 65535) { + return _make_title_info(env, disc_info->first_play, 65535); + } + if (title_number >= 0 && (unsigned)title_number <= disc_info->num_titles) { + return _make_title_info(env, disc_info->titles[title_number], title_number); } return NULL; } @@ -178,35 +152,15 @@ static jobject _make_playlist_info(JNIEnv* env, BLURAY_TITLE_INFO* ti) * */ -static int _read_index(BDJAVA *bdj) -{ - if (!bdj) { - return 0; - } - - if (!bdj->index) { - bdj->index = indx_parse(bdj->path); - } - - return !!bdj->index; -} - -/* - * - */ - JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getTitleInfoN (JNIEnv * env, jclass cls, jlong np, jint title) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; + const BLURAY_DISC_INFO *disc_info = bd_get_disc_info(bdj->bd); BD_DEBUG(DBG_JNI, "getTitleInfoN(%d)\n", (int)title); - if (!_read_index(bdj)) { - return NULL; - } - - return _get_title_info(env, bdj, title); + return _get_title_info(env, disc_info, title); } JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getPlaylistInfoN @@ -257,12 +211,9 @@ JNIEXPORT void JNICALL Java_org_videolan_Libbluray_setUOMaskN(JNIEnv * env, JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_getTitlesN(JNIEnv * env, jclass cls, jlong np) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; + const BLURAY_DISC_INFO *disc_info = bd_get_disc_info(bdj->bd); - if (!_read_index(bdj)) { - return 0; - } - - return bdj->index->num_titles; + return disc_info->num_titles; } JNIEXPORT jlong JNICALL Java_org_videolan_Libbluray_seekN(JNIEnv * env, _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
