Opened 13 years ago
#1982 new defect
Region 1 "Thor" DVD does not play correctly with libdvdnav
Reported by: | Owned by: | reimar | |
---|---|---|---|
Priority: | normal | Component: | core |
Version: | HEAD | Severity: | normal |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Reproduced by developer: | no | Analyzed by developer: | no |
Description
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.
jim
* 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 ----