mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2025-07-23 12:44:19 +00:00
Don't try to be clever and stall the audio thread while we await samples. Start audio output earlier to allow it some extra warmup time.
This commit is contained in:
parent
b1938610dd
commit
35e2ca1e00
@ -106,7 +106,6 @@ void ArRelease(void)
|
|||||||
void ArStart(void)
|
void ArStart(void)
|
||||||
{
|
{
|
||||||
printf("Start audio\n");
|
printf("Start audio\n");
|
||||||
AudioOutputUnitStart(audioUnit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArStop(void)
|
void ArStop(void)
|
||||||
@ -292,6 +291,13 @@ void ClDisplayTransientMessage(char* message)
|
|||||||
NSLog(@"Unable to initialize audioUnit: %d", (int32_t)status);
|
NSLog(@"Unable to initialize audioUnit: %d", (int32_t)status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We start here because it seems to need some warmup time
|
||||||
|
// before it starts accepting samples
|
||||||
|
status = AudioOutputUnitStart(audioUnit);
|
||||||
|
if (status) {
|
||||||
|
NSLog(@"Unable to start audioUnit: %d", (int32_t)status);
|
||||||
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,9 +311,15 @@ static OSStatus playbackCallback(void *inRefCon,
|
|||||||
// Fill them up as much as you can. Remember to set the size value in each buffer to match how
|
// Fill them up as much as you can. Remember to set the size value in each buffer to match how
|
||||||
// much data is in the buffer.
|
// much data is in the buffer.
|
||||||
|
|
||||||
|
bool ranOutOfData = false;
|
||||||
for (int i = 0; i < ioData->mNumberBuffers; i++) {
|
for (int i = 0; i < ioData->mNumberBuffers; i++) {
|
||||||
ioData->mBuffers[i].mNumberChannels = 2;
|
ioData->mBuffers[i].mNumberChannels = 2;
|
||||||
|
|
||||||
|
if (ranOutOfData) {
|
||||||
|
ioData->mBuffers[i].mDataByteSize = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (ioData->mBuffers[i].mDataByteSize != 0) {
|
if (ioData->mBuffers[i].mDataByteSize != 0) {
|
||||||
int thisBufferOffset = 0;
|
int thisBufferOffset = 0;
|
||||||
|
|
||||||
@ -317,19 +329,22 @@ static OSStatus playbackCallback(void *inRefCon,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for a buffer to be available
|
|
||||||
// FIXME: This needs optimization to avoid busy waiting for buffers
|
|
||||||
struct AUDIO_BUFFER_QUEUE_ENTRY *audioEntry = NULL;
|
struct AUDIO_BUFFER_QUEUE_ENTRY *audioEntry = NULL;
|
||||||
while (audioEntry == NULL)
|
|
||||||
{
|
[audioLock lock];
|
||||||
[audioLock lock];
|
if (audioBufferQueue != NULL) {
|
||||||
if (audioBufferQueue != NULL) {
|
// Dequeue this entry temporarily
|
||||||
// Dequeue this entry temporarily
|
audioEntry = audioBufferQueue;
|
||||||
audioEntry = audioBufferQueue;
|
audioBufferQueue = audioBufferQueue->next;
|
||||||
audioBufferQueue = audioBufferQueue->next;
|
audioBufferQueueLength--;
|
||||||
audioBufferQueueLength--;
|
}
|
||||||
}
|
[audioLock unlock];
|
||||||
[audioLock unlock];
|
|
||||||
|
if (audioEntry == NULL) {
|
||||||
|
// No data left
|
||||||
|
ranOutOfData = true;
|
||||||
|
ioData->mBuffers[i].mDataByteSize = thisBufferOffset;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Figure out how much data we can write
|
// Figure out how much data we can write
|
||||||
|
Loading…
x
Reference in New Issue
Block a user