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

📄 metanav.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        {
            DvdAppSetParentalLevel(0);
        }
        else
        {
            DvdAppSetParentalLevel(m_pConfigSettings->parental);
        }
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        /*
         * Check if parental protect setting is on.  If it is turned off then
         * just set the parental level to least restrictive (value of 255).
         */
        if (m_pConfigSettings->parental_on_off == PARENTAL_OFF)
        {
            BDROMAppSetParentalLevel(255);
        }
        else
        {
            BDROMAppSetParentalLevel(m_pConfigSettings->parental);
        }
        break;
#endif
    default:
        break;
    }
}

/**
 * Update the navigator with current aspect ratio configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateTvType(void)
{
    PE_ICONFIGURE_ASPECT_RATIO aspect_ratio;

    if (m_pConfigSettings != NULL)
    {
        switch (m_pConfigSettings->tv_type)
        {
        case VDVD_ASPECT_RATIO_4X3_PANSCAN:
            aspect_ratio = ASPECT_RATIO_4X3_PANSCAN;
            break;
        case VDVD_ASPECT_RATIO_4X3_LETTERBOX:
            aspect_ratio = ASPECT_RATIO_4X3_LETTERBOX;
            break;
        case VDVD_ASPECT_RATIO_4X3_LETTERBOX_REMOVED:
            aspect_ratio = ASPECT_RATIO_4X3_LETTERBOX_REMOVED;
            break;
        case VDVD_ASPECT_RATIO_16X9:
            aspect_ratio = ASPECT_RATIO_16X9;
            break;
        case VDVD_ASPECT_RATIO_16X9_WINDOWBOX:
            aspect_ratio = ASPECT_RATIO_16X9_WINDOWBOX;
            break;
        default:
            aspect_ratio = ASPECT_RATIO_16X9;
            break;
        }

        /* DVD does not support 16X9 window box */
        if ( (m_MediaFormat == MEDIA_FORMAT_DVD_A) || (m_MediaFormat == MEDIA_FORMAT_DVD_V) )
        {
            if (aspect_ratio == ASPECT_RATIO_16X9_WINDOWBOX)
            {
                aspect_ratio = ASPECT_RATIO_16X9;
            }
        }

        /*
         * Set aspect ratio
         */
        PEiConfigureSetAspectRatio(m_PE, aspect_ratio);

        /* Set system parameter in active nav */
        switch (m_MediaFormat)
        {
        case MEDIA_FORMAT_DVD_A:
        case MEDIA_FORMAT_DVD_V:
            DvdAppSetAspectRatio(aspect_ratio);
            break;

#ifdef VCD_ENABLE
        case MEDIA_FORMAT_VCD:
        case MEDIA_FORMAT_SVCD:
            VcdAppSetAspectRatio(aspect_ratio);
            break;
#endif

#ifdef BDROM_ENABLE
        case MEDIA_FORMAT_BDROM:
            BDROMAppSetAspectRatio((VDVD_ASPECT_RATIO)m_pConfigSettings->tv_type);
            break;
#endif
        default:
            break;
        }
    }
}

/**
 * Update the navigator with current video format configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateVideoFormat(void)
{
    PE_ICONFIGURE_VIDEO_FORMAT vidFormat;

    if (m_pConfigSettings != NULL)
    {
        switch (m_pConfigSettings->video_format)
        {
        case VDVD_VIDEO_FORMAT_NTSC:
            vidFormat = VIDEO_FORMAT_NTSC;
            break;
        case VDVD_VIDEO_FORMAT_480P:
            vidFormat = VIDEO_FORMAT_480P;
            break;
        case VDVD_VIDEO_FORMAT_576P:
            vidFormat = VIDEO_FORMAT_576P;
            break;
        case VDVD_VIDEO_FORMAT_720P_59_94:
            vidFormat = VIDEO_FORMAT_720P_59_94;
            break;
        case VDVD_VIDEO_FORMAT_720P_50:
            vidFormat = VIDEO_FORMAT_720P_50;
            break;
        case VDVD_VIDEO_FORMAT_720P_24:
            vidFormat = VIDEO_FORMAT_720P_24;
            break;
        case VDVD_VIDEO_FORMAT_720P_23_976:
            vidFormat = VIDEO_FORMAT_720P_23_976;
            break;
        case VDVD_VIDEO_FORMAT_1080I_29_97:
            vidFormat = VIDEO_FORMAT_1080I_29_97;
            break;
        case VDVD_VIDEO_FORMAT_1080I_25:
            vidFormat = VIDEO_FORMAT_1080I_25;
            break;
        case VDVD_VIDEO_FORMAT_1080P_24:
            vidFormat = VIDEO_FORMAT_1080P_24;
            break;
        case VDVD_VIDEO_FORMAT_1080P_23_976:
            vidFormat = VIDEO_FORMAT_1080P_23_976;
            break;
        case VDVD_VIDEO_FORMAT_PAL:
            vidFormat = VIDEO_FORMAT_PAL;
            break;
        default:
            vidFormat = VIDEO_FORMAT_NTSC;
            break;
        }

        /*
         * Set video format
         */
        ChangeVideoOutput((VDVD_VIDEO_FORMAT)m_pConfigSettings->video_format);

        /* Set system parameter in active nav */
        switch (m_MediaFormat)
        {
        case MEDIA_FORMAT_DVD_A:
        case MEDIA_FORMAT_DVD_V:
            DvdAppSetVideoFormat(vidFormat);
            break;

#ifdef VCD_ENABLE
        case MEDIA_FORMAT_VCD:
        case MEDIA_FORMAT_SVCD:
            VcdAppSetVideoFormat(vidFormat);
            break;
#endif

#ifdef BDROM_ENABLE
        case MEDIA_FORMAT_BDROM:
            BDROMAppSetVideoFormat((VDVD_VIDEO_FORMAT)m_pConfigSettings->video_format);
            break;
#endif
        default:
            break;
        }
    }
}

/**
 * Update the navigator with current spdif configuration setting.
 *
 * @param
 *      none
 *
 * @retval
 *      none
 */
void  cMetaNav::UpdateSPDIF(void)
{
    PE_ICONFIGURE_DIGITAL_AUDIO digAudioOut;

    if (m_pConfigSettings != NULL)
    {
        switch (m_pConfigSettings->spdif)
        {
        case VDVD_SPDIF_PCM:
            digAudioOut = AUDIO_CHANNELS_2;
            break;
        case VDVD_SPDIF_COMPRESSED:
            digAudioOut = AUDIO_CHANNELS_5p1;
            break;
        default:
            digAudioOut = AUDIO_CHANNELS_2;
            break;
        }

        /*
         * Set digital audio output
         */
        PEiConfigureSetDigitalAudioOutput(m_PE, digAudioOut);

        /* Set system parameter in active nav */
        switch (m_MediaFormat)
        {
        case MEDIA_FORMAT_DVD_A:
        case MEDIA_FORMAT_DVD_V:
            DvdAppSetDigitalAudioOutput(digAudioOut);
            break;

#ifdef VCD_ENABLE
        case MEDIA_FORMAT_VCD:
        case MEDIA_FORMAT_SVCD:
            VcdAppSetDigitalAudioOutput(digAudioOut);
            break;
#endif

#ifdef BDROM_ENABLE
        case MEDIA_FORMAT_BDROM:
            BDROMAppSetDigitalAudioOutput(digAudioOut);
            break;
#endif
        default:
            break;
        }
    }
}

ULONG  cMetaNav::GetLocationHandleSize(VDVD_MEDIA_FORMAT mediaFormat)
{
    ULONG ulSize = 0;

    /* Get location handle size from specified nav */
    switch (mediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        ulSize = DvdAppGetLocationHandleSize();
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        break;
#endif

#ifdef VCD_ENABLE
    case MEDIA_FORMAT_VCD:
    case MEDIA_FORMAT_SVCD:
        ulSize = VcdAppGetLocationHandleSize();
        break;
#endif

#ifdef CDDA_ENABLE
    case MEDIA_FORMAT_CDDA:
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        ulSize = BDROMAppGetLocationHandleSize();
        break;
#endif

    default:
        break;
    }

    return (ulSize);
}

METANAV_STATUS  cMetaNav::GetLocation(PVOID pvLocation, ULONG ulSize)
{
    METANAV_STATUS status = METANAV_SUCCESS;

    if (pvLocation == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::GetLocation -- null pointer!\n"));
        return (METANAV_FAILURE);
    }

    /* Get play location from active nav */
    switch (m_MediaFormat)
    {
    case MEDIA_FORMAT_DVD_A:
    case MEDIA_FORMAT_DVD_V:
        {
            DVDAPP_STATUS dvd_status;

            /* get location from bd nav */
            dvd_status = DvdAppGetLocation(pvLocation, ulSize);
            if (dvd_status == DVDAPP_PROHIBITED)
            {
                status = METANAV_PROHIBITED;
            }
            else if (dvd_status != DVDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::GetLocation -- failed to get location from dvd nav!\n"));
                status = METANAV_FAILURE;
            }
        }
        break;

#ifdef VR_ENABLE
    case MEDIA_FORMAT_VR:
        status = METANAV_PROHIBITED;
        break;
#endif

#ifdef VCD_ENABLE
    case MEDIA_FORMAT_VCD:
    case MEDIA_FORMAT_SVCD:
        {
            VCDAPP_STATUS vcd_status;

            /* get location from bd nav */
            vcd_status = VcdAppGetLocation(pvLocation, ulSize);
            if (vcd_status == VCDAPP_PROHIBITED)
            {
                status = METANAV_PROHIBITED;
            }
            else if (vcd_status != DVDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::GetLocation -- failed to get location from vcd nav!\n"));
                status = METANAV_FAILURE;
            }
        }
        break;
#endif

#ifdef CDDA_ENABLE
    case MEDIA_FORMAT_CDDA:
        status = METANAV_PROHIBITED;
        break;
#endif

#ifdef BDROM_ENABLE
    case MEDIA_FORMAT_BDROM:
        {
            BDAPP_STATUS bd_status;

            /* get location from bd nav */
            bd_status = BDROMAppGetLocation(pvLocation, ulSize);
            if (bd_status == BDAPP_PROHIBITED)
            {
                status = METANAV_PROHIBITED;
            }
            else if (bd_status != BDAPP_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::GetLocation -- failed to get location from bd nav!\n"));
                status = METANAV_FAILURE;
            }
        }
        break;
#endif

    default:
        status = METANAV_PROHIBITED;
        break;
    }

    return (status);
}

ULONG  cMetaNav::GetNavState(void)
{
    ULONG ulNavState = VDVD_STATUS_UNKNOWN;

    /*
     * If there is not media specific nav running, then the player is either
     * in the unloaded state, drive empty state, or in standby.
     * Otherwise, query the media specific nav to get the state.
     */
    if (m_MediaFormat == MEDIA_FORMAT_UNKNOWN)
    {
        /*
         * First, check to see if we are in standby mode.  If not, then check if tray
         * is open.  If tray is not open, then the drive must be empty.
         */
        if (m_fStandbyMode)
        {
            ulNavState = VDVD_STATUS_STANDBY_ON;
        }
        else
        {
            /*
             * If the tray is not open, then the drive is empty.
             */
            if (m_LoaderStatus.ulTrayStatus != LOADER_TRAY_CLOSED)
            {
                ulNavState = VDVD_STATUS_OPEN;
            }
            else
            {
                ulNavState = VDVD_STATUS_NO_DISC;
            }
        }
    }
    else
    {
#ifdef CDDA_ENABLE
        CDDA_StateInfo  cdda_state = CDDA_STATE_STOPPED;
#endif

        /* Get state of active nav */
        switch (m_MediaFormat)
        {
        case MEDIA_FORMAT_DVD_A:
        case MEDIA_FORMAT_DVD_V:
            ulNavState = (ULONG)DvdAppGetPlayState();
            break;

#ifdef VR_ENABLE
        case MEDIA_FORMAT_VR:
            break;
#endif

#ifdef VCD_ENABLE
        case MEDIA_FORMAT_SVCD:
        case MEDIA_FORMAT_VCD:
            break;
#endif

#ifdef CDDA_ENABLE
        case MEDIA_FORMAT_CDDA:
            cdda_state = CddaAppGetState();

            switch (cdda_state)
            {
            case CDDA_STATE_HOLD:
                ulNavState = VDVD_STATUS_STOP;
                break;
            case CDDA_STATE_STOPPED:
                ulNavState = VDVD_STATUS_FULLSTOP;
                break;
            case CDDA_STATE_PLAY:
                ulNavState = VDVD_STATUS_PLAY;
                break;
            case CDDA_STATE_PAUSED:
                ulNavState = VDVD_STATUS_PAUSE;
                break;
            case CDDA_STATE_FAST_FWD:
                ulNavState = VDVD_STATUS_FAST_F;
                break;
            default:
                break;
            }
            break;
#endif

#ifdef BDROM_ENABLE
        case MEDIA_FORMAT_BDROM:
            ulNavState = (ULONG)BDROMAppGetPlayState();
            break;
#endif

⌨️ 快捷键说明

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