Explorar o código

Add patches fixing hangs and noise in the ios audio output module

If these seem to work well for others, they can be committed to
vlc.git soon.
Martin Storsjö %!s(int64=12) %!d(string=hai) anos
pai
achega
c2c014765f

+ 35 - 0
patches/0015-Revert-audiounit_ios-try-to-handle-data-drops-more-e.patch

@@ -0,0 +1,35 @@
+From 50d11f576c5ef6bda8cad157f737fe571da4bcb7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
+Date: Tue, 23 Jul 2013 16:39:30 +0300
+Subject: [PATCH 15/16] Revert "audiounit_ios: try to handle data drops more
+ efficiently"
+
+This (more or less) reverts commit
+2b7e016807507b632b8e0a7c874030bdffb2f604.
+
+Stopping the aout from within the callback like this could
+lead to deadlocks, where AudioOutputUnitStop in the callback thread
+and AudioOutputUnitStart in the audio decoder thread blocked each
+other (noticed at startup of playback on a 3GS with iOS 6.0).
+---
+ modules/audio_output/audiounit_ios.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/audio_output/audiounit_ios.c b/modules/audio_output/audiounit_ios.c
+index 1faaf58..974d172 100644
+--- a/modules/audio_output/audiounit_ios.c
++++ b/modules/audio_output/audiounit_ios.c
+@@ -383,8 +383,8 @@ static OSStatus RenderCallback(vlc_object_t *p_obj,
+ 
+     /* check if we have enough data */
+     if (!availableBytes) {
+-        /* bail out and restart unit the next time we receive some data */
+-        Flush(p_aout, false);
++        /* return an empty buffer so silence is played until we have data */
++        memset(targetBuffer, 0, bytesToCopy);
+     } else {
+         memcpy(targetBuffer, buffer, __MIN(bytesToCopy, availableBytes));
+         TPCircularBufferConsume(&p_sys->circular_buffer, __MIN(bytesToCopy, availableBytes));
+-- 
+1.7.9.4
+

+ 29 - 0
patches/0016-audiounit_ios-Fill-the-remainder-of-the-buffer-with-.patch

@@ -0,0 +1,29 @@
+From ce1447cd2334fa3af8f770a3041c5ad1b9aeac1a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
+Date: Tue, 23 Jul 2013 16:58:36 +0300
+Subject: [PATCH 16/16] audiounit_ios: Fill the remainder of the buffer with
+ zeros
+
+If we didn't have enough data to fill the buffer, fill the rest
+of it with zeros. This is better than playing back whatever happened
+to be there from before.
+---
+ modules/audio_output/audiounit_ios.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/modules/audio_output/audiounit_ios.c b/modules/audio_output/audiounit_ios.c
+index 974d172..b780fd0 100644
+--- a/modules/audio_output/audiounit_ios.c
++++ b/modules/audio_output/audiounit_ios.c
+@@ -389,6 +389,8 @@ static OSStatus RenderCallback(vlc_object_t *p_obj,
+         memcpy(targetBuffer, buffer, __MIN(bytesToCopy, availableBytes));
+         TPCircularBufferConsume(&p_sys->circular_buffer, __MIN(bytesToCopy, availableBytes));
+         VLC_UNUSED(inNumberFrames);
++        if (availableBytes < bytesToCopy)
++            memset((uint8_t*) targetBuffer + availableBytes, 0, bytesToCopy - availableBytes);
+     }
+ 
+     return noErr;
+-- 
+1.7.9.4
+