📄 hw_init.c
字号:
/************************************************************************/
/************************************************************************/
/** **/
/************************************************************************/
/************************************************************************/
void start_dvd(UBYTE still_val, UBYTE spstn, UBYTE *sp_plt, UBYTE astn, UBYTE *a_atr, UBYTE *v_atr)
{
PE_ISTREAMCTRL_AUDIO_ATTRIBUTES audio_attributes;
PE_ISTREAMCTRL_STATE tPEState;
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd()\n"));
/* Get the PE run state */
PEiStreamCtrlGetState(tPE, &tPEState);
/* If PE is not stopped, do it now. Video demux cannot be configure while running. */
if (tPEState == PE_ISTREAMCTRL_STATE_RUN)
{
/* stop the decoder */
PEiStreamCtrlStop(tPE, TRUE);
}
/* stop spu decode */
stop_spu();
/* Disable SPU processing */
spu_set_id(0);
/* initialize the SPU palette */
PEiConfigureSetSubPicPalette(tPE, (PE_ICONFIGURE_SPU_PALETTE*)sp_plt, 48);
/* Start SPU processing if available */
if (spstn & SPU_STREAM_AVAILABLE)
{
/* enable SPU stream processing and set SPU stream number */
spu_set_id( (UCHAR)(spstn | SPU_SUBSTREAM_ID) );
/* start the SPU decoder just after channel reset */
pause_spu();
}
/* re-config video mode if it has changed */
if ( ((video_mode[0]) != (v_atr[0]) ) ||
((video_mode[1] & 0x3c) != (v_atr[1] & 0x3c) ) ||
TV_Type_Changed )
{
/* updated video mode */
TV_Type_Changed = 0;
temp_video_mode[0] = v_atr[0];
temp_video_mode[1] = v_atr[1];
modify_video_mode = 1;
switch (v_atr[0] & VIDEO_COMPRESSION)
{
case MPEG_1_COMPLIENT:
if (PEiStreamCtrlDemuxAddVideoPS(tPE, VIDEO_PES_ID, INPUT_MAIN, VIDEO_TYPE_MPEG1) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddVideoPS FAILED\n", __FILE__, __LINE__));
}
break;
case MPEG_2_COMPLIENT:
if (PEiStreamCtrlDemuxAddVideoPS(tPE, VIDEO_PES_ID, INPUT_MAIN, VIDEO_TYPE_MPEG2) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddVideoPS FAILED\n", __FILE__, __LINE__));
}
break;
}
switch (v_atr[1] & PICTURE_RESOLUTION)
{
case RESOLUTION_0:
if ( (v_atr[0] & TV_SYSTEM) == TV_525_60 )
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 720x480\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 480);
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 720x576\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 576);
}
break;
case RESOLUTION_1:
if ( (v_atr[0] & TV_SYSTEM) == TV_525_60 )
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 704x480\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 480); /* 704 x 480 */
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 704x576\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 576); /* 704 x 576 */
}
break;
case RESOLUTION_2:
if ( (v_atr[0] & TV_SYSTEM) == TV_525_60 )
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 352x480\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 480); /* 352 x 480 */
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 352x576\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 576); /* 352 x 576 */
}
break;
case RESOLUTION_3:
if ( (v_atr[0] & TV_SYSTEM) == TV_525_60 )
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 352x240\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 480); /* 352 x 240 */
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("start_dvd: 352x288\n"));
PEiStreamCtrlSetVideoSrcResolution(tPE, 720, 576); /* 352 x 288 */
}
break;
default:
DbgPrint(("start_dvd: Invalid PICTURE_RESOLUTION\n"));
break;
}
}
if (nav_state != FAST_FORWARD)
{
if (pgc_domain == TT_PGC)
{
nav_state = NORMAL_PLAYING;
}
}
highlight_expire = cell_still_expire = button_sl_expire = pgc_still_expire = 0xffffffff;
num_of_times = vobu_button_hl = 0;
/* setup the audio demux here based on the astn (audio stream number (PID)) and the audio format */
switch (a_atr[0] & AUDIO_CODING)
{
case AC_3_CODING:
/* parse the audio attributes info from the vmgi_mat */
get_audio_attributes(&audio_attributes);
/* configure for AC3 audio */
if (PEiStreamCtrlDemuxAddAudioPS(tPE, PRIVATE_STREAM_1, (AC3_SUB_ID | astn), INPUT_MAIN, AUDIO_TYPE_AC3, &audio_attributes) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddAudioPS FAILED\n", __FILE__, __LINE__));
}
break;
case MPEG_1_2_CODING:
/* parse the audio attributes info from the vmgi_mat */
get_audio_attributes(&audio_attributes);
/* configure for MPEG audio */
if (PEiStreamCtrlDemuxAddAudioPS(tPE, (MPEG_1_2_AUDIO_PES_ID | astn), NO_SUB_ID, INPUT_MAIN, AUDIO_TYPE_MPEG1, &audio_attributes) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddAudioPS FAILED\n", __FILE__, __LINE__));
}
break;
case LINEAR_PCM_AUDIO:
/* parse the audio attributes info from the vmgi_mat */
get_audio_attributes(&audio_attributes);
/* configure for LPCM */
if (PEiStreamCtrlDemuxAddAudioPS(tPE, PRIVATE_STREAM_1, (PCM_SUB_ID | astn), INPUT_MAIN, AUDIO_TYPE_PCM, &audio_attributes) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddAudioPS FAILED\n", __FILE__, __LINE__));
}
break;
case DTS_AUDIO:
/* parse the audio attributes info from the vmgi_mat */
get_audio_attributes(&audio_attributes);
/* configure for DTS audio */
if (PEiStreamCtrlDemuxAddAudioPS(tPE, PRIVATE_STREAM_1, DTS_SUB_ID | astn, INPUT_MAIN, AUDIO_TYPE_DTS, &audio_attributes) != PE_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("%s:%u - PEiStreamCtrlDemuxAddAudioPS FAILED\n", __FILE__, __LINE__));
}
break;
default:
DBGPRINT(DBG_ON(DBG_ERROR), ("%s: ERROR: Audio decoding mode is not supported.\n", __FUNCTION__));
break;
}
play_ni();
}
void dvd(void)
{
WAIT_NEXT_CMD = 0;
if (DISK_TYPE == 0)
{
P_H_SIZE = 720; /* Horizontal Size = 720 */
P_V_SIZE = 480; /* Vertical Size = 480 */
}
else
{
P_H_SIZE = 720; /* Horizontal Size = 720 */
P_V_SIZE = 576; /* Vertical Size = 576 */
}
audio_mode[0] = 0xFF;
audio_mode[1] = 0xFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -