style: Format source code and support grouping client
This commit is contained in:
@@ -7,10 +7,9 @@
|
||||
#include "afxdialogex.h"
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
IDM_ENABLECOMPRESS = 0x0010, // <20><>Ƶѹ<EFBFBD><EFBFBD>
|
||||
IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
|
||||
enum {
|
||||
IDM_ENABLECOMPRESS = 0x0010, // <20><>Ƶѹ<C6B5><D1B9>
|
||||
IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>
|
||||
};
|
||||
// CVideoDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||
|
||||
@@ -20,166 +19,154 @@ AVISTREAMINFO CBmpToAvi::m_si;
|
||||
|
||||
CBmpToAvi::CBmpToAvi()
|
||||
{
|
||||
m_pfile = NULL;
|
||||
m_pavi = NULL;
|
||||
AVIFileInit();
|
||||
m_pfile = NULL;
|
||||
m_pavi = NULL;
|
||||
AVIFileInit();
|
||||
}
|
||||
|
||||
CBmpToAvi::~CBmpToAvi()
|
||||
{
|
||||
AVIFileExit();
|
||||
AVIFileExit();
|
||||
}
|
||||
|
||||
bool CBmpToAvi::Open( LPCTSTR szFile, LPBITMAPINFO lpbmi )
|
||||
{
|
||||
if (szFile == NULL)
|
||||
return false;
|
||||
m_nFrames = 0;
|
||||
if (szFile == NULL)
|
||||
return false;
|
||||
m_nFrames = 0;
|
||||
|
||||
if (AVIFileOpen(&m_pfile, szFile, OF_WRITE | OF_CREATE, NULL))
|
||||
return false;
|
||||
if (AVIFileOpen(&m_pfile, szFile, OF_WRITE | OF_CREATE, NULL))
|
||||
return false;
|
||||
|
||||
m_si.fccType = streamtypeVIDEO;
|
||||
m_si.fccHandler = BI_RGB;
|
||||
m_si.dwScale = 1;
|
||||
m_si.dwRate = 8; // ֡<><D6A1>
|
||||
SetRect(&m_si.rcFrame, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);
|
||||
m_si.dwSuggestedBufferSize = lpbmi->bmiHeader.biSizeImage;
|
||||
m_si.fccType = streamtypeVIDEO;
|
||||
m_si.fccHandler = BI_RGB;
|
||||
m_si.dwScale = 1;
|
||||
m_si.dwRate = 8; // ֡<><D6A1>
|
||||
SetRect(&m_si.rcFrame, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);
|
||||
m_si.dwSuggestedBufferSize = lpbmi->bmiHeader.biSizeImage;
|
||||
|
||||
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
|
||||
return false;
|
||||
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
|
||||
return false;
|
||||
|
||||
|
||||
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
|
||||
return false;
|
||||
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBmpToAvi::Write(LPVOID lpBuffer)
|
||||
{
|
||||
if (m_pfile == NULL || m_pavi == NULL)
|
||||
return false;
|
||||
if (m_pfile == NULL || m_pavi == NULL)
|
||||
return false;
|
||||
|
||||
return AVIStreamWrite(m_pavi, m_nFrames++, 1, lpBuffer, m_si.dwSuggestedBufferSize, AVIIF_KEYFRAME, NULL, NULL) == AVIERR_OK;
|
||||
return AVIStreamWrite(m_pavi, m_nFrames++, 1, lpBuffer, m_si.dwSuggestedBufferSize, AVIIF_KEYFRAME, NULL, NULL) == AVIERR_OK;
|
||||
}
|
||||
|
||||
|
||||
void CBmpToAvi::Close()
|
||||
{
|
||||
if (m_pavi)
|
||||
{
|
||||
AVIStreamRelease(m_pavi);
|
||||
m_pavi = NULL;
|
||||
}
|
||||
if (m_pfile)
|
||||
{
|
||||
AVIFileRelease(m_pfile);
|
||||
m_pfile = NULL;
|
||||
}
|
||||
if (m_pavi) {
|
||||
AVIStreamRelease(m_pavi);
|
||||
m_pavi = NULL;
|
||||
}
|
||||
if (m_pfile) {
|
||||
AVIFileRelease(m_pfile);
|
||||
m_pfile = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CVideoDlg::SaveAvi(void)
|
||||
{
|
||||
CMenu *pSysMenu = GetSystemMenu(FALSE);
|
||||
if (pSysMenu->GetMenuState(IDM_SAVEAVI, MF_BYCOMMAND) & MF_CHECKED)
|
||||
{
|
||||
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_UNCHECKED);
|
||||
m_aviFile.Empty();
|
||||
m_aviStream.Close();
|
||||
return;
|
||||
}
|
||||
CMenu *pSysMenu = GetSystemMenu(FALSE);
|
||||
if (pSysMenu->GetMenuState(IDM_SAVEAVI, MF_BYCOMMAND) & MF_CHECKED) {
|
||||
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_UNCHECKED);
|
||||
m_aviFile.Empty();
|
||||
m_aviStream.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi");
|
||||
CFileDialog dlg(FALSE, "avi", strFileName, OFN_OVERWRITEPROMPT, "<EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>(*.avi)|*.avi|", this);
|
||||
if(dlg.DoModal () != IDOK)
|
||||
return;
|
||||
m_aviFile = dlg.GetPathName();
|
||||
if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full))
|
||||
{
|
||||
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>:"+m_aviFile, "<EFBFBD><EFBFBD>ʾ");
|
||||
m_aviFile.Empty();
|
||||
}
|
||||
else
|
||||
{
|
||||
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_CHECKED);
|
||||
}
|
||||
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi");
|
||||
CFileDialog dlg(FALSE, "avi", strFileName, OFN_OVERWRITEPROMPT, "<EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>(*.avi)|*.avi|", this);
|
||||
if(dlg.DoModal () != IDOK)
|
||||
return;
|
||||
m_aviFile = dlg.GetPathName();
|
||||
if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full)) {
|
||||
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>:"+m_aviFile, "<EFBFBD><EFBFBD>ʾ");
|
||||
m_aviFile.Empty();
|
||||
} else {
|
||||
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_CHECKED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CVideoDlg::CVideoDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
|
||||
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
|
||||
{
|
||||
m_nCount = 0;
|
||||
m_aviFile.Empty();
|
||||
m_BitmapInfor_Full = NULL;
|
||||
m_pVideoCodec = NULL;
|
||||
m_nCount = 0;
|
||||
m_aviFile.Empty();
|
||||
m_BitmapInfor_Full = NULL;
|
||||
m_pVideoCodec = NULL;
|
||||
|
||||
m_BitmapData_Full = NULL;
|
||||
m_BitmapCompressedData_Full = NULL;
|
||||
ResetScreen();
|
||||
m_BitmapData_Full = NULL;
|
||||
m_BitmapCompressedData_Full = NULL;
|
||||
ResetScreen();
|
||||
}
|
||||
|
||||
|
||||
void CVideoDlg::ResetScreen(void)
|
||||
{
|
||||
if (m_BitmapInfor_Full)
|
||||
{
|
||||
delete m_BitmapInfor_Full;
|
||||
m_BitmapInfor_Full = NULL;
|
||||
}
|
||||
if (m_BitmapInfor_Full) {
|
||||
delete m_BitmapInfor_Full;
|
||||
m_BitmapInfor_Full = NULL;
|
||||
}
|
||||
|
||||
int iBitMapInforSize = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
|
||||
m_BitmapInfor_Full = (LPBITMAPINFO) new BYTE[iBitMapInforSize];
|
||||
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapInfor_Full, iBitMapInforSize, 1);
|
||||
m_BitmapData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
|
||||
m_BitmapCompressedData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
|
||||
int iBitMapInforSize = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
|
||||
m_BitmapInfor_Full = (LPBITMAPINFO) new BYTE[iBitMapInforSize];
|
||||
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapInfor_Full, iBitMapInforSize, 1);
|
||||
m_BitmapData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
|
||||
m_BitmapCompressedData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
|
||||
}
|
||||
|
||||
CVideoDlg::~CVideoDlg()
|
||||
{
|
||||
if (!m_aviFile.IsEmpty())
|
||||
{
|
||||
SaveAvi();
|
||||
m_aviFile.Empty();
|
||||
}
|
||||
if (!m_aviFile.IsEmpty()) {
|
||||
SaveAvi();
|
||||
m_aviFile.Empty();
|
||||
}
|
||||
|
||||
if (m_pVideoCodec)
|
||||
{
|
||||
delete m_pVideoCodec;
|
||||
m_pVideoCodec = NULL;
|
||||
}
|
||||
if (m_pVideoCodec) {
|
||||
delete m_pVideoCodec;
|
||||
m_pVideoCodec = NULL;
|
||||
}
|
||||
|
||||
if (m_BitmapData_Full)
|
||||
{
|
||||
delete m_BitmapData_Full;
|
||||
m_BitmapData_Full = NULL;
|
||||
}
|
||||
if (m_BitmapData_Full) {
|
||||
delete m_BitmapData_Full;
|
||||
m_BitmapData_Full = NULL;
|
||||
}
|
||||
|
||||
if (m_BitmapInfor_Full)
|
||||
{
|
||||
delete m_BitmapInfor_Full;
|
||||
m_BitmapInfor_Full = NULL;
|
||||
}
|
||||
if (m_BitmapInfor_Full) {
|
||||
delete m_BitmapInfor_Full;
|
||||
m_BitmapInfor_Full = NULL;
|
||||
}
|
||||
|
||||
if (m_BitmapCompressedData_Full)
|
||||
{
|
||||
delete m_BitmapCompressedData_Full;
|
||||
m_BitmapCompressedData_Full = NULL;
|
||||
}
|
||||
if (m_BitmapCompressedData_Full) {
|
||||
delete m_BitmapCompressedData_Full;
|
||||
m_BitmapCompressedData_Full = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void CVideoDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
CDialog::DoDataExchange(pDX);
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CVideoDlg, CDialog)
|
||||
ON_WM_CLOSE()
|
||||
ON_WM_SYSCOMMAND()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_CLOSE()
|
||||
ON_WM_SYSCOMMAND()
|
||||
ON_WM_PAINT()
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
@@ -188,187 +175,172 @@ END_MESSAGE_MAP()
|
||||
|
||||
BOOL CVideoDlg::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||
if (SysMenu != NULL)
|
||||
{
|
||||
m_hDD = DrawDibOpen();
|
||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||
if (SysMenu != NULL) {
|
||||
m_hDD = DrawDibOpen();
|
||||
|
||||
m_hDC = ::GetDC(m_hWnd);
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_ENABLECOMPRESS, "<EFBFBD><EFBFBD>Ƶѹ<EFBFBD><EFBFBD>(&C)");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_SAVEAVI, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>(&V)");
|
||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||
m_hDC = ::GetDC(m_hWnd);
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_ENABLECOMPRESS, "<EFBFBD><EFBFBD>Ƶѹ<EFBFBD><EFBFBD>(&C)");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_SAVEAVI, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>(&V)");
|
||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||
|
||||
CString strString;
|
||||
CString strString;
|
||||
|
||||
strString.Format("%s - <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> %d<><64>%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
|
||||
strString.Format("%s - <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> %d<><64>%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
|
||||
|
||||
SetWindowText(strString);
|
||||
SetWindowText(strString);
|
||||
|
||||
BYTE bToken = COMMAND_NEXT;
|
||||
BYTE bToken = COMMAND_NEXT;
|
||||
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
}
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
}
|
||||
|
||||
SetIcon(m_hIcon, TRUE);
|
||||
SetIcon(m_hIcon, FALSE);
|
||||
SetIcon(m_hIcon, TRUE);
|
||||
SetIcon(m_hIcon, FALSE);
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CVideoDlg::OnClose()
|
||||
{
|
||||
CancelIO();
|
||||
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (IsProcessing()) {
|
||||
ShowWindow(SW_HIDE);
|
||||
return;
|
||||
}
|
||||
if (!m_aviFile.IsEmpty())
|
||||
{
|
||||
SaveAvi();
|
||||
m_aviFile.Empty();
|
||||
}
|
||||
CancelIO();
|
||||
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (IsProcessing()) {
|
||||
ShowWindow(SW_HIDE);
|
||||
return;
|
||||
}
|
||||
if (!m_aviFile.IsEmpty()) {
|
||||
SaveAvi();
|
||||
m_aviFile.Empty();
|
||||
}
|
||||
|
||||
DialogBase::OnClose();
|
||||
DialogBase::OnClose();
|
||||
}
|
||||
|
||||
void CVideoDlg::OnReceiveComplete(void)
|
||||
{
|
||||
++m_nCount;
|
||||
++m_nCount;
|
||||
|
||||
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
||||
{
|
||||
case TOKEN_WEBCAM_DIB:
|
||||
{
|
||||
DrawDIB();//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>뿴һ<EBBFB4><D2BB>
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// <20><><EFBFBD>䷢<EFBFBD><E4B7A2><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>
|
||||
break;
|
||||
}
|
||||
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
|
||||
case TOKEN_WEBCAM_DIB: {
|
||||
DrawDIB();//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>뿴һ<EBBFB4><D2BB>
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// <20><><EFBFBD>䷢<EFBFBD><E4B7A2><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CVideoDlg::DrawDIB(void)
|
||||
{
|
||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||
if (SysMenu == NULL)
|
||||
return;
|
||||
CMenu* SysMenu = GetSystemMenu(FALSE);
|
||||
if (SysMenu == NULL)
|
||||
return;
|
||||
|
||||
const int nHeadLen = 1 + 1 + 4;
|
||||
const int nHeadLen = 1 + 1 + 4;
|
||||
|
||||
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
|
||||
LPBYTE szBuffer = tmp.Buf();
|
||||
UINT ulBufferLen = m_ContextObject->InDeCompressedBuffer.GetBufferLength();
|
||||
if (szBuffer[1] == 0) // û<>о<EFBFBD><D0BE><EFBFBD>H263ѹ<33><D1B9><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
{
|
||||
// <20><>һ<EFBFBD>Σ<EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>֧<EFBFBD><D6A7>ָ<EFBFBD><D6B8><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (m_nCount == 1)
|
||||
{
|
||||
SysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
}
|
||||
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED);
|
||||
memcpy(m_BitmapData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen);
|
||||
}
|
||||
else // <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
////<2F><><EFBFBD>ﻺ<EFBFBD><EFBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||
InitCodec(*(LPDWORD)(szBuffer + 2)); //<2F>ж<EFBFBD>
|
||||
if (m_pVideoCodec != NULL)
|
||||
{
|
||||
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED);
|
||||
memcpy(m_BitmapCompressedData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen); //<2F><>Ƶû<C6B5>н<EFBFBD>ѹ
|
||||
//<2F><><EFBFBD>↑ʼ<EFBFAA><CABC><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬδѹ<CEB4><D1B9><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ϡ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avi<76><69>ʽ
|
||||
m_pVideoCodec->DecodeVideoData(m_BitmapCompressedData_Full, ulBufferLen - nHeadLen,
|
||||
(LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ
|
||||
}
|
||||
}
|
||||
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
|
||||
LPBYTE szBuffer = tmp.Buf();
|
||||
UINT ulBufferLen = m_ContextObject->InDeCompressedBuffer.GetBufferLength();
|
||||
if (szBuffer[1] == 0) { // û<>о<EFBFBD><D0BE><EFBFBD>H263ѹ<33><D1B9><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
// <20><>һ<EFBFBD>Σ<EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>֧<EFBFBD><D6A7>ָ<EFBFBD><D6B8><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (m_nCount == 1) {
|
||||
SysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
}
|
||||
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED);
|
||||
memcpy(m_BitmapData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen);
|
||||
} else { // <20><><EFBFBD><EFBFBD>
|
||||
////<2F><><EFBFBD>ﻺ<EFBFBD><EFBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||
InitCodec(*(LPDWORD)(szBuffer + 2)); //<2F>ж<EFBFBD>
|
||||
if (m_pVideoCodec != NULL) {
|
||||
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED);
|
||||
memcpy(m_BitmapCompressedData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen); //<2F><>Ƶû<C6B5>н<EFBFBD>ѹ
|
||||
//<2F><><EFBFBD>↑ʼ<EFBFAA><CABC><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬδѹ<CEB4><D1B9><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ϡ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avi<76><69>ʽ
|
||||
m_pVideoCodec->DecodeVideoData(m_BitmapCompressedData_Full, ulBufferLen - nHeadLen,
|
||||
(LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ
|
||||
}
|
||||
}
|
||||
|
||||
PostMessage(WM_PAINT);
|
||||
PostMessage(WM_PAINT);
|
||||
}
|
||||
|
||||
|
||||
void CVideoDlg::InitCodec(DWORD fccHandler)
|
||||
{
|
||||
if (m_pVideoCodec != NULL)
|
||||
return;
|
||||
if (m_pVideoCodec != NULL)
|
||||
return;
|
||||
|
||||
m_pVideoCodec = new CVideoCodec;
|
||||
if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler))
|
||||
{
|
||||
Mprintf("======> InitCompressor failed \n");
|
||||
delete m_pVideoCodec;
|
||||
// <20><>NULL, <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ΪNULL<4C><4C><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
m_pVideoCodec = NULL;
|
||||
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
}
|
||||
m_pVideoCodec = new CVideoCodec;
|
||||
if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler)) {
|
||||
Mprintf("======> InitCompressor failed \n");
|
||||
delete m_pVideoCodec;
|
||||
// <20><>NULL, <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ΪNULL<4C><4C><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
m_pVideoCodec = NULL;
|
||||
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
{
|
||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
||||
switch (nID)
|
||||
{
|
||||
case IDM_SAVEAVI:
|
||||
{
|
||||
SaveAvi();
|
||||
break;
|
||||
}
|
||||
case IDM_ENABLECOMPRESS:
|
||||
{
|
||||
CMenu *pSysMenu = GetSystemMenu(FALSE);
|
||||
bool bIsChecked = pSysMenu->GetMenuState(IDM_ENABLECOMPRESS, MF_BYCOMMAND) & MF_CHECKED;
|
||||
pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
|
||||
bIsChecked = !bIsChecked;
|
||||
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
|
||||
if (!bIsChecked)
|
||||
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
||||
switch (nID) {
|
||||
case IDM_SAVEAVI: {
|
||||
SaveAvi();
|
||||
break;
|
||||
}
|
||||
case IDM_ENABLECOMPRESS: {
|
||||
CMenu *pSysMenu = GetSystemMenu(FALSE);
|
||||
bool bIsChecked = pSysMenu->GetMenuState(IDM_ENABLECOMPRESS, MF_BYCOMMAND) & MF_CHECKED;
|
||||
pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
|
||||
bIsChecked = !bIsChecked;
|
||||
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
|
||||
if (!bIsChecked)
|
||||
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CDialog::OnSysCommand(nID, lParam);
|
||||
CDialog::OnSysCommand(nID, lParam);
|
||||
}
|
||||
|
||||
|
||||
void CVideoDlg::OnPaint()
|
||||
{
|
||||
CPaintDC dc(this); // device context for painting
|
||||
CPaintDC dc(this); // device context for painting
|
||||
|
||||
if (m_BitmapData_Full==NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
RECT rect;
|
||||
GetClientRect(&rect);
|
||||
if (m_BitmapData_Full==NULL) {
|
||||
return;
|
||||
}
|
||||
RECT rect;
|
||||
GetClientRect(&rect);
|
||||
|
||||
DrawDibDraw
|
||||
(
|
||||
m_hDD,
|
||||
m_hDC,
|
||||
0, 0,
|
||||
rect.right, rect.bottom,
|
||||
(LPBITMAPINFOHEADER)m_BitmapInfor_Full,
|
||||
m_BitmapData_Full,
|
||||
0, 0,
|
||||
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight,
|
||||
DDF_SAME_HDC
|
||||
);
|
||||
DrawDibDraw
|
||||
(
|
||||
m_hDD,
|
||||
m_hDC,
|
||||
0, 0,
|
||||
rect.right, rect.bottom,
|
||||
(LPBITMAPINFOHEADER)m_BitmapInfor_Full,
|
||||
m_BitmapData_Full,
|
||||
0, 0,
|
||||
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight,
|
||||
DDF_SAME_HDC
|
||||
);
|
||||
|
||||
if (!m_aviFile.IsEmpty())
|
||||
{
|
||||
m_aviStream.Write(m_BitmapData_Full);
|
||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
|
||||
SetBkMode(m_hDC, TRANSPARENT);
|
||||
SetTextColor(m_hDC, RGB(0xff,0x00,0x00));
|
||||
const LPCTSTR lpTipsString = "Recording";
|
||||
TextOut(m_hDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
|
||||
}
|
||||
if (!m_aviFile.IsEmpty()) {
|
||||
m_aviStream.Write(m_BitmapData_Full);
|
||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
|
||||
SetBkMode(m_hDC, TRANSPARENT);
|
||||
SetTextColor(m_hDC, RGB(0xff,0x00,0x00));
|
||||
const LPCTSTR lpTipsString = "Recording";
|
||||
TextOut(m_hDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user