Files
BuildTools
Qt
Src
Agave
Components
Elevator
Mastering
Plugins
ReplayGainAnalysis
WAT
Wasabi
Wasabi2
Winamp
aacPlus
aacdec
aacdec-mft
adpcm
alac
albumart
apev2
auth
bmp
burnlib
codesign
config
devices
external_dependencies
f263
filereader
freetypewac
gif
gracenote
h264
h264dec
id3v2
ie_plugin
installer
jpeg
libvp6
libvpShared
mp3-mpg123
mp4v
mpeg4dec
nde
nprt_plugin
ns-eel
ns-eel2
nsavi
nsmkv
nsutil
nsv
nsvdec_vp3
nsvdec_vp5
nsvdec_vp6
nswasabi
nu
omBrowser
pcm
pfc
playlist
plist
png
replicant
Wasabi
application
audio
component
decode
file
filelock
foundation
http
icy
jnetlib
metadata
mp4
nsaac
nsapev2
nsid3v1
nsid3v2
nsmp3
nsmp3dec
nswasabi
nu
win
win-amd64
win-x86
x86
AutoBuffer.h
AutoChar.h
AutoLock.h
AutoWide.h
Benchmark.h
BitReader.cpp
BitReader.h
ByteReader.c
ByteReader.h
ByteWriter.c
ByteWriter.h
LockFreeFIFO.cpp
LockFreeFIFO.h
LockFreeItem.h
LockFreeLIFO.c
LockFreeLIFO.h
LockFreeRingBuffer.cpp
LockFreeRingBuffer.h
MessageLoop.h
Pairs.h
ProgressTracker.cpp
ProgressTracker.h
RingBuffer.cpp
RingBuffer.h
SafeSize.h
ThreadLoop.h
lfitem.c
lfitem.h
lfmpscq.c
lfmpscq.h
lfringbuffer.c
lfringbuffer.h
nodelist.c
nodelist.h
ns_wc.h
nu.sln
nu.vcxproj
nu.vcxproj.filters
precomp.h
queue_node.h
strsafe.h
utf.c
utf.h
nx
ogg
player
replaygain
replicant
service
ssdp
syscb
ultravox
resources
tagz
tataki
theora
timer
vlb
vp32
vp6
vp8x
wbm
winampAll
winampa
xml
xspf
vcpkg-ports
.gitignore
LICENSE.md
README.md
automate-git.py
cef_x86.bat
install-packages.cmd
vcpkg_version_finder.py
winampAll_2019.sln
winamp/Src/replicant/nu/lfringbuffer.h
2024-09-24 14:54:57 +02:00

47 lines
1.7 KiB
C

#pragma once
#include "foundation/types.h"
/* lock free floating point ring buffer
generic implementation
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef struct lfringbuffer_s { } *lfringbuffer_t;
/* create a ring buffer with the desired number of elements */
int lfringbuffer_create(lfringbuffer_t *out_ring_buffer, size_t number_of_elements);
int lfringbuffer_destroy(lfringbuffer_t ring_buffer);
/* ----- Read functions ----- */
/* get how many elements can currently be read */
size_t lfringbuffer_read_available(lfringbuffer_t ring_buffer);
/* retrieve a pointer that can be read from.
you might have to call this twice, because of ring buffer wraparound
call lfringbuffer_read_update() when you are done */
int lfringbuffer_read_get(lfringbuffer_t ring_buffer, size_t elements_requested, const float **out_buffer, size_t *elements_available);
/* call to acknowledge that you have read the bytes */
void lfringbuffer_read_update(lfringbuffer_t ring_buffer, size_t elements_read);
/* ----- Write functions ----- */
/* get how many elements can currently be written */
size_t lfringbuffer_write_available(lfringbuffer_t ring_buffer);
/* retrieve a pointer that can be written to.
you might have to call this twice, because of ring buffer wraparound
call lfringbuffer_write_update() when you are done */
int lfringbuffer_write_get(lfringbuffer_t ring_buffer, size_t elements_requested, float **out_buffer, size_t *elements_available);
/* call to acknowledge that you have written the bytes */
void lfringbuffer_write_update(lfringbuffer_t ring_buffer, size_t elements_read);
size_t lfringbuffer_write_get_position(lfringbuffer_t ring_buffer);
#ifdef __cplusplus
}
#endif