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

📄 captiondemodlg.cpp

📁 电视字幕卡调用DLL模块
💻 CPP
📖 第 1 页 / 共 5 页
字号:

#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 + -