aboutsummaryrefslogtreecommitdiff
path: root/src/encoder/encoder.c
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-05-04 20:36:34 +0200
committerdec05eba <dec05eba@protonmail.com>2025-05-04 21:24:07 +0200
commit36c74d3411a543c4452d367275182e0a8619cec4 (patch)
tree719bda3bd2c97472c54122253070ce39835910f3 /src/encoder/encoder.c
parent2ca5f3361c341dee5087a109a721103dd95869ff (diff)
Add -replay-storage option to specify if temporary replay data should be stored in ram or disk
Diffstat (limited to 'src/encoder/encoder.c')
-rw-r--r--src/encoder/encoder.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/encoder/encoder.c b/src/encoder/encoder.c
index d35cbbe..0f8eda5 100644
--- a/src/encoder/encoder.c
+++ b/src/encoder/encoder.c
@@ -7,7 +7,7 @@
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
-bool gsr_encoder_init(gsr_encoder *self, size_t replay_buffer_num_packets) {
+bool gsr_encoder_init(gsr_encoder *self, gsr_replay_storage replay_storage, size_t replay_buffer_num_packets, double replay_buffer_time, const char *replay_directory) {
memset(self, 0, sizeof(*self));
self->num_recording_destinations = 0;
self->recording_destination_id_counter = 0;
@@ -19,12 +19,12 @@ bool gsr_encoder_init(gsr_encoder *self, size_t replay_buffer_num_packets) {
self->mutex_created = true;
if(replay_buffer_num_packets > 0) {
- if(!gsr_replay_buffer_init(&self->replay_buffer, replay_buffer_num_packets)) {
+ self->replay_buffer = gsr_replay_buffer_create(replay_storage, replay_directory, replay_buffer_time, replay_buffer_num_packets);
+ if(!self->replay_buffer) {
fprintf(stderr, "gsr error: gsr_encoder_init: failed to create replay buffer\n");
gsr_encoder_deinit(self);
return false;
}
- self->has_replay_buffer = true;
}
return true;
@@ -36,8 +36,11 @@ void gsr_encoder_deinit(gsr_encoder *self) {
pthread_mutex_destroy(&self->file_write_mutex);
}
- gsr_replay_buffer_deinit(&self->replay_buffer);
- self->has_replay_buffer = false;
+ if(self->replay_buffer) {
+ gsr_replay_buffer_destroy(self->replay_buffer);
+ self->replay_buffer = NULL;
+ }
+
self->num_recording_destinations = 0;
self->recording_destination_id_counter = 0;
}
@@ -56,9 +59,9 @@ void gsr_encoder_receive_packets(gsr_encoder *self, AVCodecContext *codec_contex
av_packet->pts = pts;
av_packet->dts = pts;
- if(self->has_replay_buffer) {
+ if(self->replay_buffer) {
const double time_now = clock_get_monotonic_seconds();
- if(!gsr_replay_buffer_append(&self->replay_buffer, av_packet, time_now))
+ if(!gsr_replay_buffer_append(self->replay_buffer, av_packet, time_now))
fprintf(stderr, "gsr error: gsr_encoder_receive_packets: failed to add replay buffer data\n");
}