-////////////////////////////////////////////////////////////////////////////////
+// -----------------------------------------------------------------------------
// Name: vidwin.h
// Purpose: wxMMedia
// Author: Guilhem Lavaux
// Updated:
// Copyright: (C) 1998, 1999, 2000 Guilhem Lavaux
// License: wxWindows license
-////////////////////////////////////////////////////////////////////////////////
+// -----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "vidwin.h"
m_filename = wxGetTempFileName("wxvid");
m_paused = FALSE;
m_stopped = TRUE;
+ m_frameRate = 1.0;
wxFileOutputStream temp_file(m_filename);
temp_file << str;
m_filename = filename;
m_paused = FALSE;
m_stopped = TRUE;
+ m_frameRate = 1.0;
OpenFile();
}
void wxVideoWindows::OpenFile()
{
- MCI_DGV_OPEN_PARMS open_struct;
+ MCI_DGV_OPEN_PARMS openStruct;
+ MCI_DGV_SET_PARMS setStruct;
+ MCI_STATUS_PARMS statusStruct;
DWORD ret;
- open_struct.lpstrDeviceType = "avivideo";
- open_struct.lpstrElementName = (LPSTR)(m_filename.mb_str());
- open_struct.hWndParent = 0;
+ openStruct.lpstrDeviceType = "avivideo";
+ openStruct.lpstrElementName = (LPSTR)(m_filename.mb_str());
+ openStruct.hWndParent = 0;
ret = mciSendCommand(0, MCI_OPEN,
MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT|MCI_OPEN_TYPE|MCI_DGV_OPEN_32BIT,
- (DWORD)(LPVOID)&open_struct);
- m_internal->m_dev_id = open_struct.wDeviceID;
+ (DWORD)(LPVOID)&openStruct);
+ m_internal->m_dev_id = openStruct.wDeviceID;
+
+
+ setStruct.dwCallback = 0;
+ setStruct.dwTimeFormat = MCI_FORMAT_FRAMES;
+
+ ret = mciSendCommand(m_internal->m_dev_id, MCI_SET, MCI_SET_TIME_FORMAT,
+ (DWORD)(LPVOID)&setStruct);
+
+
+ statusStruct.dwCallback = 0;
+ statusStruct.dwItem = MCI_DGV_STATUS_FRAME_RATE;
+ ret = mciSendCommand(m_internal->m_dev_id, MCI_STATUS,
+ MCI_STATUS_ITEM,
+ (DWORD)(LPVOID)&statusStruct);
+
+ m_frameRate = ((double)statusStruct.dwReturn) / 1000;
+
+ statusStruct.dwItem = MCI_DGV_STATUS_BITSPERSAMPLE;
+ ret = mciSendCommand(m_internal->m_dev_id, MCI_STATUS, MCI_STATUS_ITEM,
+ (DWORD)(LPVOID)&statusStruct);
+ m_bps = statusStruct.dwReturn;
+
}
bool wxVideoWindows::Pause()
if (m_paused || m_stopped)
return TRUE;
m_paused = TRUE;
- return (mciSendCommand(m_internal->m_dev_id, MCI_PAUSE, 0, 0) == 0);
+ return (mciSendCommand(m_internal->m_dev_id, MCI_PAUSE, MCI_WAIT, 0) == 0);
}
bool wxVideoWindows::Resume()
bool wxVideoWindows::GetSize(wxSize& size) const
{
- // Two random numbers.
size.SetWidth(200);
size.SetHeight(200);
return TRUE;
if (m_stopped)
return FALSE;
m_stopped = TRUE;
- if (::mciSendCommand(m_internal->m_dev_id, MCI_STOP, 0, NULL) != 0)
+ if (::mciSendCommand(m_internal->m_dev_id, MCI_STOP, MCI_WAIT, NULL) != 0)
return FALSE;
seekStruct.dwCallback = 0;
seekStruct.dwTo = 0;
- return (::mciSendCommand(m_internal->m_dev_id, MCI_SEEK, 0, (DWORD)(LPVOID)&seekStruct) == 0);
+ return (::mciSendCommand(m_internal->m_dev_id, MCI_SEEK, MCI_SEEK_TO_START|MCI_WAIT, (DWORD)(LPVOID)&seekStruct) == 0);
}
-
// TODO TODO
+// I hate windows :-(. The doc says MCI_STATUS should return all info I want but when I call it
+// it returns to me with an UNSUPPORTED_FUNCTION error. I will have to do all by myself. Grrrr !
wxString wxVideoWindows::GetMovieCodec() const
{
wxUint8 wxVideoWindows::GetBPS() const
{
- return 8;
+ return m_bps;
}
double wxVideoWindows::GetFrameRate() const
{
- return 1.0;
+ return m_frameRate;
}
wxUint32 wxVideoWindows::GetNbFrames() const