libbluray | branch: master | hpi1 <[email protected]> | Sat Apr 30 14:49:48 2011 +0300| [d50758eda9d31e69a5b23a044a139068acd69a60] | committer: hpi1
Store current playback location when entering top menu > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=d50758eda9d31e69a5b23a044a139068acd69a60 --- src/libbluray/bluray.c | 4 ++++ src/libbluray/hdmv/hdmv_vm.c | 18 +++++++++++++++--- src/libbluray/hdmv/hdmv_vm.h | 30 +++++++++++++++++++++++++++++- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 6e53186..f526217 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1938,6 +1938,10 @@ int bd_menu_call(BLURAY *bd, int64_t pts) BD_DEBUG(DBG_BLURAY|DBG_CRIT, "menu call masked by movie object\n"); return 0; } + + if (hdmv_vm_suspend_pl(bd->hdmv_vm) < 0) { + BD_DEBUG(DBG_BLURAY|DBG_CRIT, "bd_menu_call(): error storing playback location\n"); + } } 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 3453d2f..bda4e16 100644 --- a/src/libbluray/hdmv/hdmv_vm.c +++ b/src/libbluray/hdmv/hdmv_vm.c @@ -974,13 +974,25 @@ int hdmv_vm_resume(HDMV_VM *p) return result; } -int hdmv_vm_suspend(HDMV_VM *p) +int hdmv_vm_suspend_pl(HDMV_VM *p) { int result = -1; bd_mutex_lock(&p->mutex); - if (p->object && !p->ig_object) { - _suspend_object(p, 1); + if (p->object || p->ig_object) { + BD_DEBUG(DBG_HDMV, "hdmv_vm_suspend_pl(): HDMV VM is still running\n"); + + } else if (!p->suspended_object) { + BD_DEBUG(DBG_HDMV, "hdmv_vm_suspend_pl(): No suspended object\n"); + + } else if (!p->suspended_object->resume_intention_flag) { + BD_DEBUG(DBG_HDMV, "hdmv_vm_suspend_pl(): no resume intention flag\n"); + + p->suspended_object = NULL; + result = 0; + + } else { + bd_psr_save_state(p->regs); result = 0; } diff --git a/src/libbluray/hdmv/hdmv_vm.h b/src/libbluray/hdmv/hdmv_vm.h index 9c0d945..cfb92a8 100644 --- a/src/libbluray/hdmv/hdmv_vm.h +++ b/src/libbluray/hdmv/hdmv_vm.h @@ -79,7 +79,35 @@ BD_PRIVATE int hdmv_vm_running(HDMV_VM *p); #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); +/** + * + * Suspend playlist playback + * + * This function assumes playlist is currently playing and + * movie object execution is suspended at PLAY_PL instruction. + * + * If resume_intention_flag of current movie object is 1: + * Copy playback position PSRs to backup registers + * (suspend playlist playback at current position) + * If resume_intention_flag of current movie object is 0: + * Discard current movie object + * + * @param p HDMV_VM object + * @return 0 on success, -1 if error + */ +BD_PRIVATE int hdmv_vm_suspend_pl(HDMV_VM *p); + +/** + * + * Resume HDMV execution + * + * Continue execution of movie object after playlist playback. + * Do not restore backup PSRs. + * This function is called when playlist playback ends. + * + * @param p HDMV_VM object + * @return 0 on success, -1 if error + */ BD_PRIVATE int hdmv_vm_resume(HDMV_VM *p); #endif // _HDMV_VM_H_ _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
