📄 dvd_app.cpp
字号:
if (WAIT_NEXT_CMD == 4)
{
WAIT_NEXT_CMD = 0;
}
break;
case PE_EVENT_ASYNC_PREFILL:
DBGPRINT(DBG_ON(DBG_TRACE), ("dvdPEEventCallback(): PE_EVENT_ASYNC_PREFILL\n"));
/* Put the PE in the Run state.
* NOTE: This must happen before we add our Subpic or Stream Demux */
PEiStreamCtrlRun(tPE);
/* hide the splash screen if it is being displayed */
/*PEiSplashScreenHide(tPE);*/
break;
case PE_EVENT_NVPCK:
DvdAppSendNavPack( ((PE_NVPCK_EVENT_INFO*)pEventInfo)->pDSIpayload,
((PE_NVPCK_EVENT_INFO*)pEventInfo)->pPCIpayload);
/* detect E_STD condition vob to vob transition */
if (last_vobu_mode != LAST_VOBU)
{
if ((nvpck[CURRENT].sml_pbi.vob_v_e_ptm == nvpck[CURRENT].pci_gi.vobu_e_ptm) && /* we are in the last vobu of a vob */
(0 == c_pbi[next_cell - 1].c_cat[2]) && /* no cell still */
(0 == (c_pbi[next_cell - 1].c_cat[1] & 0x40)) && /* no infinite vobu still */
(0x0a == (c_pbi[next_cell].c_cat[0] & 0x0a))) /* seamless playback && STC reset condition (in the next_cell) */
{
return (PE_EVNT_E_STD_ACTIVE);
}
}
break;
case PE_EVENT_DECODE_DONE:
DBGPRINT(DBG_ON(DBG_ALL), ("dvdPEEventCallback(): PE_EVENT_DECODE_DONE\n"));
/* send message to nav to be processed */
msg[0] = NAV_DEC_DONE;
if (OS_MsgQSend(queue_nav, (char *)&msg[0], NAV_MSG_SIZE, OS_WAIT_FOREVER, OS_MSG_PRI_NORMAL) != OS_OK)
{
DbgPrint(("\nOS_MsgQSend FAILURE, %s, %d\n\n", __FILE__, __LINE__));
}
break;
default:
DBGPRINT(DBG_ON(DBG_ERROR), ("%s, %d: Unknown PE event = %d\n", __FILE__, __LINE__, event));
break;
}
return (PE_SUCCESS);
}
/**
* Receives event callbacks from the DR.
*
* @param pContext - context pointer registered with the dr when the event handler is attached.
* @param event - enumerated event code (see dr_app.h)
* @param pEventInfo - pointer to buffer that can contain additional info depending on the event received.
*/
static DR_ERROR dvdDrEventCallback(PVOID context, DR_EVENT_CODE event, PVOID pvEventInfo)
{
ULONG msg[4];
if (event >= DR_EVENT_CODE_INVALID)
{
DBGPRINT(DVDAPP_DEBUG, ("%s, %d: DR_EVENT_CODE_INVALID\n", __FILE__, __LINE__));
return (DR_FAILURE);
}
if (fKillNavTasks == TRUE)
{
return (DR_SUCCESS);
}
switch (event)
{
case DR_EVENT_BUFFER_EMPTY:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_BUFFER_EMPTY\n"));
break;
case DR_EVENT_COMMAND_BUFFER_EMPTY:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_BUFFER_EMPTY\n"));
break;
case DR_EVENT_ERROR:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_ERROR\n"));
/* send error message to navtask */
msg[0] = DRIVE_ERROR;
msg[1] = 0x13;
OS_MsgQSend(queue_nav, (char *)&msg[0], NAV_MSG_SIZE, OS_NO_WAIT, OS_MSG_PRI_NORMAL);
/* notify app of error */
msg[0] = VDVD_STATUS_DISC_ERROR;
if (UsrEventHandler(msg) != USR_SUCCESS)
{
DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
}
break;
case DR_EVENT_COMMAND_ERROR:
switch ((ULONG)pvEventInfo)
{
case DR_ATTACH_LOADER:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_ATTACH_LOADER\n"));
break;
case DR_ATTACH_STREAM:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_ATTACH_STREAM\n"));
break;
case DR_ATTACH_EVENT:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_ATTACH_EVENT\n"));
break;
case DR_IDENTIFY_TYPE:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_IDENTIFY_TYPE\n"));
break;
case DR_DETACH_STREAM:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_DETACH_STREAM\n"));
break;
case DR_PLAY_BDROM:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_PLAY_BDROM\n"));
break;
case DR_PLAY_DVD:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_PLAY_DVD\n"));
break;
case DR_PLAY_CD:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_PLAY_CD\n"));
break;
case DR_STOP:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_STOP\n"));
break;
case DR_STOP_STREAM:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_STOP_STREAM\n"));
break;
case DR_SET_DVD_SPEED:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_SET_DVD_SPEED\n"));
break;
case DR_SET_DVD_ANGLE:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_SET_DVD_ANGLE\n"));
break;
case DR_SET_BDROM_ANGLE:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_SET_BDROM_ANGLE\n"));
break;
case DR_QUEUE_CONTROL:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_QUEUE_CONTROL\n"));
break;
case DR_RESET:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, DR_RESET\n"));
break;
default:
DBGPRINT(DBG_ON(DBG_TRACE), ("DR_EVENT_COMMAND_ERROR, UNSUPPORTED!!!\n"));
break;
}
break;
default:
DBGPRINT(DVDAPP_DEBUG, ("%s, %d: Unknown DR event = %d\n", __FILE__, __LINE__, event));
break;
}
return (DR_SUCCESS);
}
/**
* MapLanguageCode -- Map a language code to the corresponding language code
* defined in ISO 639-2.
*
* @param
* ucLangCode -- language code
*
* @retval
* corresponding language code defined in ISO 639-2, coded according to ISO 646
*/
static int MapLanguageCode(UCHAR ucLangCode)
{
int iso_langcode;
switch (ucLangCode)
{
case 1:
iso_langcode = 0x00656e67; /* English */
break;
case 2:
iso_langcode = 0x00667261; /* French */
break;
case 3:
iso_langcode = 0x00737061; /* Spanish */
break;
case 4:
iso_langcode = 0x00697461; /* Italian */
break;
case 5:
iso_langcode = 0x00676572; /* German */
break;
case 6:
iso_langcode = 0x00647574; /* Dutch */
break;
case 7:
iso_langcode = 0x00706f72; /* Portuguese */
break;
case 8:
iso_langcode = 0x00636869; /* Chinese */
break;
case 9:
iso_langcode = 0x006a706e; /* Japanese */
break;
case 10:
iso_langcode = 0x00746861; /* Thai */
break;
case 11:
iso_langcode = 0x00737665; /* Swedish */
break;
case 12:
iso_langcode = 0x006e6f72; /* Norwegain */
break;
case 13:
iso_langcode = 0x0064616e; /* Danish */
break;
case 14:
iso_langcode = 0x0066696e; /* Finnish */
break;
case 15:
iso_langcode = 0x00686562; /* Hebrew */
break;
case 17:
iso_langcode = 0x00616172; /* Afar */
break;
case 18:
iso_langcode = 0x0061626b; /* Abkhazian */
break;
case 19:
iso_langcode = 0x00616672; /* Afrikaans */
break;
case 20:
iso_langcode = 0x00617261; /* Arabic */
break;
case 22:
iso_langcode = 0x0061736d; /* Assamese */
break;
case 23:
iso_langcode = 0x0061796d; /* Aymara */
break;
case 24:
iso_langcode = 0x00617a65; /* Azebraijani */
break;
case 25:
iso_langcode = 0x0062616b; /* Bashkir */
break;
case 26:
iso_langcode = 0x0062656c; /* Byelorussian */
break;
case 27:
iso_langcode = 0x0062756c; /* Bulgarian */
break;
case 28:
iso_langcode = 0x00626968; /* Bihari */
break;
case 29:
iso_langcode = 0x00626973; /* Bislama */
break;
case 30:
iso_langcode = 0x0062656e; /* Bengali */
break;
case 31:
iso_langcode = 0x00746962; /* Tibetan */
break;
case 32:
iso_langcode = 0x00627265; /* Breton */
break;
case 33:
iso_langcode = 0x00636174; /* Catalan */
break;
case 34:
iso_langcode = 0x00636f73; /* Corsican */
break;
case 35:
iso_langcode = 0x00636573; /* Czech */
break;
case 36:
iso_langcode = 0x0063796d; /* Welsh */
break;
case 38:
iso_langcode = 0x00656c6c; /* Greek */
break;
case 39:
iso_langcode = 0x0065706f; /* Esperanto */
break;
case 40:
iso_langcode = 0x00657374; /* Estonian */
break;
case 41:
iso_langcode = 0x00657573; /* Basque */
break;
case 42:
iso_langcode = 0x00666173; /* Persian */
break;
case 43:
iso_langcode = 0x0066696a; /* Fiji */
break;
case 44:
iso_langcode = 0x0066616f; /* Faeroese */
break;
case 45:
iso_langcode = 0x00667279; /* Frisian */
break;
case 46:
iso_langcode = 0x00676169; /* Irish */
break;
case 47:
iso_langcode = 0x00676165; /* Scots Gaelic */
break;
case 48:
iso_langcode = 0x00676c67; /* Gallegan */
break;
case 49:
iso_langcode = 0x0067726e; /* Guarani */
break;
case 50:
iso_langcode = 0x0067756a; /* Gujarati */
break;
case 51:
iso_langcode = 0x00686175; /* Hausa */
break;
case 52:
iso_langcode = 0x0068696e; /* Hindi */
break;
case 54:
iso_langcode = 0x0068756e; /* Hungarian */
break;
case 55:
iso_langcode = 0x00687965; /* Armenian */
break;
case 56:
iso_langcode = 0x00696e61; /* Interlingua */
break;
case 57:
iso_langcode = 0x00696e65; /* Interlingue */
break;
case 58:
iso_langcode = 0x0069706b; /* Inupiak */
break;
case 59:
iso_langcode = 0x00696e64; /* Indonesian */
break;
case 60:
iso_langcode = 0x00696365; /* Icelandic */
break;
case 61:
iso_langcode = 0x00796964; /* Yiddish */
break;
case 62:
iso_langcode = 0x006a6177; /* Javanese */
break;
case 63:
iso_langcode = 0x006b6174; /* Georgian */
break;
case 64:
iso_langcode = 0x006b617a; /* Kazakh */
break;
case 65:
iso_langcode = 0x006b616c; /* Greenlandic */
break;
case 67:
iso_langcode = 0x006b616e; /* Kannada */
break;
case 68:
iso_langcode = 0x006b6f72; /* Korean */
break;
case 69:
iso_langcode = 0x006b6173; /* Kashmiri */
break;
case 70:
iso_langcode = 0x006b7572; /* Kurdish */
break;
case 71:
iso_langcode = 0x006b7972; /* Kirghiz */
break;
case 72:
iso_langcode = 0x006c6174; /* Latin */
break;
case 73:
iso_langcode = 0x006c696e; /* Lingala */
break;
case 74:
iso_langcode = 0x006c616f; /* Lao */
break;
case 75:
iso_langcode = 0x006c6974; /* Lithuanian */
break;
case 76:
iso_langcode = 0x006c6176; /* Latvian */
break;
case 77:
iso_langcode = 0x006d6c67; /* Malagasy */
break;
case 78:
iso_langcode = 0x006d616f; /* Maori */
break;
case 79:
iso_langcode = 0x006d616b; /* Macedonian */
break;
case 80:
iso_langcode = 0x006d616c; /* Malayalam */
break;
case 81:
iso_langcode = 0x006d6f6e; /* Mongolian */
break;
case 82:
iso_langcode = 0x006d6f6c; /* Moldavian */
break;
case 83:
iso_langcode = 0x006d6172; /* Marathi */
break;
case 84:
iso_langcode = 0x006d6179; /* Malay */
break;
case 85:
iso_langcode = 0x006d6c74; /* Maltese */
break;
case 86:
iso_langcode = 0x006d7961; /* Burmese */
break;
case 87:
iso_langcode = 0x006e6175; /* Nauru */
break;
case 88:
iso_langcode = 0x006e6570; /* Nepali */
break;
case 90:
iso_langcode = 0x006f726d; /* Oromo */
break;
case 91:
iso_langcode = 0x006f7269; /* Oriya */
break;
case 92:
iso_langcode = 0x0070616e; /* Panjabi */
break;
case 93:
iso_langcode = 0x00706f6c; /* Polish */
break;
case 94:
iso_langcode = 0x00707573; /* Pashto */
break;
case 95:
iso_langcode = 0x00706f72; /* Potuguese */
break;
case 96:
iso_langcode = 0x00717565; /* Quechua */
break;
case 97:
iso_langcode = 0x00726f68; /* Rhaeto-Romance */
break;
case 99:
iso_langcode = 0x00726f6e; /* Romanian */
break;
case 100:
iso_langcode = 0x00727573; /* Russian */
break;
case 101:
iso_langcode = 0x006b696e; /* Kinyarwanda */
break;
case 102:
iso_langcode = 0x0073616e; /* Sanskrit */
break;
case 103:
iso_langcode = 0x00736e64; /* Sindhi */
break;
case 104:
iso_langcode = 0x00736167; /* Sango */
break;
case 105:
iso_langcode = 0x00736372; /* Serbo-Croatian */
break;
case 106:
iso_langcode = 0x0073696e; /* Singhalese */
break;
case 107:
iso_langcode = 0x00736c6b; /* Slovak */
break;
case 108:
iso_langcode = 0x00736c6b; /* Slovenian */
break;
case 109:
iso_langcode = 0x00736d6f; /* Samoan */
break;
case 110:
iso_langcode = 0x00736e61; /* Shona */
break;
case 111:
iso_langcode = 0x00736f6d; /* Somali */
break;
case 112:
iso_langcode = 0x00737169; /* Albanian */
break;
case 114:
iso_langcode = 0x00737377; /* Siswant */
break;
case 116:
iso_langcode = 0x0073756e; /* Sudanese */
break;
case 117:
iso_langcode = 0x00737761; /* Swahili */
break;
case 118:
iso_langcode = 0x0074616d; /* Tamil */
break;
case 119:
iso_langcode = 0x0074656c; /* Telugu */
break;
case 120:
iso_langcode = 0x0074676b; /* Tajik */
break;
case 121:
iso_langcode = 0x00746972; /* Tigrinya */
break;
case 122:
iso_langcode = 0x0074756b; /* Turkmen */
break;
case 123:
iso_langcode = 0x0074676c; /* Tagalog */
break;
case 125:
iso_langcode = 0x00746f67; /* Tonga */
break;
case 126:
iso_langcode = 0x00747572; /* Turkish */
break;
case 127:
iso_langcode = 0x0074736f; /* Tsonga */
break;
case 128:
iso_langcode = 0x00746174; /* Tatar */
break;
case 129:
iso_langcode = 0x00747769; /* Twi */
break;
case 130:
iso_langcode = 0x00756b72; /* Ukrainian */
break;
case 131:
iso_langcode = 0x00757264; /* Urdu */
break;
case 132:
iso_langcode = 0x00757a62; /* Uzbek */
break;
case 133:
iso_langcode = 0x00766965; /* Vietnamese */
break;
case 134:
iso_langcode = 0x00766f; /* Volapuk */
break;
case 135:
iso_langcode = 0x00776f6c; /* Wolof */
break;
case 136:
iso_langcode = 0x0078686f; /* Xhosa */
break;
case 137:
iso_langcode = 0x00796f72; /* Yoruba */
break;
case 138:
iso_langcode = 0x007a756c; /* Zulu */
break;
default:
iso_langcode = 0;
break;
}
return (iso_langcode);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -