diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-15 09:26:14 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-15 09:26:14 +0200 |
commit | 1925bb404ec47b6e074c5e3b334fe0be12176d7b (patch) | |
tree | 8d7d79ac1b3a549c20bb4fa77c6f457bf1bb61ea /src/plugins/coreaudio | |
parent | 6187b72c51d0c05955d9d814baf8866b8e70fcfe (diff) | |
parent | f9145aca166ad2ca1514524ce88ded7834eb207c (diff) |
Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts:
src/multimedia/playback/playlistfileparser.cpp
src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp
Change-Id: I52950def2b8283ae15797d05d4ead6a1256eba19
Diffstat (limited to 'src/plugins/coreaudio')
-rw-r--r-- | src/plugins/coreaudio/coreaudiosessionmanager.mm | 115 |
1 files changed, 86 insertions, 29 deletions
diff --git a/src/plugins/coreaudio/coreaudiosessionmanager.mm b/src/plugins/coreaudio/coreaudiosessionmanager.mm index 1d46fd4cb..15d1ad86f 100644 --- a/src/plugins/coreaudio/coreaudiosessionmanager.mm +++ b/src/plugins/coreaudio/coreaudiosessionmanager.mm @@ -36,6 +36,10 @@ #import <AVFoundation/AVAudioSession.h> #import <Foundation/Foundation.h> +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) +#include <AudioToolbox/AudioToolbox.h> +#endif + QT_BEGIN_NAMESPACE @interface CoreAudioSessionObserver : NSObject @@ -71,19 +75,24 @@ QT_BEGIN_NAMESPACE self->m_sessionManager = sessionManager; self->m_audioSession = [AVAudioSession sharedInstance]; - //Set up observers - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionInterruption:) - name:AVAudioSessionInterruptionNotification - object:self->m_audioSession]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionMediaServicesWereReset:) - name:AVAudioSessionMediaServicesWereResetNotification - object:self->m_audioSession]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(audioSessionRouteChange:) - name:AVAudioSessionRouteChangeNotification - object:self->m_audioSession]; +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0) +#endif + { + //Set up observers + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(audioSessionInterruption:) + name:AVAudioSessionInterruptionNotification + object:self->m_audioSession]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(audioSessionMediaServicesWereReset:) + name:AVAudioSessionMediaServicesWereResetNotification + object:self->m_audioSession]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(audioSessionRouteChange:) + name:AVAudioSessionRouteChangeNotification + object:self->m_audioSession]; + } return self; } @@ -93,15 +102,22 @@ QT_BEGIN_NAMESPACE #ifdef QT_DEBUG_COREAUDIO qDebug() << Q_FUNC_INFO; #endif - [[NSNotificationCenter defaultCenter] removeObserver:self - name:AVAudioSessionInterruptionNotification - object:self->m_audioSession]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:AVAudioSessionMediaServicesWereResetNotification - object:self->m_audioSession]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:AVAudioSessionRouteChangeNotification - object:self->m_audioSession]; + +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0) +#endif + { + [[NSNotificationCenter defaultCenter] removeObserver:self + name:AVAudioSessionInterruptionNotification + object:self->m_audioSession]; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:AVAudioSessionMediaServicesWereResetNotification + object:self->m_audioSession]; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:AVAudioSessionRouteChangeNotification + object:self->m_audioSession]; + } + [super dealloc]; } @@ -261,6 +277,9 @@ bool CoreAudioSessionManager::setCategory(CoreAudioSessionManager::AudioSessionC targetCategory = AVAudioSessionCategoryAudioProcessing; break; case CoreAudioSessionManager::MultiRoute: +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0) +#endif targetCategory = AVAudioSessionCategoryMultiRoute; break; } @@ -268,9 +287,16 @@ bool CoreAudioSessionManager::setCategory(CoreAudioSessionManager::AudioSessionC if (targetCategory == nil) return false; - return [[m_sessionObserver audioSession] setCategory:targetCategory - withOptions:(AVAudioSessionCategoryOptions)options - error:nil]; +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion < QSysInfo::MV_IOS_6_0) { + return [[m_sessionObserver audioSession] setCategory:targetCategory error:nil]; + } else +#endif + { + return [[m_sessionObserver audioSession] setCategory:targetCategory + withOptions:(AVAudioSessionCategoryOptions)options + error:nil]; + } } bool CoreAudioSessionManager::setMode(CoreAudioSessionManager::AudioSessionModes mode) @@ -293,6 +319,9 @@ bool CoreAudioSessionManager::setMode(CoreAudioSessionManager::AudioSessionModes targetMode = AVAudioSessionModeMeasurement; break; case CoreAudioSessionManager::MoviePlayback: +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0) +#endif targetMode = AVAudioSessionModeMoviePlayback; break; } @@ -321,7 +350,11 @@ CoreAudioSessionManager::AudioSessionCategorys CoreAudioSessionManager::category localCategory = PlayAndRecord; } else if (category == AVAudioSessionCategoryAudioProcessing) { localCategory = AudioProcessing; - } else if (category == AVAudioSessionCategoryMultiRoute) { + } else if ( +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0 && +#endif + category == AVAudioSessionCategoryMultiRoute) { localCategory = MultiRoute; } @@ -343,7 +376,11 @@ CoreAudioSessionManager::AudioSessionModes CoreAudioSessionManager::mode() localMode = VideoRecording; } else if (mode == AVAudioSessionModeMeasurement) { localMode = Measurement; - } else if (mode == AVAudioSessionModeMoviePlayback) { + } else if ( +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_6_0 && +#endif + mode == AVAudioSessionModeMoviePlayback) { localMode = MoviePlayback; } @@ -372,12 +409,32 @@ QList<QByteArray> CoreAudioSessionManager::outputDevices() float CoreAudioSessionManager::currentIOBufferDuration() { - return [[m_sessionObserver audioSession] IOBufferDuration]; +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion < QSysInfo::MV_IOS_6_0) { + Float32 duration; + UInt32 size = sizeof(duration); + AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, &size, &duration); + return duration; + } else +#endif + { + return [[m_sessionObserver audioSession] IOBufferDuration]; + } } float CoreAudioSessionManager::preferredSampleRate() { - return [[m_sessionObserver audioSession] preferredSampleRate]; +#if QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_6_0) + if (QSysInfo::MacintoshVersion < QSysInfo::MV_IOS_6_0) { + Float64 sampleRate; + UInt32 size = sizeof(sampleRate); + AudioSessionGetProperty(kAudioSessionProperty_PreferredHardwareSampleRate, &size, &sampleRate); + return sampleRate; + } else +#endif + { + return [[m_sessionObserver audioSession] preferredSampleRate]; + } } #ifdef QT_DEBUG_COREAUDIO |