libbluray | branch: master | hpi1 <[email protected]> | Thu Mar 27 13:04:58 2014 +0200| [83d4fc32e45b9294c63ee3902cf1eed204488566] | committer: hpi1
bdj: read index on demand This makes BD-J module interface simpler, if it is moved to separate process. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=83d4fc32e45b9294c63ee3902cf1eed204488566 --- src/libbluray/bdj/bdj.c | 3 +-- src/libbluray/bdj/bdj.h | 2 -- src/libbluray/bdj/native/org_videolan_Libbluray.c | 23 ++++++++++++++++++++- src/libbluray/bluray.c | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index 46fc66f..53a8737 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -448,7 +448,6 @@ static int _create_jvm(void *jvm_lib, const char *java_home, JNIEnv **env, JavaV } BDJAVA* bdj_open(const char *path, struct bluray *bd, - struct indx_root_s *index, bdj_overlay_cb osd_cb, struct bd_argb_buffer_s *buf) { BD_DEBUG(DBG_BDJ, "bdj_open()\n"); @@ -471,7 +470,6 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); bdjava->bd = bd; - bdjava->index = index; bdjava->path = path; bdjava->h_libjvm = jvm_lib; bdjava->osd_cb = osd_cb; @@ -536,6 +534,7 @@ void bdj_close(BDJAVA *bdjava) dl_dlclose(bdjava->h_libjvm); } + indx_free(&bdjava->index); X_FREE(bdjava); } diff --git a/src/libbluray/bdj/bdj.h b/src/libbluray/bdj/bdj.h index e921b55..b589718 100644 --- a/src/libbluray/bdj/bdj.h +++ b/src/libbluray/bdj/bdj.h @@ -49,14 +49,12 @@ typedef enum { typedef struct bdjava_s BDJAVA; struct bluray; -struct indx_root_s; struct bd_argb_buffer_s; typedef void (*bdj_overlay_cb)(struct bluray *, const unsigned *, int, int, int, int, int, int); BD_PRIVATE BDJAVA* bdj_open(const char *path, struct bluray *bd, - struct indx_root_s *index, bdj_overlay_cb osd_cb, struct bd_argb_buffer_s *buf); BD_PRIVATE void bdj_close(BDJAVA *bdjava); BD_PRIVATE int bdj_process_event(BDJAVA *bdjava, unsigned ev, unsigned param); diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.c b/src/libbluray/bdj/native/org_videolan_Libbluray.c index f6c27e9..b186661 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.c +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.c @@ -121,6 +121,18 @@ static jobject _make_playlist_info(JNIEnv* env, BLURAY_TITLE_INFO* ti) ti->playlist, ti->duration, ti->angle_count, marks, clips); } +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) @@ -129,6 +141,10 @@ JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getTitleInfoN BD_DEBUG(DBG_JNI, "getTitleInfoN(%d)\n", (int)title); + if (!_read_index(bdj)) { + return NULL; + } + if (title == 65535) { if (bdj->index->first_play.object_type == indx_object_type_hdmv) return _make_title_info(env, 65535, indx_object_type_hdmv, @@ -163,7 +179,7 @@ JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getTitleInfoN bdj->index->titles[title - 1].bdj.name, -1); } - return NULL; + return NULL; } JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getPlaylistInfoN @@ -214,6 +230,11 @@ 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; + + if (!_read_index(bdj)) { + return 0; + } + return bdj->index->num_titles; } diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 76a535f..0603033 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1204,7 +1204,7 @@ static int _start_bdj(BLURAY *bd, unsigned title) { #ifdef USING_BDJAVA if (bd->bdjava == NULL) { - bd->bdjava = bdj_open(bd->device_path, bd, bd->index, _bdj_osd_cb, bd->argb_buffer); + bd->bdjava = bdj_open(bd->device_path, bd, _bdj_osd_cb, bd->argb_buffer); if (!bd->bdjava) { return 0; } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
