mirror of
https://github.com/libretro/RetroArch
synced 2025-04-16 08:43:10 +00:00
More generic naming for FIFO buffer.
This commit is contained in:
parent
c34a944fcf
commit
0e964c5cc2
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
|
|
||||||
struct rsound_fifo_buffer
|
struct fifo_buffer
|
||||||
{
|
{
|
||||||
char *buffer;
|
char *buffer;
|
||||||
size_t bufsize;
|
size_t bufsize;
|
||||||
@ -23,9 +23,9 @@ struct rsound_fifo_buffer
|
|||||||
size_t end;
|
size_t end;
|
||||||
};
|
};
|
||||||
|
|
||||||
rsound_fifo_buffer_t* rsnd_fifo_new(size_t size)
|
fifo_buffer_t* fifo_new(size_t size)
|
||||||
{
|
{
|
||||||
rsound_fifo_buffer_t *buf = calloc(1, sizeof(*buf));
|
fifo_buffer_t *buf = calloc(1, sizeof(*buf));
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ rsound_fifo_buffer_t* rsnd_fifo_new(size_t size)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rsnd_fifo_free(rsound_fifo_buffer_t* buffer)
|
void fifo_free(fifo_buffer_t* buffer)
|
||||||
{
|
{
|
||||||
assert(buffer);
|
assert(buffer);
|
||||||
assert(buffer->buffer);
|
assert(buffer->buffer);
|
||||||
@ -49,7 +49,7 @@ void rsnd_fifo_free(rsound_fifo_buffer_t* buffer)
|
|||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t rsnd_fifo_read_avail(rsound_fifo_buffer_t* buffer)
|
size_t fifo_read_avail(fifo_buffer_t* buffer)
|
||||||
{
|
{
|
||||||
assert(buffer);
|
assert(buffer);
|
||||||
assert(buffer->buffer);
|
assert(buffer->buffer);
|
||||||
@ -61,7 +61,7 @@ size_t rsnd_fifo_read_avail(rsound_fifo_buffer_t* buffer)
|
|||||||
return end - first;
|
return end - first;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t rsnd_fifo_write_avail(rsound_fifo_buffer_t* buffer)
|
size_t fifo_write_avail(fifo_buffer_t* buffer)
|
||||||
{
|
{
|
||||||
assert(buffer);
|
assert(buffer);
|
||||||
assert(buffer->buffer);
|
assert(buffer->buffer);
|
||||||
@ -74,12 +74,12 @@ size_t rsnd_fifo_write_avail(rsound_fifo_buffer_t* buffer)
|
|||||||
return (buffer->bufsize - 1) - (end - first);
|
return (buffer->bufsize - 1) - (end - first);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rsnd_fifo_write(rsound_fifo_buffer_t* buffer, const void* in_buf, size_t size)
|
void fifo_write(fifo_buffer_t* buffer, const void* in_buf, size_t size)
|
||||||
{
|
{
|
||||||
assert(buffer);
|
assert(buffer);
|
||||||
assert(buffer->buffer);
|
assert(buffer->buffer);
|
||||||
assert(in_buf);
|
assert(in_buf);
|
||||||
assert(rsnd_fifo_write_avail(buffer) >= size);
|
assert(fifo_write_avail(buffer) >= size);
|
||||||
|
|
||||||
size_t first_write = size;
|
size_t first_write = size;
|
||||||
size_t rest_write = 0;
|
size_t rest_write = 0;
|
||||||
@ -97,12 +97,12 @@ void rsnd_fifo_write(rsound_fifo_buffer_t* buffer, const void* in_buf, size_t si
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void rsnd_fifo_read(rsound_fifo_buffer_t* buffer, void* in_buf, size_t size)
|
void fifo_read(fifo_buffer_t* buffer, void* in_buf, size_t size)
|
||||||
{
|
{
|
||||||
assert(buffer);
|
assert(buffer);
|
||||||
assert(buffer->buffer);
|
assert(buffer->buffer);
|
||||||
assert(in_buf);
|
assert(in_buf);
|
||||||
assert(rsnd_fifo_read_avail(buffer) >= size);
|
assert(fifo_read_avail(buffer) >= size);
|
||||||
|
|
||||||
size_t first_read = size;
|
size_t first_read = size;
|
||||||
size_t rest_read = 0;
|
size_t rest_read = 0;
|
||||||
|
@ -21,16 +21,16 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef RSD_FIFO_BUF_TYPEDEF
|
#ifndef FIFO_BUF_TYPEDEF
|
||||||
#define RSD_FIFO_BUF_TYPEDEF
|
#define FIFO_BUF_TYPEDEF
|
||||||
typedef struct rsound_fifo_buffer rsound_fifo_buffer_t;
|
typedef struct fifo_buffer fifo_buffer_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rsound_fifo_buffer_t* rsnd_fifo_new(size_t size);
|
fifo_buffer_t* fifo_new(size_t size);
|
||||||
void rsnd_fifo_write(rsound_fifo_buffer_t* buffer, const void* in_buf, size_t size);
|
void fifo_write(fifo_buffer_t* buffer, const void* in_buf, size_t size);
|
||||||
void rsnd_fifo_read(rsound_fifo_buffer_t* buffer, void* in_buf, size_t size);
|
void fifo_read(fifo_buffer_t* buffer, void* in_buf, size_t size);
|
||||||
void rsnd_fifo_free(rsound_fifo_buffer_t* buffer);
|
void fifo_free(fifo_buffer_t* buffer);
|
||||||
size_t rsnd_fifo_read_avail(rsound_fifo_buffer_t* buffer);
|
size_t fifo_read_avail(fifo_buffer_t* buffer);
|
||||||
size_t rsnd_fifo_write_avail(rsound_fifo_buffer_t* buffer);
|
size_t fifo_write_avail(fifo_buffer_t* buffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,7 +29,7 @@ typedef struct rsd
|
|||||||
bool nonblock;
|
bool nonblock;
|
||||||
volatile bool has_error;
|
volatile bool has_error;
|
||||||
|
|
||||||
rsound_fifo_buffer_t *buffer;
|
fifo_buffer_t *buffer;
|
||||||
|
|
||||||
SDL_mutex *cond_lock;
|
SDL_mutex *cond_lock;
|
||||||
SDL_cond *cond;
|
SDL_cond *cond;
|
||||||
@ -39,9 +39,9 @@ static ssize_t audio_cb(void *data, size_t bytes, void *userdata)
|
|||||||
{
|
{
|
||||||
rsd_t *rsd = userdata;
|
rsd_t *rsd = userdata;
|
||||||
|
|
||||||
size_t avail = rsnd_fifo_read_avail(rsd->buffer);
|
size_t avail = fifo_read_avail(rsd->buffer);
|
||||||
size_t write_size = bytes > avail ? avail : bytes;
|
size_t write_size = bytes > avail ? avail : bytes;
|
||||||
rsnd_fifo_read(rsd->buffer, data, write_size);
|
fifo_read(rsd->buffer, data, write_size);
|
||||||
SDL_CondSignal(rsd->cond);
|
SDL_CondSignal(rsd->cond);
|
||||||
|
|
||||||
return write_size;
|
return write_size;
|
||||||
@ -71,7 +71,7 @@ static void* __rsd_init(const char* device, unsigned rate, unsigned latency)
|
|||||||
rsd->cond_lock = SDL_CreateMutex();
|
rsd->cond_lock = SDL_CreateMutex();
|
||||||
rsd->cond = SDL_CreateCond();
|
rsd->cond = SDL_CreateCond();
|
||||||
|
|
||||||
rsd->buffer = rsnd_fifo_new(1024 * 4);
|
rsd->buffer = fifo_new(1024 * 4);
|
||||||
|
|
||||||
int channels = 2;
|
int channels = 2;
|
||||||
int format = RSD_S16_NE;
|
int format = RSD_S16_NE;
|
||||||
@ -108,9 +108,9 @@ static ssize_t __rsd_write(void* data, const void* buf, size_t size)
|
|||||||
if (rsd->nonblock)
|
if (rsd->nonblock)
|
||||||
{
|
{
|
||||||
rsd_callback_lock(rsd->rd);
|
rsd_callback_lock(rsd->rd);
|
||||||
size_t avail = rsnd_fifo_write_avail(rsd->buffer);
|
size_t avail = fifo_write_avail(rsd->buffer);
|
||||||
size_t write_amt = avail > size ? size : avail;
|
size_t write_amt = avail > size ? size : avail;
|
||||||
rsnd_fifo_write(rsd->buffer, buf, write_amt);
|
fifo_write(rsd->buffer, buf, write_amt);
|
||||||
rsd_callback_unlock(rsd->rd);
|
rsd_callback_unlock(rsd->rd);
|
||||||
return write_amt;
|
return write_amt;
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ static ssize_t __rsd_write(void* data, const void* buf, size_t size)
|
|||||||
while (written < size && !rsd->has_error)
|
while (written < size && !rsd->has_error)
|
||||||
{
|
{
|
||||||
rsd_callback_lock(rsd->rd);
|
rsd_callback_lock(rsd->rd);
|
||||||
size_t avail = rsnd_fifo_write_avail(rsd->buffer);
|
size_t avail = fifo_write_avail(rsd->buffer);
|
||||||
|
|
||||||
if (avail == 0)
|
if (avail == 0)
|
||||||
{
|
{
|
||||||
@ -135,7 +135,7 @@ static ssize_t __rsd_write(void* data, const void* buf, size_t size)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t write_amt = size - written > avail ? avail : size - written;
|
size_t write_amt = size - written > avail ? avail : size - written;
|
||||||
rsnd_fifo_write(rsd->buffer, (const char*)buf + written, write_amt);
|
fifo_write(rsd->buffer, (const char*)buf + written, write_amt);
|
||||||
rsd_callback_unlock(rsd->rd);
|
rsd_callback_unlock(rsd->rd);
|
||||||
written += write_amt;
|
written += write_amt;
|
||||||
}
|
}
|
||||||
@ -174,7 +174,7 @@ static void __rsd_free(void *data)
|
|||||||
rsd_stop(rsd->rd);
|
rsd_stop(rsd->rd);
|
||||||
rsd_free(rsd->rd);
|
rsd_free(rsd->rd);
|
||||||
|
|
||||||
rsnd_fifo_free(rsd->buffer);
|
fifo_free(rsd->buffer);
|
||||||
SDL_DestroyMutex(rsd->cond_lock);
|
SDL_DestroyMutex(rsd->cond_lock);
|
||||||
SDL_DestroyCond(rsd->cond);
|
SDL_DestroyCond(rsd->cond);
|
||||||
|
|
||||||
|
20
audio/sdl.c
20
audio/sdl.c
@ -35,16 +35,16 @@ typedef struct sdl_audio
|
|||||||
|
|
||||||
SDL_mutex *lock;
|
SDL_mutex *lock;
|
||||||
SDL_cond *cond;
|
SDL_cond *cond;
|
||||||
rsound_fifo_buffer_t *buffer;
|
fifo_buffer_t *buffer;
|
||||||
} sdl_audio_t;
|
} sdl_audio_t;
|
||||||
|
|
||||||
static void sdl_audio_cb(void *data, Uint8 *stream, int len)
|
static void sdl_audio_cb(void *data, Uint8 *stream, int len)
|
||||||
{
|
{
|
||||||
sdl_audio_t *sdl = data;
|
sdl_audio_t *sdl = data;
|
||||||
|
|
||||||
size_t avail = rsnd_fifo_read_avail(sdl->buffer);
|
size_t avail = fifo_read_avail(sdl->buffer);
|
||||||
size_t write_size = len > avail ? avail : len;
|
size_t write_size = len > avail ? avail : len;
|
||||||
rsnd_fifo_read(sdl->buffer, stream, write_size);
|
fifo_read(sdl->buffer, stream, write_size);
|
||||||
SDL_CondSignal(sdl->cond);
|
SDL_CondSignal(sdl->cond);
|
||||||
|
|
||||||
// If underrun, fill rest with silence.
|
// If underrun, fill rest with silence.
|
||||||
@ -98,10 +98,10 @@ static void* sdl_audio_init(const char* device, unsigned rate, unsigned latency)
|
|||||||
// Create a buffer twice as big as needed and prefill the buffer.
|
// Create a buffer twice as big as needed and prefill the buffer.
|
||||||
size_t bufsize = out.samples * 4 * sizeof(int16_t);
|
size_t bufsize = out.samples * 4 * sizeof(int16_t);
|
||||||
void *tmp = calloc(1, bufsize);
|
void *tmp = calloc(1, bufsize);
|
||||||
sdl->buffer = rsnd_fifo_new(bufsize);
|
sdl->buffer = fifo_new(bufsize);
|
||||||
if (tmp)
|
if (tmp)
|
||||||
{
|
{
|
||||||
rsnd_fifo_write(sdl->buffer, tmp, bufsize);
|
fifo_write(sdl->buffer, tmp, bufsize);
|
||||||
free(tmp);
|
free(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,9 +117,9 @@ static ssize_t sdl_audio_write(void* data, const void* buf, size_t size)
|
|||||||
if (sdl->nonblock)
|
if (sdl->nonblock)
|
||||||
{
|
{
|
||||||
SDL_LockAudio();
|
SDL_LockAudio();
|
||||||
size_t avail = rsnd_fifo_write_avail(sdl->buffer);
|
size_t avail = fifo_write_avail(sdl->buffer);
|
||||||
size_t write_amt = avail > size ? size : avail;
|
size_t write_amt = avail > size ? size : avail;
|
||||||
rsnd_fifo_write(sdl->buffer, buf, write_amt);
|
fifo_write(sdl->buffer, buf, write_amt);
|
||||||
SDL_UnlockAudio();
|
SDL_UnlockAudio();
|
||||||
ret = write_amt;
|
ret = write_amt;
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ static ssize_t sdl_audio_write(void* data, const void* buf, size_t size)
|
|||||||
while (written < size)
|
while (written < size)
|
||||||
{
|
{
|
||||||
SDL_LockAudio();
|
SDL_LockAudio();
|
||||||
size_t avail = rsnd_fifo_write_avail(sdl->buffer);
|
size_t avail = fifo_write_avail(sdl->buffer);
|
||||||
|
|
||||||
if (avail == 0)
|
if (avail == 0)
|
||||||
{
|
{
|
||||||
@ -141,7 +141,7 @@ static ssize_t sdl_audio_write(void* data, const void* buf, size_t size)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t write_amt = size - written > avail ? avail : size - written;
|
size_t write_amt = size - written > avail ? avail : size - written;
|
||||||
rsnd_fifo_write(sdl->buffer, (const char*)buf + written, write_amt);
|
fifo_write(sdl->buffer, (const char*)buf + written, write_amt);
|
||||||
SDL_UnlockAudio();
|
SDL_UnlockAudio();
|
||||||
written += write_amt;
|
written += write_amt;
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ static void sdl_audio_free(void *data)
|
|||||||
sdl_audio_t *sdl = data;
|
sdl_audio_t *sdl = data;
|
||||||
if (sdl)
|
if (sdl)
|
||||||
{
|
{
|
||||||
rsnd_fifo_free(sdl->buffer);
|
fifo_free(sdl->buffer);
|
||||||
SDL_DestroyMutex(sdl->lock);
|
SDL_DestroyMutex(sdl->lock);
|
||||||
SDL_DestroyCond(sdl->cond);
|
SDL_DestroyCond(sdl->cond);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user