]> git.sesse.net Git - vlc/commitdiff
auhal: check if render callback does not want data
authorDavid Fuhrmann <david.fuhrmann@googlemail.com>
Sun, 23 Feb 2014 22:07:06 +0000 (23:07 +0100)
committerDavid Fuhrmann <david.fuhrmann@googlemail.com>
Mon, 24 Feb 2014 14:08:13 +0000 (15:08 +0100)
Indeed this can happen rarely.

modules/audio_output/auhal.c

index 182d9f7f74f8ca065f6bd5b759ade8b5df92090c..3ab1aa04e0dc0c1438766489ae6cfea39a2ef0d7 100644 (file)
@@ -1302,6 +1302,8 @@ static OSStatus RenderCallbackAnalog(vlc_object_t *p_obj,
 
     int bytesRequested = ioData->mBuffers[0].mDataByteSize;
     Float32 *targetBuffer = (Float32*)ioData->mBuffers[0].mData;
+    if (unlikely(bytesRequested == 0)) /* cannot be negative */
+        return noErr;
 
     vlc_mutex_lock(&p_sys->lock);
     /* Pull audio from buffer */
@@ -1314,7 +1316,6 @@ static OSStatus RenderCallbackAnalog(vlc_object_t *p_obj,
         memset(targetBuffer, 0, bytesRequested);
     } else {
         int32_t bytesToCopy = __MIN(bytesRequested, availableBytes);
-        assert(bytesToCopy > 0);
 
         memcpy(targetBuffer, buffer, bytesToCopy);
         TPCircularBufferConsume(&p_sys->circular_buffer, bytesToCopy);
@@ -1349,6 +1350,8 @@ static OSStatus RenderCallbackSPDIF(AudioDeviceID inDevice,
 
     int bytesRequested = outOutputData->mBuffers[p_sys->i_stream_index].mDataByteSize;
     char *targetBuffer = outOutputData->mBuffers[p_sys->i_stream_index].mData;
+    if (unlikely(bytesRequested == 0)) /* cannot be negative */
+        return noErr;
 
     vlc_mutex_lock(&p_sys->lock);
     /* Pull audio from buffer */
@@ -1361,7 +1364,6 @@ static OSStatus RenderCallbackSPDIF(AudioDeviceID inDevice,
         memset(targetBuffer, 0, bytesRequested);
     } else {
         int32_t bytesToCopy = __MIN(bytesRequested, availableBytes);
-        assert(bytesToCopy > 0);
 
         memcpy(targetBuffer, buffer, bytesToCopy);
         TPCircularBufferConsume(&p_sys->circular_buffer, bytesToCopy);