From b065dd8117fe4b04fda9a6fc56ba9bfd2eea9b02 Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Mon, 20 Sep 2021 14:28:22 +0200 Subject: [PATCH] ring_buffer: add fill() function --- src/utils/ring_buffer.cpp | 20 ++++++++++++++++++++ src/utils/ring_buffer.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/utils/ring_buffer.cpp b/src/utils/ring_buffer.cpp index ca33472a1..968cd00ae 100644 --- a/src/utils/ring_buffer.cpp +++ b/src/utils/ring_buffer.cpp @@ -228,6 +228,26 @@ int ring_get_size(struct ring_buffer * ring) { return ring->len; } +void ring_fill(struct ring_buffer *ring, int c, int size){ + void *ptr1; + int size1; + void *ptr2; + int size2; + if(!ring_get_write_regions(ring, size, &ptr1, &size1, &ptr2, &size2)){ + fprintf(stderr, "Warning: too long write request for ring buffer (%d B)!!!\n", size); + return; + } + + memset(ptr1, c, size1); + if(ptr2){ + memset(ptr2, c, size2); + } + + if(ring_advance_write_idx(ring, size)) { + fprintf(stderr, "Warning: ring buffer overflow!!!\n"); + } +} + /* ring_get_current_size and ring_get_available_write_size can be called from * both reader and writer threads. * diff --git a/src/utils/ring_buffer.h b/src/utils/ring_buffer.h index b9b02c281..fc6d7b8f0 100644 --- a/src/utils/ring_buffer.h +++ b/src/utils/ring_buffer.h @@ -137,6 +137,8 @@ int ring_get_write_regions(struct ring_buffer *ring, int requested_len, */ bool ring_advance_write_idx(struct ring_buffer *ring, int amount); +void ring_fill(struct ring_buffer *ring, int c, int size); + extern struct audio_buffer_api ring_buffer_fns; #ifdef __cplusplus