libbluray | branch: master | hpi1 <[email protected]> | Wed Apr 27 15:07:21 2011 +0300| [8b866642a667c81cbad475308686484af8ea864b] | committer: hpi1
Check movie object title search and menu call masks before allowing user operation > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=8b866642a667c81cbad475308686484af8ea864b --- src/libbluray/bluray.c | 14 ++++++++++++++ src/libbluray/hdmv/hdmv_vm.c | 16 ++++++++++++++++ src/libbluray/hdmv/hdmv_vm.h | 5 +++++ 3 files changed, 35 insertions(+), 0 deletions(-) diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 4298aca..38d1ee1 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1875,6 +1875,13 @@ int bd_play_title(BLURAY *bd, unsigned title) return 0; } + if (bd->title_type == title_hdmv) { + if (hdmv_vm_get_uo_mask(bd->hdmv_vm) & HDMV_TITLE_SEARCH_MASK) { + BD_DEBUG(DBG_BLURAY|DBG_CRIT, "title search masked by movie object\n"); + return 0; + } + } + return _play_title(bd, title); } @@ -1889,6 +1896,13 @@ int bd_menu_call(BLURAY *bd, int64_t pts) return 0; } + if (bd->title_type == title_hdmv) { + if (hdmv_vm_get_uo_mask(bd->hdmv_vm) & HDMV_MENU_CALL_MASK) { + BD_DEBUG(DBG_BLURAY|DBG_CRIT, "menu call masked by movie object\n"); + return 0; + } + } + return _play_title(bd, BLURAY_TITLE_TOP_MENU); } diff --git a/src/libbluray/hdmv/hdmv_vm.c b/src/libbluray/hdmv/hdmv_vm.c index 4d685f9..3453d2f 100644 --- a/src/libbluray/hdmv/hdmv_vm.c +++ b/src/libbluray/hdmv/hdmv_vm.c @@ -947,6 +947,22 @@ int hdmv_vm_running(HDMV_VM *p) return result; } +uint32_t hdmv_vm_get_uo_mask(HDMV_VM *p) +{ + uint32_t mask = 0; + MOBJ_OBJECT *o = NULL; + + bd_mutex_lock(&p->mutex); + + if ((o = p->object ? p->object : p->suspended_object)) { + mask |= o->menu_call_mask; + mask |= o->title_search_mask << 1; + } + + bd_mutex_unlock(&p->mutex); + return mask; +} + int hdmv_vm_resume(HDMV_VM *p) { int result; diff --git a/src/libbluray/hdmv/hdmv_vm.h b/src/libbluray/hdmv/hdmv_vm.h index 5d7376c..9c0d945 100644 --- a/src/libbluray/hdmv/hdmv_vm.h +++ b/src/libbluray/hdmv/hdmv_vm.h @@ -74,6 +74,11 @@ BD_PRIVATE int hdmv_vm_run(HDMV_VM *p, HDMV_EVENT *ev); BD_PRIVATE int hdmv_vm_get_event(HDMV_VM *p, HDMV_EVENT *ev); BD_PRIVATE int hdmv_vm_running(HDMV_VM *p); + +#define HDMV_MENU_CALL_MASK 0x01 +#define HDMV_TITLE_SEARCH_MASK 0x02 +BD_PRIVATE uint32_t hdmv_vm_get_uo_mask(HDMV_VM *p); + BD_PRIVATE int hdmv_vm_suspend(HDMV_VM *p); BD_PRIVATE int hdmv_vm_resume(HDMV_VM *p); _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
