📄 captiondemodlg.cpp
字号:
#include "stdafx.h"
#include "Windows.h"
#include "CaptionDemo.h"
#include "CaptionDemoDlg.h"
#include "BvtCg2kAppId.h"
#include "ICg2kApp.h"
#include <objbase.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define VIDEOWIDTH 720
#define PALVIDEOHEIGHT 576
#define PALVIDEOFRAME (VIDEOWIDTH * PALVIDEOHEIGHT)
#define NTSCVIDEOHEIGHT 480
#define NTSCVIDEOFRAME (VIDEOWIDTH * NTSCVIDEOHEIGHT)
int OffPosx = 0, OffPosy = 0;
bool notalloc = FALSE;
bool f_click = FALSE;
bool h_click = FALSE;
bool v_click = FALSE;
LPUSLONG tgabuff = NULL;
int nFrame = 30;
int tick = 0;
USLONG maxgain = 255;
LPSPV_CARD_INFORM SpvBoardInfo;
IBvtCg2kIf *pICg2k = NULL;
///////////////////////////////////////////////////////////
// global variable
///////////////////////////////////////////////////
int winHeight = 576, winWidth = 720, userWinSize = 720*576;
int winFieldHeight = 288;
BOOL doCustomFly = FALSE;
BOOL customExit = FALSE;
void update_window_data(int ox, int oy, int width, int height, unsigned char *pDst, unsigned char alpha, unsigned char red, unsigned char green, unsigned char blue);
extern unsigned int ReadTgaFileToBuffer( char* filename, unsigned int * over_buf, short & xsize, short & ysize );
extern LPVOID winalloc(long size);
extern void winfree(LPVOID ptr);
//////////////////////////////////
//VIDOE TYPE (PAL or NTSC)
USCHAR m_VideoType = PAL;//NTSC;//
//input video type
//YUV 0
//CVBS 1
//YC 2
//SDI 3
USCHAR m_InputVideoType = CVBS;
//背景活动视频和图文的叠加状态
//VIDOEBYPASS 0
//VIDEOMIXFRAME 1
//FRAMEBYPASS 3
USCHAR m_mixstate=VIDOEBYPASS;
//fly image direction
//FLYUP 0
//FLYDOWN 1
//FLYRIGHT 2
//FLYLEFT 3
USCHAR m_FlyDirection=FLYUP;
//冻结Freeze图像源选择
//ACTIVEVIDEO=0
//ODDFIELD=1
//EVENFIELD=2
//FRAME=3
USCHAR m_FreezeVideo= FRAME;
//VIDEO DATA WIDE 10BIT OR 8BIT
//BIT8 =0
//BIT10=1
USCHAR m_VideoDataWide = BIT8;
//MAGICG_LE BOARD, MAGICGBOX=BOARD;
USCHAR m_BoardType = MAGICG_LE;
//内外同步设定
USCHAR m_LockToExternal = FALSE;//内同步
//color bar
USLONG constbar[10];
void init_constbar();
//***********************************************************/
//void init_constbar();
//功 能:初始化colorbar的每一条bar的值
//参 数:无
//返 回:无
void init_constbar()
{
//75% 彩条
//WHITE
constbar[0]= 0x00FFFFFF;
//YELLOW
constbar[1]= 0x00C0C000;
//CYAN
constbar[2]= 0x0000C0C0;
//GREEN
constbar[3]= 0x0000C000;
//PINK
constbar[4]= 0x00C000C0;
//RED
constbar[5]= 0x00C00000;
//BLUE
constbar[6]= 0x000000C0;
//BLACK
constbar[7]= 0L;
/*
//100% 彩条
//WHITE
constbar[0]= 0x00FFFFFF;
//YELLOW
constbar[1]= 0x00FFFF00;
//CYAN
constbar[2]= 0x0000FFFF;
//GREEN
constbar[3]= 0x0000FF00;
//PINK
constbar[4]= 0x00FF00FF;
//RED
constbar[5]= 0x00FF0000;
//BLUE
constbar[6]= 0x000000FF;
//BLACK
constbar[7]= 0L;
*/
}
extern unsigned int LoadTgaFiletoBuffer( char* filename, unsigned int * over_buf);
bool getFiles(char *FileName, LPUSLONG dataBuffer)
{
int i = 0;
char str[10];
i = strlen(FileName);
sprintf(str, "%s", FileName + i - 4);
if (_strnicmp(str, ".tga", 4) == 0)
{
/***********************************************************
read tga file.
***********************************************************/
if (!LoadTgaFiletoBuffer(FileName, (unsigned int *)dataBuffer))
return TRUE;
else
return FALSE;
}
else
{
return FALSE;
}
}
/////////////////////////////////////////////////////////////////////////////
// CCaptionDemoDlg dialog
#include "SysSelDlg.h"
CSysSelDlg FormatSelectDlg;
CCaptionDemoDlg::CCaptionDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCaptionDemoDlg::IDD, pParent)
{
int iRet = 0;
iRet = FormatSelectDlg.DoModal();
if(iRet == IDOK)
{
m_VideoType = PAL;
}
if(iRet == IDCANCEL)
{
m_VideoType = NTSC;
}
//{{AFX_DATA_INIT(CCaptionDemoDlg)
m_VideoFormat = 0;
m_VideoFreeze = 3;
m_MoveDirect = -1;
m_text_hphase = _T("");
m_text_vphase = _T("");
m_text_keydelay = _T("");
m_text_SubCarphase = _T("");
m_text_bright = _T("");
m_text_contrast = _T("");
m_text_hue = _T("");
m_text_saturation = _T("");
m_text_gain = _T("");
m_text_fadespeed = _T("");
m_text_fadestep = _T("");
m_text_flyspeed = _T("");
m_text_flystartx = _T("");
m_text_flystarty = _T("");
m_text_cgdelay = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hThreadHandle = NULL;
m_hThreadBlockHandle = NULL;
m_hThreadWindow1Handle = NULL;
m_hThreadWindow2Handle = NULL;
m_hThreadWindow3Handle = NULL;
m_hThreadWindow4Handle = NULL;
m_hThreadWindow5Handle = NULL;
m_hThreadWindow6Handle = NULL;
}
void CCaptionDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCaptionDemoDlg)
DDX_Control(pDX, IDC_SCROLLBAR_CGDELAY, m_Scroll_CgDelay);
DDX_Control(pDX, IDC_LOCKSRC, m_button_locksrc);
DDX_Control(pDX, IDC_VIDEOBUSWIDESELECT, m_button_videowideselect);
DDX_Control(pDX, IDC_TM1300SWITCHSELECT, m_button_tm1300switchselect);
DDX_Control(pDX, IDC_RADIO_INPUTVIDEO_CVBS, m_button_inputvideo_cvbs);
DDX_Control(pDX, IDC_RADIO_INPUTVIDEO_YUV, m_button_inputvideo_yuv);
DDX_Control(pDX, IDC_RADIO_INPUTVIDEO_YC, m_button_inputvideo_yc);
DDX_Control(pDX, IDC_RADIO_INPUTVIDEO_SDI, m_button_inputvideo_sdi);
DDX_Control(pDX, IDC_VIDEOTYPE_PAL, m_videotype_pal);
DDX_Control(pDX, IDC_VIDEOTYPE_NTSC, m_videotype_ntsc);
DDX_Control(pDX, IDC_SYN_EXTERNAL, m_button_syn_external);
DDX_Control(pDX, IDC_SYN_INTERNAL, m_button_syn_internal);
DDX_Control(pDX, IDC_OVERLAYMODE_ALPHAMIX, m_button_overlaymode_alphamix);
DDX_Control(pDX, IDC_OVERLAYMODE_FRAMEBYPASS, m_button_overlaymode_frambypass);
DDX_Control(pDX, IDC_OVERLAYMODE_BACKPASS, m_button_overlaymode_backpass);
DDX_Control(pDX, IDC_KEYPOSORREV, m_KeyPosOrRev);
DDX_Control(pDX, IDC_SCROLLBAR_BRIGHT, m_Scroll_Bright);
DDX_Control(pDX, IDC_SCROLLBAR_CONTRAST, m_Scroll_Contrast);
DDX_Control(pDX, IDC_SCROLLBAR_HUE, m_Scroll_Hue);
DDX_Control(pDX, IDC_SCROLLBAR_SATURATION, m_Scroll_Saturation);
DDX_Control(pDX, IDC_SCROLLBAR_GAIN, m_Scroll_Gain);
DDX_Control(pDX, IDC_SCROLLBAR_HPHASE, m_Scroll_Hphase);
DDX_Control(pDX, IDC_SCROLLBAR_VPHASE, m_Scroll_Vphase);
DDX_Control(pDX, IDC_SCROLLBAR_KEYDELAY, m_Scroll_KeyDelay);
DDX_Control(pDX, IDC_SCROLLBAR_SUBCARRIERPHASE, m_Scroll_SubCarphase);
DDX_Control(pDX, IDC_SCROLLBAR_FADESTEP, m_Scroll_FadeStep);
DDX_Control(pDX, IDC_SCROLLBAR_FADESPEED, m_Scroll_FadeSpeed);
DDX_Control(pDX, IDC_SCROLLBAR_FLYSPEED, m_Scroll_FlySpeed);
DDX_Control(pDX, IDC_SCROLLBAR_FLYSTARTX, m_Scroll_FlyStartX);
DDX_Control(pDX, IDC_SCROLLBAR_FLYSTARTY, m_Scroll_FlyStartY);
DDX_Text(pDX, IDC_TEXT_HPHASE, m_text_hphase);
DDX_Text(pDX, IDC_TEXT_VPHASE, m_text_vphase);
DDX_Text(pDX, IDC_TEXT_KEYDEALY, m_text_keydelay);
DDX_Text(pDX, IDC_TEXT_SUBCARRIERPHASE, m_text_SubCarphase);
DDX_Text(pDX, IDC_TEXT_BRIGHT, m_text_bright);
DDX_Text(pDX, IDC_TEXT_CONTRAST, m_text_contrast);
DDX_Text(pDX, IDC_TEXT_HUE, m_text_hue);
DDX_Text(pDX, IDC_TEXT_SATURATION, m_text_saturation);
DDX_Text(pDX, IDC_TEXT_GAIN, m_text_gain);
DDX_Text(pDX, IDC_TEXT_FADESPEED, m_text_fadespeed);
DDX_Text(pDX, IDC_TEXT_FADESTEP, m_text_fadestep);
DDX_Text(pDX, IDC_TEXT_FLYSPEED, m_text_flyspeed);
DDX_Text(pDX, IDC_TEXT_FLYSTARTX, m_text_flystartx);
DDX_Text(pDX, IDC_TEXT_FLYSTARTY, m_text_flystarty);
DDX_Text(pDX, IDC_TEXT_CGDEALY, m_text_cgdelay);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCaptionDemoDlg, CDialog)
//{{AFX_MSG_MAP(CCaptionDemoDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_RADIO_INPUTVIDEO_CVBS, OnRadioCvbs)
ON_BN_CLICKED(IDC_RADIO_INPUTVIDEO_YUV, OnRadioYuv)
ON_BN_CLICKED(IDC_RADIO_INPUTVIDEO_YC, OnRadioYc)
ON_BN_CLICKED(IDC_RADIO_INPUTVIDEO_SDI, OnRadioSdi)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_KEYPOSORREV, OnKeyPosOrRev)
ON_BN_CLICKED(IDC_RADIO_FADEIN, OnRadioFadein)
ON_BN_CLICKED(IDC_RADIO_FADEOUT, OnRadioFadeout)
ON_BN_CLICKED(IDC_WRITEINFO, OnWriteInfo)
ON_BN_CLICKED(IDC_READTGAFILE, OnReadTgafile)
ON_BN_CLICKED(IDC_BUTTON_COLORBAR, OnButtonColorbar)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
ON_BN_CLICKED(IDC_VIDEOTYPE_PAL, OnVideotypePal)
ON_BN_CLICKED(IDC_VIDEOTYPE_NTSC, OnVideotypeNtsc)
ON_BN_CLICKED(IDC_SYN_EXTERNAL, OnSynExternal)
ON_BN_CLICKED(IDC_SYN_INTERNAL, OnSynInternal)
ON_BN_CLICKED(IDC_OVERLAYMODE_ALPHAMIX, OnOverlaymodeAlphamix)
ON_BN_CLICKED(IDC_OVERLAYMODE_FRAMEBYPASS, OnOverlaymodeFramebypass)
ON_BN_CLICKED(IDC_OVERLAYMODE_BACKPASS, OnOverlaymodeBackpass)
ON_BN_CLICKED(IDC_RADIO_FLYDOWN, OnRadioFlydown)
ON_BN_CLICKED(IDC_RADIO_FLYUP, OnRadioFlyup)
ON_BN_CLICKED(IDC_RADIO_FLYRIGHT, OnRadioFlyright)
ON_BN_CLICKED(IDC_RADIO_FLYLEFT, OnRadioFlyleft)
ON_BN_CLICKED(IDC_BUTTON_FLYEXECUTE, OnButtonFlyexecute)
ON_BN_CLICKED(IDC_BUTTON_FLYSTOP, OnButtonFlystop)
ON_BN_CLICKED(IDC_RADIO_FREEZEFRAME, OnRadioFreezeframe)
ON_BN_CLICKED(IDC_RADIO_FREEZEODDFIELD, OnRadioFreezeoddfield)
ON_BN_CLICKED(IDC_RADIO_FREEZEEVENFIELD, OnRadioFreezeevenfield)
ON_BN_CLICKED(IDC_VOIMAGE_FREEZE, OnVoimageFreeze)
ON_BN_CLICKED(IDC_VOIMAGE_FREEZESTOP, OnVoimageFreezestop)
ON_BN_CLICKED(IDC_TM1300SWITCHSELECT, OnTm1300SwitchSelect)
ON_BN_CLICKED(IDC_BUTTON_STEPFLYEXECUTE, OnButtonStepFlyExecute)
ON_BN_CLICKED(IDC_BUTTON_VERTFLYSTOP, OnButtonVertFlyStop)
ON_BN_CLICKED(IDC_BUTTON_HORFLYSTOP, OnButtonHorFlyStop)
ON_BN_CLICKED(IDC_BUTTON_GRABEVIDEO, OnGrabeVideo)
ON_BN_CLICKED(IDC_BUTTON_VIEWGRABE, OnViewGrabe)
ON_BN_CLICKED(IDC_BUTTON_CUSTOMFLY, OnCustomFly)
ON_BN_CLICKED(IDC_BUTTON_SPEEDTEST, OnButtonSpeedTest)
ON_BN_CLICKED(IDC_VIDEOBUSWIDESELECT, OnVideoBusWideselect)
ON_BN_CLICKED(IDC_BUTTON_EXITGRBVIEW, OnButtonExitGrbView)
ON_BN_CLICKED(IDC_BUTTON_PLAYTGAFRAME, OnPlaytgaframe)
ON_BN_CLICKED(IDC_BUTTON_RELAY_ON, OnButtonVideoOut)
ON_BN_CLICKED(IDC_BUTTON_RELAY_OFF, OnButtonBackBypass)
ON_BN_CLICKED(IDC_LOCKSRC, OnLockSrc)
ON_BN_CLICKED(IDC_BUTTON_PLAYTGAFLY, OnPlaytgafly)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCaptionDemoDlg message handlers
BOOL CCaptionDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
HRESULT hr = NULL;
BOOL Ok = TRUE;
CoInitialize ( NULL );
hr = CoCreateInstance(
IID_IBvtCg2kSrv,
NULL,
CLSCTX_INPROC_SERVER,
IID_IBvtCg2kIf,
(LPVOID *) &pICg2k
);
if (FAILED(hr))
{
::MessageBox( NULL, "Can not create Com instance ", "Fail", MB_OK );
return FALSE;
}
//设置当前进程的优先级
HANDLE hProcess = GetCurrentProcess ();
SetPriorityClass ( hProcess, REALTIME_PRIORITY_CLASS );
SetThreadPriority( m_hThreadHandle, THREAD_PRIORITY_TIME_CRITICAL );
m_hThreadHandle = NULL;
//设置实时播放TGA线程的优先级
m_hSingle = CreateEvent ( NULL, FALSE, FALSE, NULL );
if ( m_hSingle == NULL )
{
AfxMessageBox ( "CreateEvent Error" );
return FALSE;
}
m_hThreadHandle = CreateThread ( NULL, 0, PlayTgaThreadFun,this, 0, NULL );
if ( m_hThreadHandle == NULL)
{
AfxMessageBox ( "CreateThread Error" );
return FALSE;
}
//用户必须首先设置视频格式,缺省为PAL制式
if (m_VideoType == PAL)
{
pICg2k->spv_video_format(PAL);
m_videotype_pal.SetCheck(TRUE);
m_videotype_ntsc.SetCheck(FALSE);
m_videotype_ntsc.EnableWindow(FALSE);
winHeight = 576;
winWidth = 720;
userWinSize= 720*576;
winFieldHeight = 288;
}
else
{
pICg2k->spv_video_format( NTSC );
m_videotype_ntsc.SetCheck( TRUE );
m_videotype_pal.SetCheck( FALSE );
m_videotype_pal.EnableWindow(FALSE);
winHeight = 480;
winWidth = 720;
userWinSize= 720*240;
winFieldHeight = 240;
}
//初始化函数必须在先于其它操作之前调用
pICg2k->spv_init(&Ok);//初始化成功返回TRUE,否则返回FALSE
if ( Ok != TRUE )
{
AfxMessageBox( "Initializtion Error!" );
pICg2k->spv_de_init();
pICg2k->Release ( );
exit ( 0 );
}
//初始化期间,不输出叠加图文的视频信号,输出旁通信号
pICg2k->spv_enalbe_video_output( OFF );
//init colorbar 参数
init_constbar();
//确定当前板卡的类型,必须调用该函数以确定当前板卡的类型,
//否则系统总认为是MAGICG_LE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -