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

📄 gvcapturedlg.cpp

📁 mysee网络直播源代码Mysee Lite是Mysee独立研发的网络视频流媒体播放系统。在应有了P2P技术和一系列先进流媒体技术之后
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			m_comboxVideoEncoder.EnableWindow();
			m_comboxVideoCap.EnableWindow();
		}		
		m_comboxAudioEncoder.EnableWindow();
	}
}

void CGVCaptureDlg::OnChkPreview() 
{	
	m_grfCapture.SetPreview(!m_grfCapture.IsPreview());
}

void CGVCaptureDlg::OnTimer(UINT nIDEvent) 
{
	if(m_bPause)
		return;
	m_dwEscape ++;
	// change time display
	int h = m_dwEscape/3600;
	int m = (m_dwEscape%3600)/60;
	int s = (m_dwEscape%3600)%60;

	TCHAR strH[3], strM[3], strS[3];
	if(h < 10)
		wsprintf(strH, "0%d", h);
	else
		wsprintf(strH, "%d", h);

	if(m < 10)
		wsprintf(strM, "0%d", m);
	else
		wsprintf(strM, "%d", m);

	if(s < 10)
		wsprintf(strS, "0%d", s);
	else
		wsprintf(strS, "%d", s);

	TCHAR strTime[10];
	wsprintf(strTime, "%s:%s:%s", strH, strM ,strS);
	SetDlgItemText(IDC_STATIC_TIMETOCAP, strTime);

	TCHAR strDataRata[20];
	sprintf(strDataRata, "%f", m_grfCapture.GetCompressRata());
	SetDlgItemText(IDC_STATIC_BITRATE, strDataRata);

	CDialog::OnTimer(nIDEvent);
}

void CGVCaptureDlg::OnClose() 
{
	OnBtnStopCap();
	CDialog::OnClose();
	SaveFilterConfig();	
}

void CGVCaptureDlg::OnCbnSelchangeCmbAudioCapture()
{
    CString strCurSel;
    m_comboxAudioCap.GetLBText(m_comboxAudioCap.GetCurSel(), strCurSel);

    if(m_strCurAudioCapDevice == strCurSel)
        return;
    m_strCurAudioCapDevice = strCurSel;

    if(FAILED(m_grfCapture.CreateAudioCapDeviceFilterByName((TCHAR*)((LPCTSTR)strCurSel))))
        AfxMessageBox("Cant Create filter!!");	
}

void CGVCaptureDlg::OnSelchangeCmbAudioCompressor() 
{
	CString strCurSel;
	m_comboxAudioEncoder.GetLBText(m_comboxAudioEncoder.GetCurSel(), strCurSel);

	if(m_strCurAudioEncoder == strCurSel ||((LPCTSTR)strCurSel)[0] == 0)
	{
		AfxMessageBox("当前读出字符串为空");
		return;
	}
	m_strCurAudioEncoder = strCurSel;

	if(FAILED(m_grfCapture.CreateAudioEncoderFilterByName((TCHAR*)((LPCTSTR)strCurSel))))
		AfxMessageBox("Cant Create filter!!");
}

void CGVCaptureDlg::OnSelchangeCmbVideoCapture() 
{
	CString strCurSel;
	m_comboxVideoCap.GetLBText(m_comboxVideoCap.GetCurSel(), strCurSel);

	if(m_strCurVideoCapDevice == strCurSel)
		return;
	m_strCurVideoCapDevice = strCurSel;

	if(FAILED(m_grfCapture.CreateVideoCapDeviceFilterByName((TCHAR*)((LPCTSTR)strCurSel))))
		AfxMessageBox("Cant Create filter!!");	
}

void CGVCaptureDlg::OnSelchangeCmbVideoCompressor() 
{
	CString strCurSel;
	m_comboxVideoEncoder.GetLBText(m_comboxVideoEncoder.GetCurSel(), strCurSel);

	if(m_strCurVideoEncoder == strCurSel || ((LPCTSTR)strCurSel)[0] == 0)
	{
		AfxMessageBox("当前读出字符串为空");
		return;
	}

	m_strCurVideoEncoder = strCurSel;
	if ("MicroSoft Media 9 DMO" == m_strCurVideoEncoder)
	{
		g_VideoEncodingParams.DefaultParams();
	}
	if(FAILED(m_grfCapture.CreateVideoEncoderFilterByName((TCHAR*)((LPCTSTR)strCurSel))))
		AfxMessageBox("Cant Create filter!!");
}

void CGVCaptureDlg::OnNotifyStop()
{
	OnBtnStopCap();
}

void CGVCaptureDlg::OnNotifyPlay()
{
	OnBtnBeginCap();
}

void CGVCaptureDlg::OnCheckOnlyAudio() 
{	
	m_grfCapture.SetOnlyAudio(!m_grfCapture.IsOnlyAudio());

	if(m_grfCapture.IsOnlyAudio())
	{
		m_comboxVideoCap.EnableWindow(FALSE);
		m_comboxVideoEncoder.EnableWindow(FALSE);
	}
	else
	{
		m_comboxVideoCap.EnableWindow(TRUE);
		m_comboxVideoEncoder.EnableWindow(TRUE);
	}
}



bool CGVCaptureDlg::SaveFilterConfig()
{
	char lszTotalPath[DEF_TEMP_LENGTH];
	int result = 0;
	FILE* lpFp = NULL;
	GetTotalPath("ConfigFilter.dat", lszTotalPath);
    lpFp = fopen(lszTotalPath, "wb");

    //写m_strCurAudioCapDevice
    int liLen = strlen(m_strCurAudioCapDevice.GetBuffer(0));
    result = fwrite(&liLen, sizeof(int), 1,lpFp);
    if (1 != result)
    {
        fclose(lpFp);
        return false;
    }
    result = fwrite(m_strCurAudioCapDevice.GetBuffer(0), sizeof(char), liLen,lpFp);
    if (liLen != result)
    {
        fclose(lpFp);
        return false;
    }

	//写m_strCurAudioEncoder
	liLen = strlen(m_strCurAudioEncoder.GetBuffer(0));

	result = fwrite(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		fclose(lpFp);
		return false;
	}
	result = fwrite(m_strCurAudioEncoder.GetBuffer(0), sizeof(char), liLen,lpFp);
	if (liLen != result)
	{
		fclose(lpFp);
		return false;
	}

	//写m_strCurVideoCapDevice
	liLen = strlen(m_strCurVideoCapDevice.GetBuffer(0));
	result = fwrite(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		fclose(lpFp);
		return false;
	}
	result = fwrite(m_strCurVideoCapDevice.GetBuffer(0), sizeof(char), liLen,lpFp);
	if (liLen != result)
	{
		fclose(lpFp);
		return false;
	}

	//写m_strCurVideoEncoder
	liLen = strlen(m_strCurVideoEncoder.GetBuffer(0));
	result = fwrite(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		fclose(lpFp);
		return false;
	}
	result = fwrite(m_strCurVideoEncoder.GetBuffer(0), sizeof(char), liLen,lpFp);
	if (liLen != result)
	{
		fclose(lpFp);
		return false;
	}

	//写媒体类型
	AM_MEDIA_TYPE* lpCurAudioAMT = NULL;	
	int ii = sizeof(AM_MEDIA_TYPE) + sizeof(WAVEFORMATEX);
	int iii = sizeof(AM_MEDIA_TYPE);
	if (!m_grfCapture.GetCurMediaType(&lpCurAudioAMT))
	{//如果没有,还必须将一个表示媒体类型为零的写入
		liLen = 0;
		fwrite(&liLen, sizeof(int), 1, lpFp);			
	}

	//如果媒体格式不是音频则退出,这是一个保护机制。
	if (NULL != lpCurAudioAMT)
	{
		if (FORMAT_WaveFormatEx != lpCurAudioAMT->formattype)
		{
			fclose(lpFp);
			return false;
		}
		liLen = sizeof(AM_MEDIA_TYPE) + lpCurAudioAMT->cbFormat;
		result = fwrite(&liLen, sizeof(int), 1,lpFp);
		if (1 != result)
		{
			fclose(lpFp);
			return false;
		}
		result = fwrite(lpCurAudioAMT, liLen, 1,lpFp);
		if (1 != result)
		{
			fclose(lpFp);
			return false;
		}

		HeapFree(GetProcessHeap(), 0, lpCurAudioAMT);
		lpCurAudioAMT = NULL;

	}	
	fclose(lpFp);
	return true;	
}

bool CGVCaptureDlg::LoadFilterConfig()
{
	char lszTotalPath[DEF_TEMP_LENGTH];
	int result = 0;
	FILE* lpFp = NULL;
	GetTotalPath("ConfigFilter.dat", lszTotalPath);
	lpFp = fopen(lszTotalPath, "rb");
	if (!lpFp)
	{		
		return false;
    }
    //读m_strCurAudioCapDevice
    int liLen = 0;
    result = fread(&liLen, sizeof(int), 1,lpFp);
    if (1 != result)
    {
        AfxMessageBox("读取配置文件出错");	
        fclose(lpFp);
        DeleteFile(lszTotalPath);
        return false;
    }
    if (liLen)
    {
        result = fread(m_strCurAudioCapDevice.GetBuffer(liLen), sizeof(char), liLen,lpFp);
        if (liLen != result)
        {
            m_strCurAudioCapDevice.ReleaseBuffer(liLen);
            AfxMessageBox("读取配置文件出错");	
            fclose(lpFp);
            DeleteFile(lszTotalPath);
            return false;
        }
        m_strCurAudioCapDevice.ReleaseBuffer(liLen);
    }
	//读m_strCurAudioEncoder
	liLen = 0;	
	result = fread(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		AfxMessageBox("读取配置文件出错");	
		fclose(lpFp);
		DeleteFile(lszTotalPath);
		return false;
	}
	if (liLen)
	{
		result = fread(m_strCurAudioEncoder.GetBuffer(liLen), sizeof(char), liLen,lpFp);
		if (liLen != result)
		{
			m_strCurAudioEncoder.ReleaseBuffer(liLen);
			AfxMessageBox("读取配置文件出错");	
			fclose(lpFp);
			DeleteFile(lszTotalPath);
			return false;
		}
		m_strCurAudioEncoder.ReleaseBuffer(liLen);
	}	
	//读m_strCurVideoCapDevice
	liLen = 0;
	result = fread(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		AfxMessageBox("读取配置文件出错");	
		fclose(lpFp);
		DeleteFile(lszTotalPath);
		return false;
	}
	if (liLen)
	{
		result = fread(m_strCurVideoCapDevice.GetBuffer(liLen), sizeof(char), liLen,lpFp);
		if (liLen != result)
		{
			m_strCurVideoCapDevice.ReleaseBuffer(liLen);
			AfxMessageBox("读取配置文件出错");	
			fclose(lpFp);
			DeleteFile(lszTotalPath);
			return false;
		}
		m_strCurVideoCapDevice.ReleaseBuffer(liLen);
	}
	//读m_strCurVideoEncoder
	liLen = 0;
	result = fread(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		AfxMessageBox("读取配置文件出错");	
		fclose(lpFp);
		DeleteFile(lszTotalPath);
		return false;
	}
	if (liLen)
	{
		result = fread(m_strCurVideoEncoder.GetBuffer(liLen), sizeof(char), liLen,lpFp);
		if (liLen != result)
		{
			m_strCurVideoEncoder.ReleaseBuffer(liLen);
			AfxMessageBox("读取配置文件出错");	
			fclose(lpFp);
			DeleteFile(lszTotalPath);
			return false;
		}
		m_strCurVideoEncoder.ReleaseBuffer(liLen);
	}

	//读媒体类型
	liLen = 0;
	result = fread(&liLen, sizeof(int), 1,lpFp);
	if (1 != result)
	{
		AfxMessageBox("读取配置文件出错");	
		fclose(lpFp);
		DeleteFile(lszTotalPath);
		return false;
	}
	if (liLen)//必须加,如果不加,则读出零个字节时就会返回false,此时应返回true,因为
		//只是代表没有。
	{
		//Arthur:解决m_pCurAudioAMT尽管有值为零,但是却还是分配了空间,只要有值时才给
		//mpTemAudioAMT分配空间就可。
		mpTemAudioAMT = (AM_MEDIA_TYPE *)HeapAlloc(GetProcessHeap(), 
			HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY, 
			sizeof(AM_MEDIA_TYPE) + sizeof(WAVEFORMATEX));

		result = fread(mpTemAudioAMT, liLen, 1,lpFp);
		if (1 != result)
		{
			HeapFree(GetProcessHeap(), 0, mpTemAudioAMT);
			mpTemAudioAMT = NULL;
			AfxMessageBox("读取配置文件出错");	
			fclose(lpFp);
			DeleteFile(lszTotalPath);
			return false;
		}
		mpTemAudioAMT->pbFormat = (LPBYTE)(mpTemAudioAMT + 1);

		//如果媒体格式不是音频则退出,这是一个保护机制。
		if (FORMAT_WaveFormatEx != mpTemAudioAMT->formattype)
		{
			AfxMessageBox("读取配置文件出错");	
			fclose(lpFp);
			DeleteFile(lszTotalPath);			
			return false;
		}
	}
	fclose(lpFp);
	return true;	
}

//求得完整路径
bool CGVCaptureDlg::GetTotalPath(char *aszFileName, char *aszTotalPath)
{
	GetModuleFileName(NULL, aszTotalPath, MAX_PATH);

	int liLengthPath = strlen(aszTotalPath);

	while (aszTotalPath[liLengthPath - 1] != '\\')
	{		
		--liLengthPath;
	}

	if (liLengthPath > 0)
	{
		aszTotalPath[liLengthPath] = '\0';
		if (NULL != aszFileName)
		{
			strcat(aszTotalPath, aszFileName);
		}
		return true;
	}
	return false;
}
//xiezhouwei 2005-08-15 添加配置pin函数


void CGVCaptureDlg::OnBtnVideocapIniConfig() 
{
	// TODO: Add your control notification handler code here
	m_grfCapture.ShowPinSetting(m_hWnd);
	return;
}

void CGVCaptureDlg::OnChkSave() 
{
	char lszPath[MAX_PATH] = {0};
	UpdateData();
	if (BST_CHECKED == mbtnSaveFile.GetCheck())
	{
		GetTotalPath(NULL, lszPath);

		CFileDialog loFileDlg(FALSE, "avi" , NULL, OFN_EXPLORER|OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, \
			"AVI Files (*.avi)|*.avi|All Files (*.*)|*.*||", NULL);

		loFileDlg.m_ofn.lStructSize = sizeof(loFileDlg.m_ofn);

		if (IDOK  == loFileDlg.DoModal())
		{
			ZeroMemory(mszAVIFilePath, sizeof(mszAVIFilePath));

			strcpy(mszAVIFilePath, loFileDlg.GetPathName().GetBuffer(0));
			mstrSavePath = mszAVIFilePath;	
			m_grfCapture.SetAVIFile(mszAVIFilePath);
			if ('\0' == mszAVIFilePath[0])
			{
				mbtnSaveFile.SetCheck(BST_UNCHECKED);
			}
		}		
	}
	else
	{
		mstrSavePath.Empty();
	}
	UpdateData(false);
}



BOOL CGVCaptureDlg::OnEraseBkgnd(CDC* pDC)
{
	// Intercept background erasing for the movie window, since the
	// video renderer will keep the screen painted.  Without this code,
	// your video window might get painted over with gray (the default
	// background brush) when it is obscured by another window and redrawn.
	CRect rc;
	// Get the bounding rectangle for the movie screen
	//m_VideoWindow.GetWindowRect(&rc);
	GetDlgItem(IDC_STATIC_PREVIEW)->GetWindowRect(&rc);
	ScreenToClient(&rc);
	// Exclude the clipping region occupied by our movie screen
	pDC->ExcludeClipRect(&rc);
	GetDlgItem(IDC_STATIC_PREVIEW)->GetWindowRect(&rc);
	ScreenToClient(&rc);
	pDC->ExcludeClipRect(&rc);

	// Erase the remainder of the dialog as usual
	return CDialog::OnEraseBkgnd(pDC);

}

//用户选择是否需要CrossBar输入
void CGVCaptureDlg::OnBnClickedChkCrossbar()
{		
	if (BST_CHECKED == m_bChkCrossBar.GetCheck())
	{
		m_grfCapture.SetCrossBar(TRUE);
		return;
	}
	m_grfCapture.SetCrossBar(FALSE);	
}

⌨️ 快捷键说明

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