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

📄 eventmgr.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    }
    else
    {
        UOCTRL_STATUS   tUOCtrlStatus   = UOCTRL_SUCCESS;
        MODMGR_STATUS   tModMgrStatus   = MODMGR_SUCCESS;

        /* Map user event to User Operation procedure */
        ulStatusEvent[0] = VDVD_STATUS_MAX;
        switch (cmd)
        {
        case MODMGR_MENUCALL:
            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_PLAY;
            ulStatusEvent[1] = VDVD_COMMAND_MENU;

            tModMgrStatus = ModMgrUOPMenuCall();
            break;
        case MODMGR_TITLESEARCH:
            tModMgrStatus = ModMgrUOPTitleSearch(ulParam);
            break;
        case MODMGR_PLAY:
            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_PLAY;

            tModMgrStatus = ModMgrUOPPlay();
            break;
        case MODMGR_PLAYLOCATION:
            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_PLAY;

            tModMgrStatus = ModMgrUOPPlayLocation((PVOID)ulParam);
            break;
        case MODMGR_STOP:
            /* always do a full-stop for BD-J */
            if (pStateInfo->tState == MODMGR_STATE_HOLD)
            {
                /* set status info */
                ulStatusEvent[1] = 1; // full-stop
            }
#ifdef VDVD_ENABLE_BDJ
            /* always do a full-stop for BD-J */
            else if ((pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_MOVIE) ||
		        (pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_INTERACTIVE))
            {
                pStateInfo->tState = MODMGR_STATE_HOLD;

                /* set status info */
                ulStatusEvent[1] = 1; // full-stop
            }
#endif
            else
            {
                uint32 uiTitle;

                /* Get status register for title number */
                PlayCtrlGetPSR(PLAYCTRL_PSR_TITLE, &uiTitle);
                uiTitle &= 0x0000ffff;

                /*
                 * If we are in the top menu, do a full stop.
                 * Otherwise, do a single stop.
                 */
                if (uiTitle == 0)
                {
                    /* Send "no resume" status event */
                    ulStatusEvent[0] = VDVD_STATUS_PROHIBITED;
                    ulStatusEvent[1] = VDVD_INFO_PROH_NO_RESUME;
                    if (UsrEventHandler(ulStatusEvent) != USR_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("eventmgrGenerateUO: failed to send 'no resume' status event!\n"));
                    }

                    /* set status info */
                    ulStatusEvent[1] = 1; // full-stop
                }
                else
                {
                    /* set status info */
                    ulStatusEvent[1] = 0; // single-stop
                }
            }

            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_STOP;

            tModMgrStatus = ModMgrUOPStop( (BOOLEAN)(ulParam & VDVD_STOP_MODE_FORCED) );
            break;
        case MODMGR_RESUME:
            tModMgrStatus = ModMgrUOPResume();
            break;
        case MODMGR_CHAPTERSEARCH:
            tUOCtrlStatus = UOCtrlChapterSearch(ulParam);
            break;
        case MODMGR_TIMESEARCH:
            tUOCtrlStatus = UOCtrlTimeSearch(ulParam);
            break;
        case MODMGR_SKIPTONEXTPOINT:
            /* Set status event type (depends on movie/interactive title */
            if (pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE)
            {
                ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
            }
            else
            {
                ulStatusEvent[0] = VDVD_STATUS_SKIP_NEXT;
            }

            tUOCtrlStatus = UOCtrlSkipToNextPoint( (uint32 *)&ulStatusEvent[1] );
            ulStatusEvent[1]++; // chapter number = entry-mark id + 1
            break;
        case MODMGR_SKIPTOPREVPOINT:
            /* Set status event type (depends on movie/interactive title */
            if (pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE)
            {
                ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
            }
            else
            {
                ulStatusEvent[0] = VDVD_STATUS_SKIP_PREV;
            }

            tUOCtrlStatus = UOCtrlSkipToPrevPoint( (uint32 *)&ulStatusEvent[1] );
            ulStatusEvent[1]++; // chapter number = entry-mark id + 1
            break;
        case MODMGR_RESTARTPOINT:
            /* Set status event type (depends on movie/interactive title) */
            if ((pStateInfo->tActiveTitle == MODMGR_TITLE_HDMV_MOVIE) ||
                (pStateInfo->tActiveTitle == MODMGR_TITLE_BDJ_MOVIE))
            {
                ulStatusEvent[0] = VDVD_STATUS_CHAPTER_SKIP;
            }
            else
            {
                ulStatusEvent[0] = VDVD_STATUS_SKIP_PREV;
            }

            tUOCtrlStatus = UOCtrlRestartPoint( (uint32 *)&ulStatusEvent[1] );
            ulStatusEvent[1]++; // chapter number = entry-mark id + 1
            break;
        case MODMGR_PAUSEON:
            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_PAUSE;

            tUOCtrlStatus = UOCtrlPauseOn();
            break;
        case MODMGR_PAUSEOFF:
            /* Set status event type */
            ulStatusEvent[0] = VDVD_STATUS_PLAY;

            tUOCtrlStatus = UOCtrlPauseOff();
            break;
        case MODMGR_STILLOFF:
            tUOCtrlStatus = UOCtrlStillOff();
            break;
        case MODMGR_FORWARDPLAY:
            QAPrintOutput2(ulParam, "SPEED"); /* for qa automation */
            /* Set status event type */
            if (ulParam == 0)
            {
                /* Set status event type */
                ulStatusEvent[0] = VDVD_STATUS_PAUSE;

                /* Send request to UO Controller */
                tUOCtrlStatus = UOCtrlPauseOn();
            }
            else
            {
                /* Set status event type */
                if (ulParam == 1)
                {
                    ulStatusEvent[0] = VDVD_STATUS_STEP;
                }
                else if (ulParam < 1000)
                {
                    ulStatusEvent[0] = VDVD_STATUS_SLOW_F;
                }
                else if (ulParam > 1000)
                {
                    ulStatusEvent[0] = VDVD_STATUS_FAST_F;
                }
                else
                {
                    if (PlayCtrlGetPlayRate() != 1000)
                    {
                        ulStatusEvent[0] = VDVD_STATUS_PLAY;
                    }
                }

                /* Send request to UO Controller */
                tUOCtrlStatus = UOCtrlForwardPlay(ulParam);
            }
            ulStatusEvent[1] = ulParam;
            break;
        case MODMGR_BACKWARDPLAY:
            QAPrintOutput2(ulParam, "SPEED"); /* for qa automation */
            /* Set status event type */
            if (ulParam < 1000)
            {
                ulStatusEvent[0] = VDVD_STATUS_SLOW_B;
            }
            else
            {
                ulStatusEvent[0] = VDVD_STATUS_FAST_B;
            }
            ulStatusEvent[1] = ulParam;
            tUOCtrlStatus = UOCtrlBackwardPlay(ulParam);
            break;
        case MODMGR_MOVEUPSELECTEDBUTTON:
            tUOCtrlStatus = UOCtrlMoveUpSelectedButton();
            break;
        case MODMGR_MOVEDOWNSELECTEDBUTTON:
            tUOCtrlStatus = UOCtrlMoveDownSelectedButton();
            break;
        case MODMGR_MOVELEFTSELECTEDBUTTON:
            tUOCtrlStatus = UOCtrlMoveLeftSelectedButton();
            break;
        case MODMGR_MOVERIGHTSELECTEDBUTTON:
            tUOCtrlStatus = UOCtrlMoveRightSelectedButton();
            break;
        case MODMGR_SELECTBUTTON:
            tUOCtrlStatus = UOCtrlSelectButton(ulParam);
            break;
        case MODMGR_ACTIVATEBUTTON:
            tUOCtrlStatus = UOCtrlActivateButton();
            break;
        case MODMGR_SELECTANDACTIVATEBUTTON:
            tUOCtrlStatus = UOCtrlSelectAndActivateButton(ulParam);
            break;
        case MODMGR_AUDIOCHANGE:
            tUOCtrlStatus = UOCtrlPrimaryAudioChange(ulParam);
            break;
        case MODMGR_PGANDSTCHANGE:
            tUOCtrlStatus = UOCtrlPGandSTChange(ulParam);
            break;
        case MODMGR_PGANDSTENABLE:
            tUOCtrlStatus = UOCtrlPGandSTEnable( (BOOLEAN)(ulParam) );
            break;
        case MODMGR_ANGLECHANGE:
            tUOCtrlStatus = UOCtrlAngleChange(ulParam);
            break;
        case MODMGR_POPUPON:
            tUOCtrlStatus = UOCtrlPopUpOn();
            break;
        case MODMGR_POPUPOFF:
            tUOCtrlStatus = UOCtrlPopUpOff();
            break;
        case MODMGR_TEXTSUBTITLESTYLECHANGE:
            tUOCtrlStatus = UOCtrlTextSubtitleStyleChange( (uint8)(ulParam) );
            break;
        case MODMGR_REPEAT:
            ulStatusEvent[0] = VDVD_STATUS_REPEAT;
            ulStatusEvent[1] = ulParam;
            if (ulParam == VDVD_INFO_REPEAT_TITLE)
            {
                /* turn repeat chapter/ab off and repeat title on */
                UOCtrlRepeat(VDVD_INFO_REPEAT_OFF);
                tModMgrStatus = ModMgrUOPRepeatTitle(TRUE);
            }
            else if (ulParam == VDVD_INFO_REPEAT_OFF)
            {
                /* turn repeat title off and repeat chapter/ab off */
                ModMgrUOPRepeatTitle(FALSE);
                UOCtrlRepeat(VDVD_INFO_REPEAT_OFF);
            }
            else
            {
                /* turn repeat title off and pass repeat chapter/ab/off to pbc engine */
                ModMgrUOPRepeatTitle(FALSE);
                tUOCtrlStatus = UOCtrlRepeat( (uint8)(ulParam) );
            }
            break;
        default:
            DBGPRINT(DBG_ON(DBG_TRACE), ("eventmgrGenerateUO: UO does not exist!\n"));
            tUOCtrlStatus = UOCTRL_FAILURE;
            tModMgrStatus = MODMGR_FAILURE;
            break;
        }

        /*
         * Evaluate return status from user operation.
         * If UO was successful, send the appropriate status event.
         * If UO was prohibited, send a Prohibited status event.
         */
        if ( (tUOCtrlStatus == UOCTRL_SUCCESS) && (tModMgrStatus == MODMGR_SUCCESS) )
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("eventmgrGenerateUO: UO processed successfully\n"));

            /* If status event type was set, then send the status event */
            if (ulStatusEvent[0] != VDVD_STATUS_MAX)
            {
                /* Send status event */
                if (UsrEventHandler(ulStatusEvent) != USR_SUCCESS)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -