From e891b3fae8cc92bba4938075e176f4f131a8db99 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 9 Jan 2014 22:02:11 -0700 Subject: [PATCH] Fixed bug with circlar buffer - Circular buffer code wasn't correctly handling the splitting of newly placed data segments, the code was untested and turned out to just be backwards. It now copied the data to the back and front of the buffer properly. --- libobs/util/circlebuf.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libobs/util/circlebuf.h b/libobs/util/circlebuf.h index deda4cfd9..5f95049ae 100644 --- a/libobs/util/circlebuf.h +++ b/libobs/util/circlebuf.h @@ -132,12 +132,12 @@ static inline void circlebuf_place(struct circlebuf *cb, size_t position, data_end_pos = position + size; if (data_end_pos > cb->capacity) { - size_t back_size = cb->capacity - data_end_pos; + size_t back_size = data_end_pos - cb->capacity; size_t loop_size = size - back_size; if (back_size) - memcpy((uint8_t*)cb->data + position, data, back_size); - memcpy(cb->data, (uint8_t*)data + back_size, loop_size); + memcpy((uint8_t*)cb->data + position, data, loop_size); + memcpy(cb->data, (uint8_t*)data + loop_size, back_size); } else { memcpy((uint8_t*)cb->data + position, data, size); }