diff options
| author | dec05eba <dec05eba@protonmail.com> | 2026-08-06 12:56:48 +0200 |
|---|---|---|
| committer | dec05eba <dec05eba@protonmail.com> | 2026-08-06 12:56:48 +0200 |
| commit | 5db30f3fb99545524fc80f87ecc488972aec1711 (patch) | |
| tree | 3dc370e559af78d73a78bf6370f3d02a5e572395 /src/replay_buffer/replay_buffer_ram.c | |
| parent | 3a1ce0e17f209702095aaa86fedeb74400b3d039 (diff) | |
Clear replay data in replay save thread to not block the main capture thread
Diffstat (limited to 'src/replay_buffer/replay_buffer_ram.c')
| -rw-r--r-- | src/replay_buffer/replay_buffer_ram.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/replay_buffer/replay_buffer_ram.c b/src/replay_buffer/replay_buffer_ram.c index 5508a12..680517d 100644 --- a/src/replay_buffer/replay_buffer_ram.c +++ b/src/replay_buffer/replay_buffer_ram.c @@ -125,6 +125,32 @@ static uint8_t* gsr_replay_buffer_ram_iterator_get_packet_data(gsr_replay_buffer return NULL; } +static gsr_replay_buffer* gsr_replay_buffer_ram_take_data(gsr_replay_buffer *replay_buffer) { + gsr_replay_buffer_ram *self = (gsr_replay_buffer_ram*)replay_buffer; + gsr_av_packet_ram **packets = calloc(self->capacity_num_packets, sizeof(gsr_av_packet_ram*)); + if(!packets) + return NULL; + + gsr_replay_buffer_ram *destination = calloc(1, sizeof(gsr_replay_buffer_ram)); + if(!destination) { + free(packets); + return NULL; + } + + gsr_replay_buffer_ram_set_impl_funcs(destination); + + destination->packets = self->packets; + destination->capacity_num_packets = self->capacity_num_packets; + destination->num_packets = self->num_packets; + destination->index = self->index; + + self->packets = packets; + self->num_packets = 0; + self->index = 0; + + return (gsr_replay_buffer*)destination; +} + static gsr_replay_buffer* gsr_replay_buffer_ram_clone(gsr_replay_buffer *replay_buffer) { gsr_replay_buffer_ram *self = (gsr_replay_buffer_ram*)replay_buffer; gsr_replay_buffer_ram *destination = calloc(1, sizeof(gsr_replay_buffer_ram)); @@ -210,6 +236,7 @@ static void gsr_replay_buffer_ram_set_impl_funcs(gsr_replay_buffer_ram *self) { self->replay_buffer.iterator_get_packet = gsr_replay_buffer_ram_iterator_get_packet; self->replay_buffer.iterator_get_packet_data = gsr_replay_buffer_ram_iterator_get_packet_data; self->replay_buffer.clone = gsr_replay_buffer_ram_clone; + self->replay_buffer.take_data = gsr_replay_buffer_ram_take_data; self->replay_buffer.find_packet_index_by_time_passed = gsr_replay_buffer_ram_find_packet_index_by_time_passed; self->replay_buffer.find_keyframe = gsr_replay_buffer_ram_find_keyframe; self->replay_buffer.iterator_next = gsr_replay_buffer_ram_iterator_next; |
