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

📄 metanav.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }
    return (METANAV_SUCCESS);
}

/**
 * Process commands.  Some commands may be processed by the metanav, while
 * others must be sent to the media specific navigator.
 *
 * @param command   - Command to be processed
 * @param ulInfo    - Information that goes with the command
 *
 * @return
 *      METANAV_SUCCESS if successful
 *      METANAV_FAILURE if unsuccessful
 */
METANAV_STATUS cMetaNav::CommandHandler(VDVD_COMMAND command, ULONG ulInfo)
{
    BOOLEAN fNavCommand = FALSE;

    /* Check that command is valid */
    if (command >= VDVD_COMMAND_MAX)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Invalid command\n"));
        return (METANAV_FAILURE);
    }

    /* Some commands can be processed by metanav */
    switch (command)
    {
    case VDVD_COMMAND_STANDBY:
        /*
         * Set a flag to signal that the standby command is being processed, that way we don't
         * try to start the nav right before going into standby.
         */
        if (m_fStandbyMode == FALSE)
        {
            m_fStandbyProcessing = TRUE;
        }

        /* Process command in metanav */
        if (SendLocalCommand( (ULONG)command, ulInfo, FALSE) != METANAV_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_STANDBY command\n"));
            return (METANAV_FAILURE);
        }
        break;

    case VDVD_COMMAND_VOL_UP:
    case VDVD_COMMAND_VOL_DOWN:
    case VDVD_COMMAND_VOL_MUTE:
    case VDVD_COMMAND_EJECT:
        /* Process command in metanav */
        if (SendLocalCommand( (ULONG)command, ulInfo, FALSE) != METANAV_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_EJECT command\n"));
            return (METANAV_FAILURE);
        }
        break;

    case VDVD_COMMAND_PLAY:
        if (m_MediaFormat == MEDIA_FORMAT_UNKNOWN)
        {
            /* The media format has not been detected yet so process the command in metanav.
             * Metanav will determine the format, and if autoplay it TRUE it will start the
             * appropriate navigator. */
            if (SendLocalCommand( (ULONG)command, m_fAutoPlay, FALSE) != METANAV_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_PLAY command\n"));
                return (METANAV_FAILURE);
            }
        }
        else
        {
            /* Set flag to send command to nav */
            fNavCommand = TRUE;
        }
        break;
    default:
        /* Set flag to send command to nav */
        fNavCommand = TRUE;
        break;
    }

    /*
     * If command should be processed by media specific nav, then send it
     * to the appropriate nav
     */
    if (fNavCommand)
    {
        /* Send command to the media specific nav */
        switch (m_MediaFormat)
        {
#ifdef MP3_ENABLE
        case MEDIA_FORMAT_URD:
            MP3ReceiveCommand( (ULONG)command, ulInfo);
            break;
#endif

#ifdef VCD_ENABLE
        case MEDIA_FORMAT_VCD:
        case MEDIA_FORMAT_SVCD:
            if (VcdAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending VCD command\n"));
                return (METANAV_FAILURE);
            }
            break;
#endif

        case MEDIA_FORMAT_DVD_A:
        case MEDIA_FORMAT_DVD_V:
            if (DvdAppCommandHandler( (ULONG)command, ulInfo) != DVDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending DVD command\n"));
                return (METANAV_FAILURE);
            }
            break;

#ifdef HDDVD_ENABLE
        case MEDIA_FORMAT_HDDVD_STANDARD:
            if (HDDVDAppCommandHandler( (ULONG)command, ulInfo) != HDDVDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending HD-DVD command\n"));
                return (METANAV_FAILURE);
            }
            break;
        case MEDIA_FORMAT_HDDVD_ADVANCED:
            if (HDDVDAppCommandHandler( (ULONG)command, ulInfo) != HDDVDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending HD-DVD command\n"));
                return (METANAV_FAILURE);
            }
            break;
#endif

#ifdef CDDA_ENABLE
        case MEDIA_FORMAT_CDDA:
            if (CddaAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending CDDA command\n"));
                return (METANAV_FAILURE);
            }
            break;
#endif

#ifdef BDROM_ENABLE
        case MEDIA_FORMAT_BDROM:
            if (BDROMAppCommandHandler( (ULONG)command, ulInfo) != BDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending BDROM command\n"));
                return (METANAV_FAILURE);
            }
            break;
#endif

#ifdef VR_ENABLE
        case MEDIA_FORMAT_VR:
            if (VRAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending VR command\n"));
                return (METANAV_FAILURE);
            }
            break;
#endif

        case MEDIA_FORMAT_UNKNOWN:
        default:
            DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: NO ACTIVE NAV!\n"));
            break;
        }
    }

    return (METANAV_SUCCESS);
}

/**
 * Set location to start from on resume from standby.
 *
 * @param
 *      pvLocation -- location handle
 *      ulSize -- size of location handle
 *
 * @retval
 *      none
 */
METANAV_STATUS cMetaNav::SetStandbyResumeLocation(PVOID pvLocation, ULONG ulSize)
{
    if (pvLocation == NULL)
    {
         DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::SetStandbyResumeLocation: Null location handle!\n"));
         return (METANAV_FAILURE);
    }

    if (ulSize > m_ulStandbyLocationSize)
    {
         DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::SetStandbyResumeLocation: Invalid location handle size!\n"));
         return (METANAV_FAILURE);
    }

    /* Copy location information into local location handle */
    m_fResumeOnStandbySet = TRUE;
    memcpy(m_pStandbyLocation, pvLocation, ulSize);

    return (METANAV_SUCCESS);
}

/**
 * Set mode to resume playback when coming out of standby.
 *
 * @param
 *      fOnOff -- If true, standby resume mode is turned on.
 *                If false, standby resume mode is turned off.
 *
 * @retval
 *      none
 */
void cMetaNav::SetStandbyResumeMode(BOOLEAN fOnOff)
{
    m_fResumeOnStandbyMode = fOnOff;
}

/**
 * Get setting for mode to resume playback when coming out of standby.
 *
 * @param
 *      none
 *
 * @retval
 *      If true, standby resume mode is turned on.
 *      If false, standby resume mode is turned off.
 */
BOOLEAN cMetaNav::GetStandbyResumeMode()
{
    return (m_fResumeOnStandbyMode);
}

/**
 * This API allows updating the player region (for testing purposes only).
 * Once this API has been called the player will use the new region code and will ignore
 * the default region code.
 *
 * The players default region is configurable by defining the following variables in
 * the make file or build environment. If these are not defined the player is hard coded
 * to be Region 1 for both DVD and Blu-Ray.
 *
 * Environment settings to override the hard coded region:
 *   add -D "SPRM_REGION_DEFAULT=X" - where X is the desired region for DVD
 *   add -D "PSR_REGION_DEFAULT=Y"  - where Y is the desired region for Blu-Ray
 *
 * @param DVD_SPRM_P_RCD - The new value to be stored in SPRM 20 (DVD Player Region Code)
 * @param BD_PSR_REGION  - The new value to be stored in PSR 20 (Blu-Ray Player Region Code)
 *
 * @retval
 *      METANAV_SUCCESS if successful
 *      METANAV_FAILURE if unsuccessful
 */
METANAV_STATUS cMetaNav::SetPlayerRegionCodes(UCHAR ucDvdRegionCode, UCHAR ucBdromRegionCode)
{
    /* store the dvd region code */
    switch (ucDvdRegionCode)
    {
    case METANAV_DVD_REGION_1:
    case METANAV_DVD_REGION_2:
    case METANAV_DVD_REGION_3:
    case METANAV_DVD_REGION_4:
    case METANAV_DVD_REGION_5:
    case METANAV_DVD_REGION_6:
    case METANAV_DVD_REGION_FREE:
        m_DVD_RegionCode = ucDvdRegionCode;
        break;
    default:
        /* region selection wasn't valid */
        DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: IGNORE INVALID DVD REGION SELECTION\n"));
        break;
    }

    /* store the blu-ray region code */
    switch (ucBdromRegionCode)
    {
    case METANAV_BDROM_REGION_A:
    case METANAV_BDROM_REGION_B:
    case METANAV_BDROM_REGION_C:
        m_BDROM_RegionCode = ucBdromRegionCode;
        break;
    default:
        /* region selection wasn't valid */
        DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: IGNORE INVALID BDROM REGION SELECTION\n"));
        break;
    }

    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        if (m_DVD_RegionCode != METANAV_USE_DEFAULT_REGION_CODE)
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET REGION CODE %d\n", m_DVD_RegionCode));
            DvdAppSetPlayerRegionCode(m_DVD_RegionCode);
        }
        else
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET DEFAULT REGION CODE\n"));
            DvdAppSetPlayerRegionCode(DVD_SPRM_REGION_DEFAULT);
        }
        break;

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        if (m_BDROM_RegionCode != METANAV_USE_DEFAULT_REGION_CODE)
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET REGION CODE %d\n", m_BDROM_RegionCode));
            BDROMAppSetPlayerRegionCode(m_BDROM_RegionCode);
        }
        else
        {
            DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET DEFAULT REGION CODE\n"));
            BDROMAppSetPlayerRegionCode(BDROM_PSR_REGION_DEFAULT);
        }
        break;
#endif

    default:
        /* other players do not have a region code */
        break;
    }

    return (METANAV_SUCCESS);
}

/**
 * Update the navigator with current menu language configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateMenuLanguage(void)
{
    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        DvdAppSetMenuLanguage(m_pConfigSettings->dvd_menu_language);
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        BDROMAppSetMenuLanguage(m_pConfigSettings->dvd_menu_language);
        break;
#endif
    default:
        break;
    }
}

/**
 * Update the navigator with current audio language configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateAudioLanguage(void)
{
    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        DvdAppSetAudioLanguage(m_pConfigSettings->audio_language);
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        BDROMAppSetAudioLanguage(m_pConfigSettings->audio_language);
        break;
#endif
    default:
        break;
    }
}

/**
 * Update the navigator with current subtitle language configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateSubtitleLanguage(void)
{
    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        DvdAppSetSubtitleLanguage(m_pConfigSettings->subtitle_language);
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        BDROMAppSetSubtitleLanguage(m_pConfigSettings->subtitle_language);
        break;
#endif
    default:
        break;
    }
}

/**
 * Update the navigator with current country code configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateCountryCode(void)
{
    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        DvdAppSetCountry(m_pConfigSettings->country);
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        BDROMAppSetCountryCode(m_pConfigSettings->country);
        break;
#endif
    default:
        break;
    }
}

/**
 * Update the navigator with current parental level configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateParentalLevel(void)
{
    /* Set system parameter in active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        /*
         * Check if parental protect setting is on.  If it is turned off then
         * set the parental level to off (value of 0).
         */
        if (m_pConfigSettings->parental_on_off == PARENTAL_OFF)

⌨️ 快捷键说明

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