X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e3f3880bc2b13b0ff90a60f676959989da732dd..ed6e7f8cfeb41348e13032c5a323d96bcfb22c6d:/src/mac/carbon/sound.cpp diff --git a/src/mac/carbon/sound.cpp b/src/mac/carbon/sound.cpp index 78a0b6fba9..b3ff384fc8 100644 --- a/src/mac/carbon/sound.cpp +++ b/src/mac/carbon/sound.cpp @@ -14,16 +14,17 @@ #if wxUSE_SOUND +#include "wx/sound.h" + #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/string.h" -#include "wx/log.h" #include "wx/file.h" -#include "wx/sound.h" -#include "wx/timer.h" -#include "wx/intl.h" // Carbon QT Implementation Details - // @@ -35,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 @@ -51,15 +52,7 @@ #endif #endif -#if defined __WXMAC__ && defined __DARWIN__/*TARGET_CARBON*/ -#ifdef __APPLE_CC__ #include -#else -#include -#endif -#else -#include -#endif //quicktime media layer only required for mac emulation on pc #ifndef __WXMAC__ @@ -78,6 +71,13 @@ static wxTimer* lastSoundTimer=NULL; static bool lastSoundIsPlaying=false; +#if !defined(__LP64__) +#define USE_QUICKTIME 1 +#else +#define USE_QUICKTIME 0 +#endif + +#if USE_QUICKTIME // ------------------------------------------------------------------ // wxQTTimer - Handle Asyncronous Playing // ------------------------------------------------------------------ @@ -89,7 +89,7 @@ public: { } - ~wxQTTimer() + virtual ~wxQTTimer() { if(m_pbPlaying) *m_pbPlaying = false; @@ -155,7 +155,7 @@ public: { } - ~wxSMTimer() + virtual ~wxSMTimer() { if(m_pbPlaying) *m_pbPlaying = false; @@ -243,6 +243,8 @@ inline bool wxInitQT () } } +#endif + wxSound::wxSound() : m_hSnd(NULL), m_waveLength(0), m_pTimer(NULL), m_type(wxSound_NONE) { @@ -295,6 +297,8 @@ bool wxSound::DoPlay(unsigned flags) const { Stop(); +#if USE_QUICKTIME + Movie movie; switch(m_type) @@ -385,73 +389,20 @@ bool wxSound::DoPlay(unsigned flags) const return false; OSErr err = noErr ; -//NB: RN: Stefan - I think the 10.3 path functions are broken if kQTNativeDefaultPathStyle is -//going to trigger a warning every time it is used - where its _supposed to be used_!! -//(kQTNativePathStyle is negative but the function argument is unsigned!) -//../src/mac/carbon/sound.cpp: In member function `virtual bool -// wxSound::DoPlay(unsigned int) const': -//../src/mac/carbon/sound.cpp:387: warning: passing negative value ` -// kQTNativeDefaultPathStyle' for argument passing 2 of `OSErr -// QTNewDataReferenceFromFullPathCFString(const __CFString*, long unsigned int, -// long unsigned int, char***, OSType*)' -//../src/mac/carbon/sound.cpp:387: warning: argument of negative value ` -// kQTNativeDefaultPathStyle' to `long unsigned int' -#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()), - //FIXME: Why does this have to be casted? - (unsigned int)kQTNativeDefaultPathStyle, - //FIXME: End - 0, &dataRef, &dataRefType); + Handle dataRef = NULL; + OSType dataRefType; - wxASSERT(err == noErr); + err = QTNewDataReferenceFromFullPathCFString(wxCFStringRef(m_sndname,wxLocale::GetSystemEncoding()), + (UInt32)kQTNativeDefaultPathStyle, 0, &dataRef, &dataRefType); - if (NULL != dataRef || err != noErr) - { - err = NewMovieFromDataRef( &movie, newMovieDontAskUnresolvedDataRefs , NULL, dataRef, dataRefType ); - wxASSERT(err == noErr); - DisposeHandle(dataRef); - } - } - else -#endif + 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) @@ -491,6 +442,7 @@ bool wxSound::DoPlay(unsigned flags) const DisposeMovie(movie); } +#endif return true; } @@ -512,10 +464,13 @@ void wxSound::Stop() void* wxSound::GetHandle() { +#if USE_QUICKTIME if(m_type == wxSound_RESOURCE) return (void*) ((wxSMTimer*)m_pTimer)->GetChannel(); return (void*) ((wxQTTimer*) m_pTimer)->GetMovie(); +#endif + return NULL; } #endif //wxUSE_SOUND