📄 msapi_vd.c
字号:
////////////////////////////////////////////////////////////////////////////////
//
// 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 + -