Opened 9 years ago

#1982 new defect

Region 1 "Thor" DVD does not play correctly with libdvdnav

Reported by: sixtyfive@… Owned by: reimar
Priority: normal Component: core
Version: HEAD Severity: normal
Keywords: Cc:
Blocked By: Blocking:
Reproduced by developer: Analyzed by developer:


This refers to the region 1 "Thor" DVD. mplayer does not behave like a commercial DVD player with running "Thor". mplayer seems lost for a period of time and then displays a green box which follows the mouse. A commercial player starts with the distribution company promo followed by previews.

It appears that the libdvdnav VM may not be implementing the correct behavior. The first VM command the the first play PGC is:

JumpTT 1

This proceeds to the first PGC of title 1. The last VM pre command here is:

LinkPGCN 2

Going to PGC number 2 we have the following VM pre command:

if (g[0] >= 0xa) LinkPGCN 4

Since g[0] is "0" the VM continues with playing the first cell. Next the VM runs the cell command:

g[0] += 0x1, LinkPGCN 2

This is interesting because the current PGC number is already 2. The current behavior of libdvdnav is to go back and reinitialize the program chain, running the pre-commands. Doing this causes a loop of ten iterations with the VM eventually linking to PGC number 4. Doing this causes the wrong playback.

If instead "LinkPGCN 2" behaves as a "NoLink?" when the PGC number is already 2, then the second cell is played, and the second cell command is"

LinkPGCN 3

This causes mplayer to play the promo and previews for "Thor" as the commercial player does. I listed my patch to "decoder.c" at the end. I don't actually know if this is the correct VM behavior, I'm just guessing.


* decoder.c 2011-09-18 11:49:23.584095561 -0400
--- /home/sixtyfive/src/svn/mplayer/libdvdnav/vm/decoder.c 2011-09-18 10:46:00.580489779 -0400
* 266,273

case 4:

return_values->command = LinkPGCN;
return_values->data1 = vm_getbits(command, 14, 15);

  • if (command->registers->SPRM[6] == return_values->data1)
  • cond = 0;

return cond;

case 5:

return_values->command = LinkPTTN;

--- 266,271 ----

Change History (0)

Note: See TracTickets for help on using tickets.