📄 pgc_play.cpp
字号:
else
{
pgc_mode = PGC_POST_CMD;
}
pgc_play();
}
}
#if 0
BOOLEAN next_cell_play(void)
{
ULONG tt, ptt;
USHORT done = 0;
UBYTE retval;
if (++next_cell == pgc_pgmap[next_pgn])
{
next_pgn++;
for (tt = 0; (tt < ptt_srpti.vts_ttu_n) && !done; tt++)
{
for (ptt = 0; (ptt < ttu_srp_num[tt]) && !done; ptt++)
{
if ((ptt_srp[tt][ptt].pgcn == next_pgcn) && (ptt_srp[tt][ptt].pgn == next_pgn))
{
if (repeat_mode == REPEAT_PTT)
{
if (sprm[SPRM_PTTN_ONE_SEQ_PGC] != (ptt + 1))
{
ptt_search((USHORT) sprm[SPRM_PTTN_ONE_SEQ_PGC]);
return (FALSE);
}
}
else
{
set_sprm(SPRM_PTTN_ONE_SEQ_PGC, (USHORT) (ptt + 1));
set_sprm(SPRM_VTS_TTN_TT_DOM, (USHORT) (tt + 1));
}
done = 1;
}
}
}
/* update TTN */
for (ptt = 0; ptt < tt_srpti.tt_srp_n; ptt++)
{
if ((tt_srp[ptt].vtsn == next_vtsn) && (tt_srp[ptt].vts_ttn == tt))
{
if (repeat_mode == REPEAT_TT)
{
if (sprm[SPRM_TTN_TT_DOM] != (ptt + 1))
{
retval = title_play((UBYTE) sprm[SPRM_TTN_TT_DOM]);
if (retval)
{
#if LOADER_ERROR_RECOVER == TRUE
if ((0xff != retval) && !parental_prohibit)
{
disc_error_flag = 1;
}
#endif
pgc_mode = PGC_STOP;
}
pgc_play();
return (FALSE);
}
}
else
{
set_sprm(SPRM_TTN_TT_DOM, (USHORT) (ptt + 1));
break;
}
}
}
if ((tt_srp[get_sprm(SPRM_TTN_TT_DOM) - 1].tt_pb_ty & 0x40) /* One_Random_PGC_Title
* or Multi_PGC_Title */
#if CHAP_DISP_MODE == CHAP_DISP_1
&& (tt_srp[get_sprm(SPRM_TTN_TT_DOM) - 1].tt_pb_ty & 0x02) /* ptt search is
* prohibited */
#endif
)
{
time_info->chapter_valid = FALSE;
}
else
{
time_info->chapter_valid = TRUE;
}
if (!done)
{
time_info->chapter_valid = FALSE;
}
}
return (TRUE);
}
#endif
USHORT menu_play(UBYTE dest_domain_id, UBYTE mode)
{
UBYTE vts_ttn;
UBYTE vtsn;
UBYTE ttn;
UBYTE menu_id;
USHORT vmgm_pgcn = 0;
USHORT i;
USHORT retval = NAV_CONTINUE;
UBYTE ret = 0;
NAV_STATE tmp_nav_state;
i = 0;
if (dest_domain_id == VMGM_DOM)
{
if (vmgi_mat.vmgm_pgci_ut_sa)
{
menu_id = TITLE_MENU;
}
else
{
/* display "title menu not available, try MENU key" */
uop_prohibited_msg(0);
return (0);
}
}
else
{
tmp_nav_state = nav_state;
if (next_vtsn == 0)
{
i = 1;
next_vtsn = tt_srp[0].vtsn;
vts_ttn = tt_srp[0].vts_ttn;
next_vts_sa = tt_srp[0].vts_sa;
ret = get_vtsi_ifo(next_vts_sa);
if (ret != SUCCESS)
{
/* if there was a parse error retry */
if (ret == FAILURE)
{
int index;
/* find the index */
for (index = 0; index < tt_srpti.tt_srp_n && index < MAX_NUM_TT; index++)
{
if (tt_srp[index].vts_sa == next_vts_sa)
{
/* try new address found by readdir */
next_vts_sa = vts_file[tt_srp[index].vtsn - 1].ifo_address;
ret = get_vtsi_ifo(next_vts_sa);
break;
}
}
}
if (ret != SUCCESS)
{
nav_state = FULL_STOPPED;
return (0);
}
}
}
if (vtsi_mat.vtsm_pgci_ut_sa)
{
modify_video_mode = 0;
abort_drive_reset_channel();
menu_id = ROOT_MENU;
}
else
{
/* display "VTS menu not available, try TITLE key" */
uop_prohibited_msg(0);
nav_state = tmp_nav_state;
return (0);
}
}
if (1 == mode)
{
power_on_flag = 2;
}
nav_state = NORMAL_PLAYING;
if (0 == i)
{
modify_video_mode = 0;
abort_drive_reset_channel();
}
if (repeat_mode != REPEAT_OFF)
{
repeat_mode = REPEAT_OFF;
A_B_count = repeat_count = 0;
UsrSendRepeatEvent(VDVD_INFO_REPEAT_OFF);
}
if (pgc_domain == TT_PGC)
{
if (dest_domain_id == VMGM_DOM)
{
/* Select vmgm_pgcn based on parental, language and country code */
vmgm_pgcn = 0;
for (i = 0; i < vmgm_lui[lang_index].vmgm_pgci_srp_n; i++)
{
if ((vmgm_pgci_srp[lang_index][i].vmgm_pgc_cat[0] & 0x80) &&
(vmgm_pgci_srp[lang_index][i].vmgm_pgc_cat[0] & 0x02))
{
break;
}
}
if (i && (i != vmgm_lui[lang_index].vmgm_pgci_srp_n))
{
dest_domain_id = VMGM_DOM_PGCN;
vmgm_pgcn = i + 1;
}
}
retval = call_ss(dest_domain_id, menu_id, (UBYTE)(next_cell), vmgm_pgcn);
}
else
{
/*
* Select vtsn, vts_ttn and vmgm_pgcn based on parental, language and country code
*/
vmgm_pgcn = 0;
ttn = (UBYTE)(get_sprm(SPRM_TTN_TT_DOM));
vtsn = tt_srp[ttn - 1].vtsn;
vts_ttn = tt_srp[ttn - 1].vts_ttn;
retval = jump_ss(dest_domain_id, menu_id, vts_ttn, vtsn, vmgm_pgcn);
}
if (retval == NAV_PRE_CMD)
{
pgc_mode = PGC_PRE_CMD;
pgc_play();
if ( (nav_state != FULL_STOPPED) && (nav_state != STOPPED) )
{
return (1);
}
else
{
return (0);
}
}
else if (retval == NAV_STOP)
{
pgc_mode = PGC_STOP;
pgc_play();
return (0);
}
return (0);
} /* end of function menu_play() */
void pgc_still_expired(void)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("pgc_still_expired: ENTER\n"));
if (repeat_mode == REPEAT_OFF)
{
nav_state = NORMAL_PLAYING;
player_state = NORMAL_PLAY;
/* NO forcedly activated button */
if (!nvpck[CURRENT].hl_gi.foac_btnn)
{
if (playback_mode == PG_SEQUENTIAL)
{
pgc_mode = PGC_POST_CMD;
}
else
{
pgc_mode = PGC_LOOP_COUNT;
}
PEiStreamCtrlResume(tPE); /* unfreeze */
pgc_play();
}
else /* in repeat mode */
{
pgc_end_repeat();
}
}
}
void nv_tmr_expired(void)
{
USHORT nav_cmd;
DBGPRINT(DBG_ON(DBG_TRACE), ("nv_tmr_expired: ENTER\n"));
cell_still_expire = 0xffffffff;
abort_drive_reset_channel();
next_pgcn = get_sprm(SPRM_TT_PGCN_NV_TMR);
nav_cmd = get_pgc();
if (nav_cmd == NAV_PRE_CMD)
{
pgc_mode = PGC_PRE_CMD;
pgc_play();
}
}
void cell_still_expired(void)
{
UBYTE c_cmd = c_pbi[next_cell - 1].c_cat[3];
USHORT retval, i;
DBGPRINT(DBG_ON(DBG_TRACE), ("\n cell_still_expired()...\n"));
nav_state = NORMAL_PLAYING;
/* prevent the execution of cell commands during trick play */
if ( (player_state != FORWARD) && (player_state != REVERSE) )
{
player_state = NORMAL_PLAY;
if (0 != pgc_cmdti.c_cmd_n && c_cmd)
{
for (i = 0; i < SIZEOF_CMD; i++)
{
button_cmd_buff[0][i] = c_cmd_buff[c_cmd - 1][i];
}
if (!(retval = button_cell_cmd(CELL_CMD))) /* cell */
{
DBGPRINT(DEBUG_PGC_PLAY, ("\n cell_still_expired()...return 1\n"));
return;
}
}
}
if (playback_mode == PG_SEQUENTIAL) /* sequencal */
{
/* CELL_V1 */
if (next_cell == pgc_gi.pgc_cnt[3])
{
pgc_mode = PGC_POST_CMD;
DBGPRINT(DBG_ON(DBG_TRACE), ("\n cell_still_expired() - pgc_play(1)\n"));
pgc_play();
}
else
{
/* check for any repeat mode before do normal cell play */
retval = check_for_repeat();
if (retval == 0)
{
next_cell = next_cell_v1;
next_pgn = next_pgn_v1;
vob_init();
DBGPRINT(DBG_ON(DBG_TRACE), ("cell_still_expired: - cell_play, LINE=%d\n", __LINE__));
cell_play(1);
}
#if LOADER_ERROR_RECOVER == TRUE
else if ((0xff != retval) && !parental_prohibit)
{
disc_error_handle();
}
#endif
}
/******************/
}
else /* random/shuffle */
{
if ((pgc_pgmap[next_pgn] == (next_cell + 1)) || (pgc_gi.pgc_cnt[3] == next_cell))
{
pgc_mode = PGC_LOOP_COUNT;
vob_init();
DBGPRINT(DBG_ON(DBG_TRACE), ("cell_still_expired: - pgc_play, LINE=%d\n", __LINE__));
pgc_play();
}
else
{
/* CELL_V1 */
next_cell = next_cell_v1;
next_pgn = next_pgn_v1;
vob_init();
DBGPRINT(DBG_ON(DBG_TRACE), ("cell_still_expired: - cell_play, LINE=%d\n", __LINE__));
cell_play(1);
/*******************/
}
}
} /* end of function cell_still_expired */
void vobu_still_off(void)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("vobu_still_off: ENTER\n"));
nav_state = NORMAL_PLAYING;
player_state = NORMAL_PLAY;
during_search = 0;
/* unfreeze */
PEiStreamCtrlResume(tPE);
} /* end of function vobu_still_off() */
/************************************************************************/
/************************************************************************/
/** **/
/** procedure button_cell_cmd() **/
/** **/
/** PURPOSE: To perform a cell command. **/
/** **/
/************************************************************************/
/************************************************************************/
USHORT button_cell_cmd(UBYTE which_cmd)
{
USHORT nav_cmd;
USHORT retval = 1;
change_hl_forbidden = 0;
DBGPRINT(DBG_ON(DBG_TRACE), ("button_cell_cmd() --ENTER\n"));
nav_cmd = (dvd_cmd((UBYTE *) & button_cmd_buff[0][0], which_cmd) & 0xff00);
if (nav_cmd == NAV_STOP)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("button_cell_cmd() --NAV_STOP\n"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -