diff --git a/configure.ac b/configure.ac index 3e2381d6139d7c6aeb7e50d95e12fc7103decd07..46aab00349027273084d0fe38b040a9f4a4ad89e 100644 --- a/configure.ac +++ b/configure.ac @@ -102,7 +102,7 @@ AM_CONDITIONAL(HAVE_IOS, test "${HAVE_IOS}" = "1") dnl FIXME this should be deduced automatically AC_DEFINE_UNQUOTED([HAVE_COREAUDIO], - `if test "${HAVE_OSX}" = "1"; then echo 1; else echo 0; fi`, + `if test "${HAVE_OSX}" = "1" || test "${HAVE_IOS}" = "1"; then echo 1; else echo 0; fi`, [Define if you have CoreAudio]) dnl Android is linux, but a bit different diff --git a/src/media/audio/Makefile.am b/src/media/audio/Makefile.am index 0b4a8de7e97633aff22cd37ad54d6dd85682056b..b26233d9b03649bc9c2d14dc7c88361b88158e40 100644 --- a/src/media/audio/Makefile.am +++ b/src/media/audio/Makefile.am @@ -24,6 +24,10 @@ if HAVE_OSX SUBDIRS += coreaudio endif +if HAVE_IOS +SUBDIRS += coreaudio +endif + if HAVE_PORTAUDIO SUBDIRS += portaudio endif @@ -89,6 +93,10 @@ if HAVE_OSX libaudio_la_LIBADD += ./coreaudio/libcoreaudiolayer.la endif +if HAVE_IOS +libaudio_la_LIBADD += ./coreaudio/libcoreaudiolayer.la +endif + if BUILD_OPENSL libaudio_la_LIBADD += ./opensl/libopensl.la libaudio_la_LDFLAGS += -lOpenSLES diff --git a/src/media/audio/coreaudio/Makefile.am b/src/media/audio/coreaudio/Makefile.am index 1969b70316e52011e4950a219db9ccb840aa921b..be060ee9618ef6a077639d1c16a3041809b3f429 100644 --- a/src/media/audio/coreaudio/Makefile.am +++ b/src/media/audio/coreaudio/Makefile.am @@ -4,5 +4,9 @@ if HAVE_OSX noinst_LTLIBRARIES = libcoreaudiolayer.la endif +if HAVE_IOS +noinst_LTLIBRARIES = libcoreaudiolayer.la +endif + libcoreaudiolayer_la_SOURCES = corelayer.cpp corelayer.h audiodevice.cpp audiodevice.h libcoreaudiolayer_la_CXXFLAGS = -I$(top_srcdir)/src diff --git a/src/media/audio/coreaudio/audiodevice.cpp b/src/media/audio/coreaudio/audiodevice.cpp index 2241acaf11e102cf098e27b8180ee257bfb98253..7389c60deb7f5c6ee9b7b7f8594d0ae96acffbd6 100644 --- a/src/media/audio/coreaudio/audiodevice.cpp +++ b/src/media/audio/coreaudio/audiodevice.cpp @@ -20,6 +20,8 @@ #include "audiodevice.h" +#if !TARGET_OS_IPHONE + namespace ring { AudioDevice::AudioDevice(AudioDeviceID devid, bool isInput) @@ -168,3 +170,5 @@ std::string AudioDevice::getName() const } } // namespace ring + +#endif // TARGET_OS_IPHONE diff --git a/src/media/audio/coreaudio/audiodevice.h b/src/media/audio/coreaudio/audiodevice.h index ba24605c8ff59241a9c213b8afd1a00cf030d6d3..f309bbcfa69033e034a3b2ad16981a3280c47264 100644 --- a/src/media/audio/coreaudio/audiodevice.h +++ b/src/media/audio/coreaudio/audiodevice.h @@ -21,14 +21,19 @@ #ifndef AUDIO_DEVICE_H #define AUDIO_DEVICE_H +#import <TargetConditionals.h> + +#if !TARGET_OS_IPHONE #include <CoreServices/CoreServices.h> #include <CoreAudio/CoreAudio.h> +#endif #include <string> namespace ring { class AudioDevice { +#if !TARGET_OS_IPHONE public: AudioDevice() : id_(kAudioDeviceUnknown) { } AudioDevice(AudioDeviceID devid, bool isInput); @@ -48,6 +53,7 @@ public: private: int countChannels() const; std::string getName() const; +#endif }; } diff --git a/src/media/audio/coreaudio/corelayer.cpp b/src/media/audio/coreaudio/corelayer.cpp index c07f70fa302265ff1976bdc901e14ac0735cec65..5912bba21a4649c6dd68b83a3030244931d6d9b8 100644 --- a/src/media/audio/coreaudio/corelayer.cpp +++ b/src/media/audio/coreaudio/corelayer.cpp @@ -57,8 +57,10 @@ std::vector<std::string> CoreLayer::getCaptureDeviceList() const { std::vector<std::string> ret; +#if !TARGET_OS_IPHONE for (auto x : getDeviceList(true)) ret.push_back(x.name_); +#endif return ret; } @@ -67,10 +69,10 @@ std::vector<std::string> CoreLayer::getPlaybackDeviceList() const { std::vector<std::string> ret; +#if !TARGET_OS_IPHONE for (auto x : getDeviceList(false)) - { ret.push_back(x.name_); - } +#endif return ret; } @@ -175,6 +177,7 @@ void CoreLayer::initAudioLayerIO() // Input buffer setup. Note that ioData is empty and we have to store data // in another buffer. +#if !TARGET_OS_IPHONE UInt32 bufferSizeFrames = 0; size = sizeof(UInt32); checkErr(AudioUnitGetProperty(ioUnit_, @@ -183,6 +186,14 @@ void CoreLayer::initAudioLayerIO() outputBus, &bufferSizeFrames, &size)); +#else + Float32 bufferDuration; + UInt32 propSize = sizeof(Float32); + AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, + &propSize, + &bufferDuration); + UInt32 bufferSizeFrames = audioInputFormat_.sample_rate * bufferDuration; +#endif UInt32 bufferSizeBytes = bufferSizeFrames * sizeof(Float32); size = offsetof(AudioBufferList, mBuffers[0]) + @@ -392,6 +403,7 @@ void CoreLayer::updatePreference(AudioPreference &preference, int index, DeviceT std::vector<AudioDevice> CoreLayer::getDeviceList(bool getCapture) const { std::vector<AudioDevice> ret; +#if !TARGET_OS_IPHONE UInt32 propsize; AudioObjectPropertyAddress theAddress = { @@ -422,7 +434,7 @@ std::vector<AudioDevice> CoreLayer::getDeviceList(bool getCapture) const } } delete[] devids; - +#endif return ret; } diff --git a/src/media/audio/coreaudio/corelayer.h b/src/media/audio/coreaudio/corelayer.h index 51afd5ac7f7109d0e3378ee84f30efdd365d854b..b0a00b863e186c7c23bea085ee59776846e812bf 100644 --- a/src/media/audio/coreaudio/corelayer.h +++ b/src/media/audio/coreaudio/corelayer.h @@ -25,7 +25,9 @@ #include "noncopyable.h" #include <CoreFoundation/CoreFoundation.h> #include <AudioToolbox/AudioToolbox.h> +#if !TARGET_OS_IPHONE #include <CoreAudio/AudioHardware.h> +#endif #define checkErr( err) \ if(err) {\