+ msg_Dbg( &sys.demuxer, "CallSS VTSM (menu %d, rsm_cell %x)", p_command[5] & 0x0F, p_command[4]);
+ break;
+ case 3:
+ msg_Dbg( &sys.demuxer, "CallSS VMGM (pgc %d, rsm_cell %x)", (p_command[2] << 8) + p_command[3], p_command[4]);
+ break;
+ }
+ break;
+ }
+ case CMD_DVD_JUMP_SS:
+ {
+ msg_Dbg( &sys.demuxer, "JumpSS");
+ binary p_type;
+ switch( (p_command[5] & 0xC0) >> 6 ) {
+ case 0:
+ msg_Dbg( &sys.demuxer, "JumpSS FP");
+ break;
+ case 1:
+ p_type = p_command[5] & 0x0F;
+ switch ( p_type )
+ {
+ case 0x02:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Title Entry");
+ break;
+ case 0x03:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Root Menu");
+ break;
+ case 0x04:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Subpicture Menu");
+ break;
+ case 0x05:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Audio Menu");
+ break;
+ case 0x06:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Angle Menu");
+ break;
+ case 0x07:
+ msg_Dbg( &sys.demuxer, "JumpSS VMGM Chapter Menu");
+ break;
+ default:
+ msg_Dbg( &sys.demuxer, "JumpSS <unknown>");
+ break;
+ }
+ // find the VMG
+ p_chapter = sys.BrowseCodecPrivate( 1, MatchIsVMG, NULL, 0, p_segment );
+ if ( p_segment != NULL )
+ {
+ p_chapter = p_segment->BrowseCodecPrivate( 1, MatchPgcType, &p_type, 1 );
+ if ( p_chapter != NULL )
+ {
+ sys.JumpTo( *p_segment, p_chapter );
+ f_result = true;
+ }
+ }
+ break;
+ case 2:
+ p_type = p_command[5] & 0x0F;
+ switch ( p_type )
+ {
+ case 0x02:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Title Entry", p_command[4], p_command[3]);
+ break;
+ case 0x03:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Root Menu", p_command[4], p_command[3]);
+ break;
+ case 0x04:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Subpicture Menu", p_command[4], p_command[3]);
+ break;
+ case 0x05:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Audio Menu", p_command[4], p_command[3]);
+ break;
+ case 0x06:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Angle Menu", p_command[4], p_command[3]);
+ break;
+ case 0x07:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Chapter Menu", p_command[4], p_command[3]);
+ break;
+ default:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) <unknown>", p_command[4], p_command[3]);
+ break;
+ }
+
+ p_chapter = sys.BrowseCodecPrivate( 1, MatchVTSMNumber, &p_command[4], 1, p_segment );
+
+ if ( p_segment != NULL && p_chapter != NULL )
+ {
+ // find the title in the VTS
+ p_chapter = p_chapter->BrowseCodecPrivate( 1, MatchTitleNumber, &p_command[3], 1 );
+ if ( p_chapter != NULL )
+ {
+ // find the specified menu in the VTSM
+ p_chapter = p_segment->BrowseCodecPrivate( 1, MatchPgcType, &p_type, 1 );
+ if ( p_chapter != NULL )
+ {
+ sys.JumpTo( *p_segment, p_chapter );
+ f_result = true;
+ }
+ }
+ else
+ msg_Dbg( &sys.demuxer, "Title (%d) does not exist in this VTS", p_command[3] );
+ }
+ else
+ msg_Dbg( &sys.demuxer, "DVD Domain VTS (%d) not found", p_command[4] );