aboutsummaryrefslogtreecommitdiff
path: root/include/replay_buffer/replay_buffer_disk.h
blob: 6873bb053a9b9c5f16ef3f5c7aeec65adc763111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef GSR_REPLAY_BUFFER_DISK_H
#define GSR_REPLAY_BUFFER_DISK_H

#include "replay_buffer.h"
#include <limits.h>

#define GSR_REPLAY_BUFFER_CAPACITY_NUM_FILES 1024

typedef struct {
    AVPacket packet;
    size_t data_index;
    double timestamp;
} gsr_av_packet_disk;

typedef struct {
    size_t id;
    double start_timestamp;
    double end_timestamp;
    int ref_counter;
    int fd;
    
    gsr_av_packet_disk *packets;
    size_t capacity_num_packets;
    size_t num_packets;
} gsr_replay_buffer_file;

typedef struct {
    gsr_replay_buffer replay_buffer;
    double replay_buffer_time;

    size_t storage_counter;
    size_t storage_num_bytes_written;
    int storage_fd;
    gsr_replay_buffer_file *files[GSR_REPLAY_BUFFER_CAPACITY_NUM_FILES]; // GSR_REPLAY_BUFFER_CAPACITY_NUM_FILES * REPLAY_BUFFER_FILE_SIZE_BYTES = 256gb, should be enough for everybody
    size_t num_files;

    char replay_directory[PATH_MAX];

    bool owns_directory;
} gsr_replay_buffer_disk;

gsr_replay_buffer* gsr_replay_buffer_disk_create(const char *replay_directory, double replay_buffer_time);

#endif /* GSR_REPLAY_BUFFER_DISK_H */