(GX audio) Backport eefc216b0d
This commit is contained in:
parent
ca0bd95c0a
commit
1fa89d67c5
|
@ -39,7 +39,6 @@ typedef struct
|
||||||
volatile unsigned dma_write;
|
volatile unsigned dma_write;
|
||||||
size_t write_ptr;
|
size_t write_ptr;
|
||||||
|
|
||||||
OSCond cond;
|
|
||||||
bool nonblock;
|
bool nonblock;
|
||||||
bool is_paused;
|
bool is_paused;
|
||||||
} gx_audio_t;
|
} gx_audio_t;
|
||||||
|
@ -63,8 +62,6 @@ static void dma_callback(void)
|
||||||
DCFlushRange(wa->data[wa->dma_next], CHUNK_SIZE);
|
DCFlushRange(wa->data[wa->dma_next], CHUNK_SIZE);
|
||||||
|
|
||||||
AIInitDMA((uint32_t)wa->data[wa->dma_next], CHUNK_SIZE);
|
AIInitDMA((uint32_t)wa->data[wa->dma_next], CHUNK_SIZE);
|
||||||
|
|
||||||
OSSignalCond(wa->cond);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *gx_audio_init(const char *device,
|
static void *gx_audio_init(const char *device,
|
||||||
|
@ -95,8 +92,6 @@ static void *gx_audio_init(const char *device,
|
||||||
*new_rate = 48000;
|
*new_rate = 48000;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSInitThreadQueue(&wa->cond);
|
|
||||||
|
|
||||||
wa->dma_write = BLOCKS - 1;
|
wa->dma_write = BLOCKS - 1;
|
||||||
DCFlushRange(wa->data, sizeof(wa->data));
|
DCFlushRange(wa->data, sizeof(wa->data));
|
||||||
stop_audio = false;
|
stop_audio = false;
|
||||||
|
@ -133,8 +128,7 @@ static ssize_t gx_audio_write(void *data, const void *buf_, size_t size)
|
||||||
/* FIXME: Nonblocking audio should break out of loop
|
/* FIXME: Nonblocking audio should break out of loop
|
||||||
* when it has nothing to write. */
|
* when it has nothing to write. */
|
||||||
while ((wa->dma_write == wa->dma_next ||
|
while ((wa->dma_write == wa->dma_next ||
|
||||||
wa->dma_write == wa->dma_busy) && !wa->nonblock)
|
wa->dma_write == wa->dma_busy) && !wa->nonblock);
|
||||||
OSSleepThread(wa->cond);
|
|
||||||
|
|
||||||
copy_swapped(wa->data[wa->dma_write] + wa->write_ptr, buf, to_write);
|
copy_swapped(wa->data[wa->dma_write] + wa->write_ptr, buf, to_write);
|
||||||
|
|
||||||
|
@ -205,10 +199,6 @@ static void gx_audio_free(void *data)
|
||||||
AIStopDMA();
|
AIStopDMA();
|
||||||
AIRegisterDMACallback(NULL);
|
AIRegisterDMACallback(NULL);
|
||||||
|
|
||||||
if (wa->cond)
|
|
||||||
OSCloseThreadQueue(wa->cond);
|
|
||||||
wa->cond = 0;
|
|
||||||
|
|
||||||
free(data);
|
free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue