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

📄 msapi_vd.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2006-2007 MStar Semiconductor, Inc.
// All rights reserved.
//
// Unless otherwise stipulated in writing, any and all information contained
// herein regardless in any format shall remain the sole proprietary of
// MStar Semiconductor Inc. and be kept in strict confidence
// (¨MStar Confidential Information〃) by the recipient.
// Any unauthorized act including without limitation unauthorized disclosure,
// copying, use, reproduction, sale, distribution, modification, disassembling,
// reverse engineering and compiling of the contents of MStar Confidential
// Information is unlawful and strictly prohibited. MStar hereby reserves the
// rights to any and all damages, losses, costs and expenses resulting therefrom.
//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//
/// @file msAPI_VD.h
/// @brief API for Video Decoder
/// @author MStar Semiconductor, Inc.
//
////////////////////////////////////////////////////////////////////////////////

#define MSAPI_VD_C

/******************************************************************************/
/*      		      Header Files      			                          */
/* ****************************************************************************/
#include <stdio.h>
#include <math.h>

#include "DataType.h"
#include "msAPI_VD.h"
#include "drvvd.h"
#include "drvscaler.h"
#include "drvTimer.h"
#include "drvadc.h"
#include "msapi_scaler.h"

#define API_VD_DBG(x)  //x
#define API_VD_STATUS(x)  x


/******************************************************************************/
/*      			 Local Function Prototypes                                */
/******************************************************************************/

/******************************************************************************/
/*      			 Functions      										  */
/******************************************************************************/

/******************************************************************************/
///-Specify VD DSP BIN (AUTO or NTSC only) before calling msAPI_VD_Init()
///@param vdBinSel \b IN: VD DSP BIN file
///- VD_BIN_SEL_AUTO: auto mode
///- VD_BIN_SEL_NTSC: NTSC only mode
/******************************************************************************/
void msAPI_VD_BIN_Select (VD_BIN_SEL_TYPE vdBinSel)
{
    g_u16VdBinSel = vdBinSel;
}

/******************************************************************************/
///-Initialize video decoder
/******************************************************************************/
void msAPI_VD_Init ( void )
{
    MDrv_VD_RegInit();
    MDrv_VD_LoadDSPCode();
}

/******************************************************************************/
///-Initialize video decoder variable
/******************************************************************************/
void msAPI_VD_InitVariable( void )
{
    g_VdInfo.u16VideoStatus = VD_RESET_ON;
    g_VdInfo.u16LastVideoStatus = VD_RESET_ON;
    g_VdInfo.ucVideoSystem = SIG_NONE;

	g_VdInfo.ucVideoStableCounter = VD_INPUT_STABLE_COUNT;

    g_VdInfo.ucVideoPollingCounter = 0;
}

/******************************************************************************/
///-Change input source for video decoder
///@param *penMsSysInfo \b IN
///-enInputSourceType
///-enInputPortType
/******************************************************************************/
void msAPI_VD_ChangeSource( MS_SYS_INFO *penMsSysInfo )
{
    MDrv_VD_ProgMultiInput( penMsSysInfo );
    MDrv_VD_McuReset( 200 );

    MDrv_VD_EnableCVBSLPF(FALSE);
}

/******************************************************************************/
///-Set the video decoder register from DSP
/******************************************************************************/
void msAPI_VD_SetRegFromDSP( void )
{
    MDrv_VD_SetRegFromDSP();
}

#if ( KEEP_UNUSED_FUNC == 1 )
/******************************************************************************/
///-This function will return VD's Vertical total
///@return
///-U16: VD Vertical Total
/******************************************************************************/
U16 msAPI_VD_GetVTotal( void )
{
    return MDrv_Scaler_VD_GetVTotal( GET_SYNC_STABLE, 0 );
}

/******************************************************************************/
///-This function will monitor the VD's signal
///@param *penMsSysInfo \b IN
/// -enInputSourceType
/// -enInputPortType
///@param enVideoScreen \b IN
/// -VIDEOSCREEN_WIDE
/// -VIDEOSCREEN_NORMAL
/// -VIDEOSCREEN_LETTERBOX
/// -VIDEOSCREEN_NUMS
/******************************************************************************/
void msAPI_VD_MonitorSignal( MS_SYS_INFO *penMsSysInfo, EN_ASPECT_RATIO_TYPE enVideoScreen )
{
    // Dummy code for avoid compile warning
    enVideoScreen = (MS_INPUT_SOURCE_TYPE) penMsSysInfo->enInputSourceType;
}
#endif //#if ( KEEP_UNUSED_FUNC == 1 )
/******************************************************************************/
///-Get Video Decoder status
///@return
///Status represented bits from VD
///- VD_PAL_SWITCH: BIT9
///- VD_COLOR_LOCKED: BIT10
///- VD_RESET_ON: BIT11
///- VD_VSYNC_50HZ: BIT12
///- VD_INTERLACED: BIT13
///- VD_HSYNC_LOCKED: BIT14
///- VD_SYNC_LOCKED: BIT15
///- VD_MACROVISION: BIT2
///- VD_VCR_MODE: BIT4
///- VD_FSC_3579: BIT6
///- VD_FSC_3575: BIT7
///- VD_FSC_3582: (BIT6|BIT7)
///- VD_FSC_4433: 0
///- VD_FSC_4285: BIT5
/******************************************************************************/
U16 msAPI_VD_GetStatus ( void )
{
	return MDrv_VD_GetStatus();
}

//*************************************************************************
//Function name:	msAPI_VD_IsSyncLock
//Passing parameter:	none
//Return parameter:	BOOLEAN:	video decoder sync lock or not
//Description:			Get video decoder sync lock status
//*************************************************************************
BOOLEAN msAPI_VD_IsSyncLock( void )
{
    return ((BIT)(g_VdInfo.u16VideoStatus & VD_HSYNC_LOCKED));
}

//*************************************************************************
//Function name:	msAPI_VD_IsDataValid
//Passing parameter:	none
//Return parameter:	BOOLEAN:	video decoder data valid or not
//Description:			Get video decoder data valid status
//*************************************************************************
BOOLEAN msAPI_VD_IsDataValid( void )
{
    return ((BIT)(g_VdInfo.u16VideoStatus & VD_DATA_VALID));
}

//*************************************************************************
//Function name:	msAPI_VD_TimingMonitor
//Passing parameter:	none
//Return parameter:	none
//Description:			Monitor signal timing from digital port
//*************************************************************************
EN_VD_TIMING_MONITOR_STATE msAPI_VD_TimingMonitor( void )
{
    EN_VD_TIMING_MONITOR_STATE enState;
    U16 u16CurSyncStatus; // video status

    if ( g_VdInfo.ucVideoPollingCounter )
        return VD_STATE_NONE;

    g_VdInfo.ucVideoPollingCounter = VIDEO_POLLING_COUNTER; // reset counter

    msAPI_VD_SetRegFromDSP();

#if NEW_LOCK
    msAPI_Scaler_MonitorLPLL();
#endif

    // Check status
    u16CurSyncStatus = msAPI_VD_GetStatus();

    if ( ( u16CurSyncStatus & VD_MODE_DETECT_MASK ) == ( g_VdInfo.u16VideoStatus & VD_MODE_DETECT_MASK ) )
    {
        API_VD_DBG(puts("\r\nStatus Stable"));
        enState = VD_STATE_STABLE;
        g_VdInfo.u16LastVideoStatus = VD_RESET_ON;
    }
    else
    {
        API_VD_DBG(puts("\r\nStatus Change"));
        // Sync change
        if ( ( u16CurSyncStatus & VD_MODE_DETECT_MASK ) != ( g_VdInfo.u16LastVideoStatus & VD_MODE_DETECT_MASK ) )
            enState = VD_STATE_UNSTABLE_0;
        else
            enState = VD_STATE_UNSTABLE_1;
        g_VdInfo.u16LastVideoStatus = u16CurSyncStatus;
    }

    switch( enState )
    {
        case VD_STATE_STABLE :
             g_VdInfo.ucVideoStableCounter = 0;
             break;

        case VD_STATE_UNSTABLE_0:
            API_VD_DBG(puts("\r\nUNSTABLE_0"));
            g_VdInfo.ucVideoStableCounter = VD_INPUT_STABLE_COUNT;

⌨️ 快捷键说明

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