_resume_from_play_pl() restores the stored pc and increments it by one. This
function is also called via _play_stop() when a TERMINATE_PL instruction is
executed. The program counter is than incremented once more, wrongly skipping
an instruction.
---
src/libbluray/hdmv/hdmv_vm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libbluray/hdmv/hdmv_vm.c b/src/libbluray/hdmv/hdmv_vm.c
index 7c6ba37..b52b929 100644
--- a/src/libbluray/hdmv/hdmv_vm.c
+++ b/src/libbluray/hdmv/hdmv_vm.c
@@ -1058,7 +1058,7 @@ static int _hdmv_step(HDMV_VM *p)
case INSN_PLAY_PL: _play_at(p, dst, -1, -1);
break;
case INSN_PLAY_PL_PI: _play_at(p, dst, src, -1);
break;
case INSN_PLAY_PL_PM: _play_at(p, dst, -1, src);
break;
- case INSN_TERMINATE_PL: _play_stop(p);
break;
+ case INSN_TERMINATE_PL: _play_stop(p); inc_pc = 0;
break;
case INSN_LINK_PI: _play_at(p, -1, dst, -1);
break;
case INSN_LINK_MK: _play_at(p, -1, -1, dst);
break;
default:
--
2.1.4
_______________________________________________
libbluray-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/libbluray-devel