/////////////////////////////////////////////////////////////////////////////
-// Name: mac/carbon/mediactrl.cpp
+// Name: src/mac/carbon/mediactrl.cpp
// Purpose: Built-in Media Backends for Mac
// Author: Ryan Norton <wxprojects@comcast.net>
// Modified by:
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#if wxUSE_MEDIACTRL
+
#include "wx/mediactrl.h"
+#ifndef WX_PRECOMP
+ #include "wx/log.h"
+ #include "wx/timer.h"
+#endif
+
// uma is for wxMacFSSpec
#include "wx/mac/uma.h"
-#include "wx/timer.h"
// standard QT stuff
#ifndef __DARWIN__
#include <QuickTime/QuickTimeComponents.h>
#endif
-#if wxUSE_MEDIACTRL
-
//---------------------------------------------------------------------------
// Height and Width of movie controller in the movie control (apple samples)
//---------------------------------------------------------------------------
{
public:
wxQTMediaBackend();
- ~wxQTMediaBackend();
+ virtual ~wxQTMediaBackend();
virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
wxWindowID id,
wxMediaCtrlPlayerControls m_interfaceflags; // Saved interface flags
// Event handlers and UPPs/Callbacks
- EventHandlerRef m_windowEventHandler;
+ EventHandlerRef m_windowEventHandler;
EventHandlerUPP m_windowUPP;
MoviePrePrerollCompleteUPP m_preprerollupp;
MCActionFilterWithRefConUPP m_mcactionupp;
- GWorldPtr m_movieWorld; //Offscreen movie GWorld
+ GWorldPtr m_movieWorld; //Offscreen movie GWorld
friend class wxQTMediaEvtHandler;
// Dispose of the movie controller
::DisposeMovieController(m_mc);
m_mc = NULL;
- DisposeMCActionFilterWithRefConUPP(m_mcactionupp);
// Dispose of offscreen GWorld
::DisposeGWorld(m_movieWorld);
if (m_movie)
Cleanup();
- ::ClearMoviesStickyError(); // clear previous errors so
+ ::ClearMoviesStickyError(); // clear previous errors so
// GetMoviesStickyError is useful
-
+
OSErr err = noErr;
short movieResFile;
FSSpec sfFile;
newMovieActive,
NULL); // wasChanged
- //
- // check GetMoviesStickyError() because it may not find the
- // proper codec and play black video and other strange effects,
- // not to mention mess up the dynamic backend loading scheme
- // of wxMediaCtrl - so it just does what the QuickTime player does
- //
- if (err == noErr && ::GetMoviesStickyError() == noErr)
+ // Do not use ::GetMoviesStickyError() here because it returns -2009
+ // a.k.a. invalid track on valid mpegs
+ if (err == noErr && ::GetMoviesError() == noErr)
{
::CloseMovieFile(movieResFile);
if (m_movie)
Cleanup();
- ::ClearMoviesStickyError(); // clear previous errors so
+ ::ClearMoviesStickyError(); // clear previous errors so
// GetMoviesStickyError is useful
wxString theURI = location.BuildURI();
// require it if you don't use a Movie Controller,
// which we don't by default.
//
- m_preprerollupp =
- NewMoviePrePrerollCompleteUPP( wxQTMediaBackend::PPRMProc );
- ::PrePrerollMovie( m_movie, timeNow, playRate,
+ m_preprerollupp = wxQTMediaBackend::PPRMProc;
+ ::PrePrerollMovie( m_movie, timeNow, playRate,
m_preprerollupp, (void*)this);
return true;
// Setup a callback so we can tell when the user presses
// play on the player controls
- m_mcactionupp =
- NewMCActionFilterWithRefConUPP( wxQTMediaBackend::MCFilterProc );
+ m_mcactionupp = wxQTMediaBackend::MCFilterProc;
::MCSetActionFilterWithRefCon( m_mc, m_mcactionupp, (long)this );
wxASSERT(::GetMoviesError() == noErr);
{ kEventClassWindow, kEventWindowActivated },
{ kEventClassWindow, kEventWindowDeactivated }
};
- m_windowUPP =
+ m_windowUPP =
NewEventHandlerUPP( wxQTMediaBackend::WindowEventHandler );
InstallWindowEventHandler(
wrTLW,
m_windowUPP,
GetEventTypeCount( theWindowEventTypes ), theWindowEventTypes,
- this,
+ this,
&m_windowEventHandler );
}
else
//---------------------------------------------------------------------------
void wxQTMediaBackend::FinishLoad()
{
- // Dispose of the PrePrerollMovieUPP if we used it
- DisposeMoviePrePrerollCompleteUPP(m_preprerollupp);
-
// get the real size of the movie
DoLoadBestSize();
| ((flags & wxMEDIACTRLPLAYERCONTROLS_VOLUME)
? 0 : (1 << 2)/*mcFlagSuppressSpeakerButton*/)
//if we take care of repainting ourselves
- // | (1 << 4) /*mcFlagDontInvalidate*/
+ // | (1 << 4) /*mcFlagDontInvalidate*/
);
::MCDoAction(m_mc, 38/*mcActionSetFlags*/, (void*)mcFlags);
//---------------------------------------------------------------------------
wxLongLong wxQTMediaBackend::GetDownloadTotal()
{
- return wxQTMediaBackend::GetDataSizeFromStart(
- ::GetMovieDuration(m_movie)
+ return wxQTMediaBackend::GetDataSizeFromStart(
+ ::GetMovieDuration(m_movie)
);
}
{
if(!m_mc || !m_ctrl->m_bLoaded)
return; //not initialized yet
-
+
if(m_ctrl->MacIsReallyShown())
{
//The window is being shown again, so set the GWorld of the
//controller back to the port of the parent WindowRef
- WindowRef wrTLW =
+ WindowRef wrTLW =
(WindowRef) m_ctrl->MacGetTopLevelWindowRef();
::MCSetControllerPort(m_mc, (CGrafPtr) GetWindowPort(wrTLW));
//We are being hidden - set the GWorld of the controller
//to the offscreen GWorld
::MCSetControllerPort(m_mc, m_movieWorld);
- wxASSERT(::GetMoviesError() == noErr);
+ wxASSERT(::GetMoviesError() == noErr);
}
}
void *inUserData)
{
wxQTMediaBackend* be = (wxQTMediaBackend*) inUserData;
-
+
// Only process keyboard messages on this window if it actually
// has focus, otherwise it will steal keystrokes from other windows!
// As well as when it is not loaded properly as it
// will crash in MCIsPlayerEvent
if((GetEventClass(inEvent) == kEventClassKeyboard &&
- wxWindow::FindFocus() != be->m_ctrl)
+ wxWindow::FindFocus() != be->m_ctrl)
|| !be->m_ctrl->m_bLoaded)
return eventNotHandledErr;
ConvertEventRefToEventRecord( inEvent, &theEvent );
OSStatus err;
- // TODO: Apple says MCIsPlayerEvent is depreciated and
+ // TODO: Apple says MCIsPlayerEvent is depreciated and
// MCClick, MCKey, MCIdle etc. should be used
// (RN: Of course that's what they say about
// CreateMovieControl and HIMovieView as well, LOL!)