X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b6a582bef796b43ad4cf0a96bd40bfd631460c6..6686fbad16ec929f33cbbcc1b638bf00406218c5:/src/msw/mediactrl_am.cpp diff --git a/src/msw/mediactrl_am.cpp b/src/msw/mediactrl_am.cpp index 3088d51ab9..97541c9105 100644 --- a/src/msw/mediactrl_am.cpp +++ b/src/msw/mediactrl_am.cpp @@ -1616,7 +1616,7 @@ bool wxAMMediaBackend::CreateControl(wxControl* ctrl, wxWindow* parent, // First get the AMGetErrorText procedure in debug // mode for more meaningful messages #if wxDEBUG_LEVEL - if ( m_dllQuartz.Load(_T("quartz.dll"), wxDL_VERBATIM) ) + if ( m_dllQuartz.Load(wxT("quartz.dll"), wxDL_VERBATIM) ) { m_lpAMGetErrorText = (LPAMGETERRORTEXT) m_dllQuartz.GetSymbolAorW(wxT("AMGetErrorText")); @@ -2009,18 +2009,19 @@ wxLongLong wxAMMediaBackend::GetDuration() { double outDuration; HRESULT hr = GetAM()->get_Duration(&outDuration); - if(FAILED(hr)) + switch ( hr ) { - wxAMLOG(hr); - return 0; - } + default: + wxAMLOG(hr); + // fall through - // h,m,s,milli - outDuration is in 1 second (double) - outDuration *= 1000; - wxLongLong ll; - ll.Assign(outDuration); + case S_FALSE: + return 0; - return ll; + case S_OK: + // outDuration is in seconds, we need milliseconds + return outDuration * 1000; + } } //--------------------------------------------------------------------------- @@ -2092,36 +2093,37 @@ void wxAMMediaBackend::DoGetDownloadProgress(wxLongLong* pLoadProgress, wxLongLong* pLoadTotal) { #ifndef __WXWINCE__ - LONGLONG loadTotal = 0, loadProgress = 0; - IUnknown* pFG; - IAMOpenProgress* pOP; - HRESULT hr; - hr = m_pAM->get_FilterGraph(&pFG); - if(SUCCEEDED(hr)) + IUnknown* pFG = NULL; + + HRESULT hr = m_pAM->get_FilterGraph(&pFG); + + // notice that the call above may return S_FALSE and leave pFG NULL + if(SUCCEEDED(hr) && pFG) { + IAMOpenProgress* pOP = NULL; hr = pFG->QueryInterface(IID_IAMOpenProgress, (void**)&pOP); - if(SUCCEEDED(hr)) - { + if(SUCCEEDED(hr) && pOP) + { + LONGLONG + loadTotal = 0, + loadProgress = 0; hr = pOP->QueryProgress(&loadTotal, &loadProgress); pOP->Release(); + + if(SUCCEEDED(hr)) + { + *pLoadProgress = loadProgress; + *pLoadTotal = loadTotal; + pFG->Release(); + return; + } } pFG->Release(); } +#endif // !__WXWINCE__ - if(SUCCEEDED(hr)) - { - *pLoadProgress = loadProgress; - *pLoadTotal = loadTotal; - } - else -#endif - { - // When not loading from a URL QueryProgress will return - // E_NOINTERFACE or whatever - // wxAMFAIL(hr); - *pLoadProgress = 0; - *pLoadTotal = 0; - } + *pLoadProgress = 0; + *pLoadTotal = 0; } //--------------------------------------------------------------------------- @@ -2257,8 +2259,9 @@ void wxAMMediaEvtHandler::OnActiveX(wxActiveXEvent& event) // End of wxAMMediaBackend //--------------------------------------------------------------------------- -// in source file that contains stuff you don't directly use -#include "wx/html/forcelnk.h" -FORCE_LINK_ME(wxmediabackend_am) +// Allow the user code to use wxFORCE_LINK_MODULE() to ensure that this object +// file is not discarded by the linker. +#include "wx/link.h" +wxFORCE_LINK_THIS_MODULE(wxmediabackend_am) #endif // wxUSE_MEDIACTRL && wxUSE_ACTIVEX