⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvd_app.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        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 + -