From 7bfb0bb32c0a87115e1c0cf0c19a393c0bff2ecb Mon Sep 17 00:00:00 2001 From: wang-bin Date: Thu, 11 Feb 2016 21:13:58 +0800 Subject: [PATCH] audiotoolbox: fix uint format mapping --- src/output/audio/AudioOutputAudioToolbox.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/output/audio/AudioOutputAudioToolbox.cpp b/src/output/audio/AudioOutputAudioToolbox.cpp index eac33f22..9153080c 100644 --- a/src/output/audio/AudioOutputAudioToolbox.cpp +++ b/src/output/audio/AudioOutputAudioToolbox.cpp @@ -36,6 +36,7 @@ class AudioOutputAudioToolbox Q_DECL_FINAL: public AudioOutputBackend public: AudioOutputAudioToolbox(QObject *parent = 0); QString name() const Q_DECL_OVERRIDE { return QLatin1String(kName);} + bool isSupported(AudioFormat::SampleFormat smpfmt) const Q_DECL_OVERRIDE; bool open() Q_DECL_OVERRIDE; bool close() Q_DECL_OVERRIDE; //bool flush() Q_DECL_OVERRIDE; @@ -43,7 +44,6 @@ public: void onCallback() Q_DECL_OVERRIDE; bool write(const QByteArray& data) Q_DECL_OVERRIDE; bool play() Q_DECL_OVERRIDE; - private: static void outCallback(void* inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer); void tryPauseTimeline(); @@ -82,11 +82,11 @@ FACTORY_REGISTER(AudioOutputBackend, AudioToolbox, kName) static AudioStreamBasicDescription audioFormatToAT(const AudioFormat &format) { + // AudioQueue only supports interleave AudioStreamBasicDescription desc; desc.mSampleRate = format.sampleRate(); desc.mFormatID = kAudioFormatLinearPCM; - desc.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger|kAudioFormatFlagIsPacked; // TODO: float, endian - // FIXME: unsigned int + desc.mFormatFlags = kAudioFormatFlagIsPacked; // TODO: kAudioFormatFlagIsPacked? if (format.isFloat()) desc.mFormatFlags |= kAudioFormatFlagIsFloat; else if (!format.isUnsigned()) @@ -152,6 +152,11 @@ void AudioOutputAudioToolbox::tryPauseTimeline() } } +bool AudioOutputAudioToolbox::isSupported(AudioFormat::SampleFormat smpfmt) const +{ + return !AudioFormat::isPlanar(smpfmt); +} + bool AudioOutputAudioToolbox::open() { m_buffer.resize(buffer_count);