X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c9528e9de846293d65b5ca66b17e12f6afb0759d..079b2f6ba2a999a3f9a284e5265abf43f7200635:/src/mac/carbon/sound.cpp diff --git a/src/mac/carbon/sound.cpp b/src/mac/carbon/sound.cpp index 2aa657b7a0..b4ecddd1e0 100644 --- a/src/mac/carbon/sound.cpp +++ b/src/mac/carbon/sound.cpp @@ -1,27 +1,30 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: sound.cpp +// Name: src/mac/carbon/sound.cpp // Purpose: wxSound class implementation: optional // Author: Ryan Norton -// Modified by: +// Modified by: Stefan Csomor // Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) Ryan Norton, Stefan Csomor -// Licence: wxWindows licence +// Copyright: (c) Ryan Norton +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "sound.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_SOUND -#include "wx/object.h" -#include "wx/string.h" -#include "wx/log.h" -#include "wx/file.h" #include "wx/sound.h" -#include "wx/timer.h" -#include "wx/intl.h" -#if wxUSE_SOUND +#ifndef WX_PRECOMP + #include "wx/object.h" + #include "wx/string.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/timer.h" +#endif + +#include "wx/file.h" // Carbon QT Implementation Details - // @@ -33,9 +36,9 @@ // 5) IsMovieDone(), MoviesTask() //2nd param is minimum wait time to allocate to quicktime // // File: -// 1) Obtain FSSpec -// 2) Call OpenMovieFile -// 3) Call NewMovieFromFile +// 1) Path as CFString +// 2) Call QTNewDataReferenceFromFullPathCFString +// 3) Call NewMovieFromDataRef // 4) Call CloseMovieFile // 4) PlayMovie(); // 5) IsMovieDone(), MoviesTask() //2nd param is minimum wait time to allocate to quicktime @@ -43,9 +46,11 @@ #ifdef __WXMAC__ #include "wx/mac/uma.h" +#ifndef __DARWIN__ #include #include #endif +#endif #if defined __WXMAC__ && defined __DARWIN__/*TARGET_CARBON*/ #ifdef __APPLE_CC__ @@ -62,7 +67,11 @@ #include #endif +#ifndef __DARWIN__ #include +#else +#include +#endif //Time between timer calls #define MOVIE_DELAY 100 @@ -81,7 +90,7 @@ public: { } - ~wxQTTimer() + virtual ~wxQTTimer() { if(m_pbPlaying) *m_pbPlaying = false; @@ -90,7 +99,7 @@ public: DisposeMovie(m_movie); Stop(); - //Note that ExitMovies() is not neccessary, but + //Note that ExitMovies() is not necessary, but //the docs are fuzzy on whether or not TerminateQTML is ExitMovies(); @@ -147,7 +156,7 @@ public: { } - ~wxSMTimer() + virtual ~wxSMTimer() { if(m_pbPlaying) *m_pbPlaying = false; @@ -223,7 +232,7 @@ inline bool wxInitQT () int nError; //-2093 no dll if ((nError = InitializeQTML(0)) != noErr) - wxLogSysError(wxString::Format("Couldn't Initialize Quicktime-%i", nError)); + wxLogSysError(wxString::Format(wxT("Couldn't Initialize Quicktime-%i"), nError)); #endif EnterMovies(); return true; @@ -377,56 +386,22 @@ bool wxSound::DoPlay(unsigned flags) const return false; OSErr err = noErr ; -#if defined( __WXMAC__ ) && TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 ) - if ( UMAGetSystemVersion() >= 0x1030 ) - { - Handle dataRef = NULL; - OSType dataRefType; - - err = QTNewDataReferenceFromFullPathCFString(wxMacCFStringHolder(m_sndname,wxLocale::GetSystemEncoding()), - kQTNativeDefaultPathStyle, 0, &dataRef, &dataRefType); - - if (NULL != dataRef) - { - err = NewMovieFromDataRef( &movie, newMovieDontAskUnresolvedDataRefs , NULL, dataRef, dataRefType ); - DisposeHandle(dataRef); - } - } - else -#endif + + Handle dataRef = NULL; + OSType dataRefType; + + err = QTNewDataReferenceFromFullPathCFString(wxMacCFStringHolder(m_sndname,wxLocale::GetSystemEncoding()), + (UInt32)kQTNativeDefaultPathStyle, 0, &dataRef, &dataRefType); + + wxASSERT(err == noErr); + + if (NULL != dataRef || err != noErr) { - short movieResFile; - FSSpec sfFile; -#ifdef __WXMAC__ - wxMacFilename2FSSpec( m_sndname , &sfFile ) ; -#else - int nError; - if ((nError = NativePathNameToFSSpec ((char*) m_sndname.c_str(), &sfFile, 0)) != noErr) - { - wxLogSysError(wxString::Format(wxT("File:%s does not exist\nError:%i"), - m_sndname.c_str(), nError)); - return false; - } -#endif - if (OpenMovieFile (&sfFile, &movieResFile, fsRdPerm) != noErr) - { - wxLogSysError(wxT("Quicktime couldn't open the file")); - return false; - } - short movieResID = 0; - Str255 movieName; - - err = NewMovieFromFile ( - &movie, - movieResFile, - &movieResID, - movieName, - newMovieActive, - NULL); //wasChanged - - CloseMovieFile (movieResFile); + err = NewMovieFromDataRef( &movie, newMovieDontAskUnresolvedDataRefs , NULL, dataRef, dataRefType ); + wxASSERT(err == noErr); + DisposeHandle(dataRef); } - + if (err != noErr) { wxLogSysError( @@ -457,8 +432,10 @@ bool wxSound::DoPlay(unsigned flags) const wxASSERT_MSG(!(flags & wxSOUND_LOOP), wxT("Can't loop and play syncronously at the same time")); //Play movie until it ends, then exit + //Note that due to quicktime caching this may not always + //work 100% correctly while (!IsMovieDone(movie)) - MoviesTask(movie, 0); + MoviesTask(movie, 1); DisposeMovie(movie); }