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

📄 uoctrl.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
                BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_SKIP_BACK_TO_PREVIOUS_POINT_MASK) );
#endif
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlRestartPoint -- Restart playback at start of current entry mark.
 *
 * @param
 *      pOutChapterNumber - used to return the new chapter number.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS  UOCtrlRestartPoint(uint32 *pOutChapterNumber)
{
    UOCTRL_STATUS   tRetStatus    = UOCTRL_SUCCESS;
    uint64          UO_mask_table = 0;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlRestartPoint: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Get the UO Mask table */
    if (PlayCtrlGetUOPMaskTable(&UO_mask_table) != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlRestartPoint: Failed to get UO Mask table!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }
    else
    {
        /* Check the UO Mask */
        if ( (UO_mask_table & UOMASK_SKIP_TO_PREV_POINT) != 0)
        {
            /* UO is prohibited */
            tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
            BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_SKIP_BACK_TO_PREVIOUS_POINT_MASK) );
#endif
        }
        else
        {
            /* Tell playback control engine to restart current entry mark */
            if (PlayCtrlRestartPoint(pOutChapterNumber) != PLAYCTRL_SUCCESS)
            {
                tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
                BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_SKIP_BACK_TO_PREVIOUS_POINT_MASK) );
#endif
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlStop -- stop AV playback.
 *
 * @param
 *      none.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS   UOCtrlStop(void)
{
    UOCTRL_STATUS   tRetStatus    = UOCTRL_SUCCESS;
    uint64          UO_mask_table = 0;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlStop: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Get the UO Mask table */
    if (PlayCtrlGetUOPMaskTable(&UO_mask_table) != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlStop: Failed to get UO Mask table!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }
    else
    {
        /* Check the UO Mask */
        if ( (UO_mask_table & UOMASK_STOP) != 0)
        {
            /* UO is prohibited */
            tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
            BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_STOP_MASK) );
#endif
        }
        else
        {
            /* Tell playback control engine to stop AV playback */
            if (PlayCtrlStop() != PLAYCTRL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlStop: Failed to stop playback!\n"));
                tRetStatus = UOCTRL_FAILURE;
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlPauseOn -- pause playback.
 *
 * @param
 *      none.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS   UOCtrlPauseOn(void)
{
    UOCTRL_STATUS   tRetStatus    = UOCTRL_SUCCESS;
    uint64          UO_mask_table = 0;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlPauseOn: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Get the UO Mask table */
    if (PlayCtrlGetUOPMaskTable(&UO_mask_table) != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlPauseOn: Failed to get UO Mask table!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }
    else
    {
        /* Check the UO Mask */
        if ( (UO_mask_table & UOMASK_PAUSE_ON) != 0)
        {
            /* UO is prohibited */
            tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
            BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_PAUSE_ON_MASK) );
#endif
        }
        else
        {
            /* Tell playback control engine to pause */
            if (PlayCtrlPauseOn() != PLAYCTRL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlPauseOn: Failed to pause!\n"));
                tRetStatus = UOCTRL_FAILURE;
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlPauseOff -- restart playback when it is paused.
 *
 * @param
 *      none.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS   UOCtrlPauseOff(void)
{
    UOCTRL_STATUS tRetStatus = UOCTRL_SUCCESS;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlPauseOff: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Pause Off UO cannot be masked */

    /* Tell playback control engine to unpause */
    if (PlayCtrlPauseOff() != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlPauseOff: Failed to unpause!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlStillOff -- release still state and restart playback.
 *
 * @param
 *      none.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS   UOCtrlStillOff(void)
{
    UOCTRL_STATUS   tRetStatus    = UOCTRL_SUCCESS;
    uint64          UO_mask_table = 0;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlStillOff: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Get the UO Mask table */
    if (PlayCtrlGetUOPMaskTable(&UO_mask_table) != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlStillOff: Failed to get UO Mask table!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }
    else
    {
        /* Check the UO Mask */
        if ( (UO_mask_table & UOMASK_STILL_OFF) != 0)
        {
            /* UO is prohibited */
            tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
            BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_STILL_OFF_MASK) );
#endif
        }
        else
        {
            /* Tell playback control engine to resume from still */
            if (PlayCtrlStillOff() != PLAYCTRL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlStillOff: Failed to still off!\n"));
                tRetStatus = UOCTRL_FAILURE;
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlForwardPlay -- change playback speed in forward direction.
 *
 * @param
 *      speed -- playback speed.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited
 *      UOCTRL_FAILURE if error occurs
 */
UOCTRL_STATUS   UOCtrlForwardPlay(uint32 speed)
{
    UOCTRL_STATUS   tRetStatus    = UOCTRL_SUCCESS;
    uint64          UO_mask_table = 0;

    DBGPRINT(DBG_ON(DBG_TRACE), ("UOCtrlForwardPlay: Enter\n"));

    /* Entering playback control critical section */
    PlayCtrlTakeSemaphore();

    /* Get the UO Mask table */
    if (PlayCtrlGetUOPMaskTable(&UO_mask_table) != PLAYCTRL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlForwardPlay: Failed to get UO Mask table!\n"));
        tRetStatus = UOCTRL_FAILURE;
    }
    else
    {
        /* Check the UO Mask */
        if ( (UO_mask_table & UOMASK_FORWARD_PLAY) != 0)
        {
            /* UO is prohibited */
            tRetStatus = UOCTRL_PROHIBITED;
#ifdef VDVD_ENABLE_BDJ
            BDJ_SystemEvent( bdj_handle, BDJ_UOP_MASKED, (UInt32)(UOP_MASK_FORWARD_PLAY_MASK) );
#endif
        }
        else
        {
            /* Tell playback control engine to play forward at specified speed */
            if (PlayCtrlForwardPlay(speed) != PLAYCTRL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("UOCtrlForwardPlay: Failed to play forward!\n"));
                tRetStatus = UOCTRL_FAILURE;
            }
        }
    }

    /* Leaving playback control critical section */
    PlayCtrlGiveSemaphore();

    return (tRetStatus);
}

/**
 * UOCtrlBackwardPlay -- change playback speed in backward direction.
 *
 * @param
 *      speed -- playback speed.
 *
 * @retval
 *      UOCTRL_SUCCESS if UO is allowed
 *      UOCTRL_PROHIBITED if UO is prohibited

⌨️ 快捷键说明

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