📄 playbackdlg.cpp
字号:
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 + -