blob: 5b8b9df3e5be363ed1feee0bfa626ae40a8517d0 (
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#pragma once
#include <al/atomic.h>
#include <nnwt/packet_cache.h>
#include <nnwt/packet_stream.h>
#include <nnwt/signal.h>
#include "../codec/codec.h"
#include "../server/common.h"
//#define VCR_BUFFER_WHOLE_FILE
struct lia_vcr_track {
struct camu_codec_stream *stream;
struct lia_client_handler *client;
struct nn_packet_cache cache;
u32 state;
atomic(bool) buffered;
bool running;
struct nn_cond cond;
struct nn_mutex lock;
struct nn_thread thread;
struct lia_vcr *vcr;
};
struct lia_vcr {
struct nn_packet_stream *data;
u16 node_id;
array(struct lia_vcr_track *) tracks;
atomic(u64) count;
struct {
u64 buffered;
atomic(u64) low;
} mark;
u8 expand;
bool started;
#ifndef CAMU_DIRECT_MODE
bool corked;
struct nn_signal signal;
#endif
struct {
u64 current_frame;
u64 last_cork_ts;
u64 last_report_ts;
u64 last_report_mark;
f32 average_kbps;
} metrics;
};
void lia_vcr_init(struct lia_vcr *vcr, struct nn_event_loop *loop, struct nn_packet_stream *data, u16 node_id);
void lia_vcr_start(struct lia_vcr *vcr);
void lia_vcr_add_track(struct lia_vcr *vcr, struct lia_vcr_track *track);
bool lia_vcr_remove_track_by_stream(struct lia_vcr *vcr, struct camu_codec_stream *stream);
bool lia_vcr_is_empty(struct lia_vcr *vcr);
void lia_vcr_push_packet(struct lia_vcr *vcr, struct nn_packet *packet);
void lia_vcr_set_buffered(struct lia_vcr_track *track);
void lia_vcr_cork(struct lia_vcr_track *track);
void lia_vcr_uncork(struct lia_vcr_track *track);
void lia_vcr_flush(struct lia_vcr *vcr);
void lia_vcr_close_all(struct lia_vcr *vcr);
void lia_vcr_free(struct lia_vcr *vcr);
|