osxaudiosrc: iOS resampling causes stuttering
authorIlya Konstantinov <ilya.konstantinov@gmail.com>
Tue, 24 Feb 2015 03:57:24 +0000 (05:57 +0200)
committerArun Raghavan <git@arunraghavan.net>
Tue, 24 Feb 2015 10:51:11 +0000 (16:21 +0530)
commit8ca40fa86f09d84a2e6d27a045db092b2986b06c
tree3c113d275393884abd011f41e46a03ea489df279
parente3ca4d1c86813338915e2e143e4d4675e40c45ea
osxaudiosrc: iOS resampling causes stuttering

Fixes stuttering audio when iOS AU is resampling. To make AU resample,
one has to request a rate that differs from AVAudioSession's
sampleRate. The resampling itself is not the culprit, but rather our
API misuse.

AudioUnitRender modifies the mDataByteSize members with the
actual read bytes count. Therefore, they must be reinitialized
before each AudioUnitRender. (The buffers themselves can be
preallocated.)

The "stutter" was caused by one AudioUnitRender making the buffer
too small for other AudioUnitRender invocations, making them fail
with -50 (paramErr). By way of luck, when AU didn't resample, all
AudioUnitRender invocations read the same number of bytes.

(This patch addresses some non-interleaved audio concerns, but
at this moment the elements do not support non-interleaved audio
and non-interleaved is untested.)

https://bugzilla.gnome.org/show_bug.cgi?id=744922
sys/osxaudio/gstosxaudiosrc.c
sys/osxaudio/gstosxcoreaudio.c
sys/osxaudio/gstosxcoreaudio.h
sys/osxaudio/gstosxcoreaudiocommon.c
sys/osxaudio/gstosxcoreaudiocommon.h