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

📄 playbackdlg.cpp

📁 一个在Linux下开发的IP摄像头的驱动程序及控制软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		return;
	}

	/*
	int nOld = _daylight;
	_daylight = 0;
	*/

	do
	{
		//timetm = localtime((time_t *) &tEventProperty.tEventTI.dwStartTime);
		timetm = gmtime((time_t *) &tEventProperty.tEventTI.dwStartTime);

		strItem.Format("%4d/%02d/%02d %02d:%02d:%02d", timetm->tm_year+1900, 
			timetm->tm_mon+1, timetm->tm_mday, timetm->tm_hour, timetm->tm_min, timetm->tm_sec);
		
		//timetm = localtime((time_t *) &tEventProperty.tEventTI.dwEndTime);
		timetm = gmtime((time_t *) &tEventProperty.tEventTI.dwEndTime);

		strItem2.Format(" ~ %4d/%02d/%02d %02d:%02d:%02d", timetm->tm_year+1900, 
			timetm->tm_mon+1, timetm->tm_mday, timetm->tm_hour, timetm->tm_min, timetm->tm_sec);
		strItem += strItem2;
		strItem2.Format(" t=%d v=%d", tEventProperty.dwEventType, tEventProperty.dwValue);
		strItem += strItem2;

		m_SearchResult.AddString(strItem);

	} while(((sRet = MediaDB_FindNextEventInterval(hQuery, &tEventProperty)) != DATABASE_E_ENDOFQUERY) && IS_SUCCESS(sRet));
	//_daylight = nOld;

	MediaDB_DeleteQuery(hQuery);
}

void CPlaybackDlg::OnBnClickedPlay()
{
	if (!m_bPlaying)
	{
		// TODO: Add your control notification handler code here
		DWORD dwFoundTime;

		// Get start time and end time for this play
		GetTimeQueryInterval();

		// Set time interval for play bar
		if (m_PlayBookmark.GetCheck())
            m_PlaySlider.SetRange(m_dwBmkTime, m_dwEndTime, TRUE);
		else
			m_PlaySlider.SetRange(m_dwStartTime, m_dwEndTime, TRUE);
		// temp code
		//m_PlaySlider.SetRange(0, 100, TRUE);


		SCODE sRet = AvSynchronizer_StartChannel(m_hPlaybackChannel, 0);
		if (sRet != S_OK)
		{
			MessageBox("Can't start channel", "Error", MB_OK);
			return;
		}

		MediaDBRet_Initial(&m_hRetrieval);

		// set database play cursor
		if (m_PlayInterval.GetCheck())
		{
			SCODE	scResult;
			DWORD	dwTINum;

			if (m_PlayBookmark.GetCheck())
			{
				scResult = MediaDBRet_MatchTimeInterval(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex,
					m_dwBmkTime, m_dwEndTime, -1, &dwTINum);
			}
			else
			{
				scResult = MediaDBRet_MatchTimeInterval(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex,
					m_dwStartTime, m_dwEndTime, -1, &dwTINum);
			}

			if (scResult != S_OK)
			{
				/*for (int i=0; i<dwTINum; i++)
				{
					MediaDBRet_MatchTimeInterval(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex,
						m_dwStartTime, m_dwEndTime, i, &dwTINum);
				}*/
			}
		}
		else
		{
			if (m_PlayBookmark.GetCheck())
			{
				MediaDBRet_MatchTime(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex, 
					m_dwBmkTime, MEDIADB_VIDEO_TYPE | MEDIADB_AUDIO_TYPE, &dwFoundTime);
			}
			else
			{
				///sRet = MediaDBRet_MatchTime(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex, 
				///	m_dwStartTime, MEDIADB_VIDEO_TYPE | MEDIADB_AUDIO_TYPE, &dwFoundTime);
				sRet = MediaDBRet_MatchTime(m_hRetrieval, m_hLocation, m_wCurrentTimeSegIndex, 
					m_dwStartTime, MEDIADB_VIDEO_TYPE, &dwFoundTime);
			}
		}

		m_bPlaying = TRUE;
		// Create play thread
		DWORD dwID;
		///m_hRetrieveThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) RetrieveDataProc,
		m_hRetrieveThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) RetrieveDataProcNew,
			(LPVOID) this, 0, &dwID);
		//SetThreadPriority(m_hRetrieveThread, THREAD_PRIORITY_TIME_CRITICAL);

		m_PlayTime.SetWindowText("");
		// disable UI
		//GetDlgItem(IDC_PLAY)->EnableWindow(FALSE);
		GetDlgItem(IDC_PAUSE)->EnableWindow(TRUE);
		GetDlgItem(IDC_PLAY)->SetWindowText("&Stop");
		GetDlgItem(IDC_OPENDATABASE)->EnableWindow(FALSE);
		m_LocationList.EnableWindow(FALSE);
		m_TimeSegmentList.EnableWindow(FALSE);
	}
	else
	{
		GetDlgItem(IDC_PLAY)->EnableWindow(FALSE);
		m_bPlaying = FALSE;
		AvSynchronizer_StopChannel(m_hPlaybackChannel);
		if (m_bPause)
		{
			TUPDATEPBCHANNELOPTION tUpdatePBChannelOptions;
			tUpdatePBChannelOptions.dwFlags = UPCH_PAUSE;
			tUpdatePBChannelOptions.bPause = FALSE;
			AvSynchronizer_UpdatePlaybackChannelSettings(m_hPlaybackChannel, 
				tUpdatePBChannelOptions);
		}
		GetDlgItem(IDC_PLAY)->SetWindowText("&Play");
		GetDlgItem(IDC_PAUSE)->SetWindowText("P&ause");
		GetDlgItem(IDC_PAUSE)->EnableWindow(FALSE);
		m_btnNextFrame.EnableWindow(FALSE);
		m_bPause = FALSE;
	}
}

void CPlaybackDlg::OnBnClickedPause()
{
	TUPDATEPBCHANNELOPTION tUpdatePBChannelOptions;

	if (!m_bPause)
	{
		if (m_hPlaybackChannel)
		{
			tUpdatePBChannelOptions.dwFlags = UPCH_PAUSE;
			tUpdatePBChannelOptions.bPause = TRUE;
			AvSynchronizer_UpdatePlaybackChannelSettings(m_hPlaybackChannel, 
				tUpdatePBChannelOptions);
		}

		if (m_dwCurMediaType == MEDIADB_AUDIO_TYPE)
			m_btnNextFrame.EnableWindow(FALSE);
		else
			m_btnNextFrame.EnableWindow(TRUE);
		GetDlgItem(IDC_PAUSE)->SetWindowText("&Resume");
		m_bPause = TRUE;
	}
	else
	{
		if (m_hPlaybackChannel)
		{
			tUpdatePBChannelOptions.dwFlags = UPCH_PAUSE;
			tUpdatePBChannelOptions.bPause = FALSE;
			AvSynchronizer_UpdatePlaybackChannelSettings(m_hPlaybackChannel, 
				tUpdatePBChannelOptions);
		}

		m_btnNextFrame.EnableWindow(FALSE);
		GetDlgItem(IDC_PAUSE)->SetWindowText("P&ause");
		m_bPause = FALSE;
	}
}

void CPlaybackDlg::OnCbnSelchangeTimesegment()
{
	// TODO: Add your control notification handler code here
	int nIndex;

	nIndex = m_TimeSegmentList.GetCurSel();
	if (nIndex != CB_ERR)
	{
		SetTimeSegment(nIndex);
	}
}

void CPlaybackDlg::OnDestroy()
{
	m_bPlaying = FALSE;
	m_bExit = TRUE;

	if (m_hRetrieveThread)
	{
		if (m_bPause)	//if channel is in pause state, need to resume it or the thread will not stop
		{
			TUPDATEPBCHANNELOPTION tUpdatePBChannelOptions;
			tUpdatePBChannelOptions.dwFlags = UPCH_PAUSE;
			tUpdatePBChannelOptions.bPause = FALSE;
			AvSynchronizer_UpdatePlaybackChannelSettings(m_hPlaybackChannel, 
				tUpdatePBChannelOptions);
		}

		WaitForSingleObjectEx(m_hRetrieveThread, INFINITE, TRUE);
		CloseHandle(m_hRetrieveThread);
	}

	if (m_hAviThread)
	{
		WaitForSingleObject(m_hAviThread, INFINITE);
		CloseHandle(m_hAviThread);
	}

	/*
	while( (bRet = PeekMessage( &msg, NULL, 0, 0, PM_REMOVE )) != 0)
	{ 
		if (bRet != -1)
		{
			TranslateMessage(&msg); 
			DispatchMessage(&msg); 
		}
		if (m_hRetrieveThread == NULL)
			break;
	}
	*/

	// TODO: Add your message handler code here
	// Close database
	if (m_hRetrieval)
		MediaDBRet_Release(m_hRetrieval);

	if (m_hDatabase)
	{
		// close current location
		if (m_hLocation)
		{
			MediaDB_CloseLocation(m_hLocation);
			m_hLocation = NULL;
		}
		// close current database
		MediaDB_Release(m_hDatabase);
		m_hDatabase = NULL;
	}
	// Release AVSynchronizer
	if (m_hPlaybackChannel)
		AvSynchronizer_DeleteChannel(m_hAvSync, &m_hPlaybackChannel);
	if (m_hAvSync)
		AvSynchronizer_Release(&m_hAvSync);
	SleepEx(200, TRUE);
	if (m_hBMP)
		::DeleteObject(m_hBMP);
	CDialog::OnDestroy();
}


void CPlaybackDlg::OnCbnSelchangeComboSpeed()
{
	int nSelIdx = m_PlaybackSpeed.GetCurSel();
	int nIdx = m_PlaybackSpeed.GetItemData(nSelIdx);

	TUPDATEPBCHANNELOPTION tUpdatePBChannelOptions;

	tUpdatePBChannelOptions.dwFlags = UPCH_SETSPEED;
	tUpdatePBChannelOptions.dwFast = annSpeedItem[nIdx][0];
	tUpdatePBChannelOptions.dwSlow = annSpeedItem[nIdx][1];
	AvSynchronizer_UpdatePlaybackChannelSettings(m_hPlaybackChannel, 
		tUpdatePBChannelOptions);

}

void CPlaybackDlg::OnBnClickedButton1()
{
//	DWORD dwTINum;
	TMediaDBTimeInterval tTI;
	CString strItem, strItem2;
	SCODE sRet;

	// clear list box
	m_SearchResult.ResetContent();

	GetTimeQueryInterval();
	tTI.dwStartTime = m_dwStartTime;
	tTI.dwEndTime = m_dwEndTime;
	sRet = MediaDB_DeleteTimeInterval(m_hLocation, m_wCurrentTimeSegIndex, &tTI);
	if (!IS_SUCCESS(sRet))
	{
		char szBuf[MAX_PATH];

		sprintf(szBuf, "Error = %X", sRet);
		MessageBox(szBuf);
		return;
	}
	else
		OnCbnSelchangeLocation();
}

void CPlaybackDlg::OnBnClickedAddBookmark()
{
	// TODO: Add your control notification handler code here
	TMediaDBBookmarkInfo	tBookmark;
	CString					lpszString;

	GetTimeQueryInterval();
	tBookmark.dwSecond = m_dwBmkTime;

	m_BmkString.GetWindowText(lpszString);
	strcpy(tBookmark.szString, (TCHAR*)(LPCTSTR)lpszString);

	SCODE sRet = 
		MediaDB_AddBookmark(m_hLocation, m_wCurrentTimeSegIndex, &tBookmark);
	if (sRet != S_OK)
		MessageBox("Add Bookmark Failed!!");

	m_BmkString.SetWindowText("");
}

void CPlaybackDlg::OnBnClickedEditBookmark()
{
	// TODO: Add your control notification handler code here
	CString lpszOldString, lpszNewString;

	GetTimeQueryInterval();
	m_SearchResult.ResetContent();
	m_BmkString.GetWindowText(lpszNewString);
	m_BmkOldString.GetWindowText(lpszOldString);

	if (MediaDB_EditBookmark(m_hLocation, m_wCurrentTimeSegIndex, m_dwBmkTime,
						(TCHAR*)(LPCTSTR)lpszOldString, (TCHAR*)(LPCTSTR)lpszNewString) != S_OK)
		MessageBox("Edit Bookmark Failed!!");

	m_BmkString.SetWindowText("");
	m_BmkOldString.SetWindowText("");
}

void CPlaybackDlg::OnBnClickedDeleteBookmark()
{
	// TODO: Add your control notification handler code here
	CString lpszString;
	TMediaDBTimeInterval tTI;
	SCODE scResult;

	m_SearchResult.ResetContent();
	GetTimeQueryInterval();
	tTI.dwStartTime = m_dwStartTime;	
	tTI.dwEndTime = m_dwEndTime;

	m_BmkString.GetWindowText(lpszString);
	if (lpszString == "")
		scResult = MediaDB_DeleteBookmark(m_hLocation, m_wCurrentTimeSegIndex, &tTI, NULL);
	else
		scResult = MediaDB_DeleteBookmark(m_hLocation, m_wCurrentTimeSegIndex, &tTI, (TCHAR*)(LPCTSTR)lpszString);
	if (scResult != S_OK)
		MessageBox("Delete Bookmark Failed!!\n");

	m_BmkString.SetWindowText("");
}

void CPlaybackDlg::OnBnClickedSearchBookmarks()
{
	// TODO: Add your control notification handler code here
	TMediaDBTimeInterval tTI;
	HANDLE hQuery;
	DWORD dwBmkNum;
	TMediaDBBookmarkInfo tBookmark;
	struct tm *timetm;
	CString strItem;
	CString lpszString = "";
	SCODE scResult;

	m_SearchResult.ResetContent();
	GetTimeQueryInterval();
	tTI.dwStartTime = m_dwStartTime;
	tTI.dwEndTime = m_dwEndTime;

	m_BmkString.GetWindowText(lpszString);
	if (lpszString == "")
		scResult = MediaDB_CreateBookmarkQuery(m_hLocation, m_wCurrentTimeSegIndex, &tTI, NULL, &hQuery);
	else
		scResult = MediaDB_CreateBookmarkQuery(m_hLocation, m_wCurrentTimeSegIndex, &tTI, (TCHAR*)(LPCTSTR)lpszString, &hQuery);
	if (scResult != S_OK)
	{
		MessageBox("CreateBookmarkQuery Failed!!");
		return;
	}
	scResult = MediaDB_GetBookmarkNum(hQuery, &dwBmkNum);
	if (scResult != S_OK)
	{
		MessageBox("GetBookmarkNum Failed!!");
		return;
	}
	if (dwBmkNum != 0)
	{
		MediaDB_FindFirstBookmark(hQuery, &tBookmark);

		/*
		int nOld = _daylight;
		_daylight = 0;
		*/
		//timetm = localtime((time_t *) &tBookmark.dwSecond);
		// use new converting method
		timetm = gmtime((time_t *) &tBookmark.dwSecond);

		strItem.Format("%s %4d/%02d/%02d %02d:%02d:%02d", tBookmark.szString, timetm->tm_year+1900, 
			timetm->tm_mon+1, timetm->tm_mday, timetm->tm_hour, timetm->tm_min, timetm->tm_sec);
		m_SearchResult.AddString(strItem);

		for (int i=1; i< (int) dwBmkNum; i++)
		{
			MediaDB_FindNextBookmark(hQuery, &tBookmark);
			
			//timetm = localtime((time_t *) &tBookmark.dwSecond);
			// user new converting method
			timetm = gmtime((time_t *) &tBookmark.dwSecond);

			strItem.Format("%s %4d/%02d/%02d %02d:%02d:%02d", tBookmark.szString, timetm->tm_year+1900, 
				timetm->tm_mon+1, timetm->tm_mday, timetm->tm_hour, timetm->tm_min, timetm->tm_sec);
			m_SearchResult.AddString(strItem);
		}
		//_daylight = nOld;
	}
	MediaDB_DeleteQuery(hQuery);
	m_BmkString.SetWindowText("");
}

void CPlaybackDlg::OnBnClickedInputmediafile()
{
	// TODO: Add your control notification handler code here
	CFileDialog aFileDlg(TRUE, TEXT(".wav"), NULL, 
		OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, 
		TEXT("Media Files (*.hgd)|*.hgd|All Files (*.*)|*.*||"), this);

	aFileDlg.DoModal();

	SCODE scResult;
	//DWORD dwDIMask;
	//dwDIMask = 0xFFFFFFFF;
	CString lpszFileName;
	lpszFileName = aFileDlg.GetPathName();
	scResult = MediaDB_InputOneMediaFile(m_hLocation, (TCHAR*)(LPCTSTR)lpszFileName);
	if (scResult != S_OK)
		MessageBox("InputOneMediaFile Failed!!");
	else
		MessageBox("InputOneMediaFile Successfully!!");
}

void CPlaybackDlg::OnBnClickedDeleteLocation()
{
	// TODO: Add your control notification handler code here
	int nIndex;
	char szLoc[MAX_PATH];
	SCODE scResult;

	nIndex = m_LocationList.GetCurSel();
	m_LocationList.GetLBText(nIndex, szLoc);

	// perkins 2005/11/8 close the locaiton before delete it
	if (this->m_hLocation)
		MediaDB_CloseLocation(m_hLocation);
	m_hLocation = NULL;

	scResult = MediaDB_DeleteLocation(m_hDatabase, szLoc);
	if (scResult != S_OK)
		MessageBox("Delete Location Failed!!");
	else
	{
		DWORD dwLocNum;
		CHAR (*pszLocation)[STR_MAX];

⌨️ 快捷键说明

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