libbluray | branch: master | npzacs <[email protected]> | Thu Apr 21 13:00:15 2011 +0300| [7b5fd34f6f3bfdef3e4b5f2df65ca5de5be55ebc] | committer: npzacs
HDMV JUMP_TITLE should discard, not restore backup registers > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=7b5fd34f6f3bfdef3e4b5f2df65ca5de5be55ebc --- src/libbluray/hdmv/hdmv_vm.c | 8 +++----- src/libbluray/register.c | 11 +++++++++++ src/libbluray/register.h | 10 ++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/libbluray/hdmv/hdmv_vm.c b/src/libbluray/hdmv/hdmv_vm.c index aebd507..f20bef9 100644 --- a/src/libbluray/hdmv/hdmv_vm.c +++ b/src/libbluray/hdmv/hdmv_vm.c @@ -341,11 +341,9 @@ static int _jump_title(HDMV_VM *p, int title) if (title >= 0 && title <= 0xffff) { BD_DEBUG(DBG_HDMV, "_jump_title(%d)\n", title); - if (p->suspended_object) { - /* discard suspended object */ - p->suspended_object = NULL; - bd_psr_restore_state(p->regs); - } + /* discard suspended object */ + p->suspended_object = NULL; + bd_psr_reset_backup_registers(p->regs); _queue_event(p, HDMV_EVENT_TITLE, title); return 0; diff --git a/src/libbluray/register.c b/src/libbluray/register.c index a4b97ea..07032f8 100644 --- a/src/libbluray/register.c +++ b/src/libbluray/register.c @@ -255,6 +255,17 @@ void bd_psr_save_state(BD_REGISTERS *p) bd_psr_unlock(p); } +void bd_psr_reset_backup_registers(BD_REGISTERS *p) +{ + bd_psr_lock(p); + + /* init backup registers to default */ + memcpy(p->psr + 36, bd_psr_init + 36, sizeof(uint32_t) * 5); + memcpy(p->psr + 42, bd_psr_init + 42, sizeof(uint32_t) * 3); + + bd_psr_unlock(p); +} + void bd_psr_restore_state(BD_REGISTERS *p) { uint32_t old_psr[BD_PSR_COUNT]; diff --git a/src/libbluray/register.h b/src/libbluray/register.h index 2d73031..6259907 100644 --- a/src/libbluray/register.h +++ b/src/libbluray/register.h @@ -189,6 +189,16 @@ void bd_psr_save_state(BD_REGISTERS *); */ void bd_psr_restore_state(BD_REGISTERS *); +/** + * + * Reset backup registers + * + * Initialize backup registers 36-40 and 42-44 to default values. + * + * @param registers BD_REGISTERS object + */ +void bd_psr_reset_backup_registers(BD_REGISTERS *); + /* * Events when PSR value is changed _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
