File npv/TODO changed (mode: 100644) (index 0158304..90608f3) |
1 |
1 |
not ordered: |
not ordered: |
2 |
|
- move to a shared audio/video prefill |
|
3 |
2 |
- try to workaround as much as possible the nasty live streams out there. |
- try to workaround as much as possible the nasty live streams out there. |
4 |
3 |
- "buffering" indicator (no)? subtitles (mmmmh...)? |
- "buffering" indicator (no)? subtitles (mmmmh...)? |
5 |
4 |
- use vulkan shaders (no glsl or hlsl), compute or not, in order to perform |
- use vulkan shaders (no glsl or hlsl), compute or not, in order to perform |
File npv/audio/public/code.frag.c changed (mode: 100644) (index 8d25d49..d87b021) |
... |
... |
STATIC void pkts_send(void) { loop |
342 |
342 |
fatal("error while sending a packet to the decoder\n"); |
fatal("error while sending a packet to the decoder\n"); |
343 |
343 |
/* r == 0 */ |
/* r == 0 */ |
344 |
344 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
345 |
|
npv_pipeline_limits_p.pkts.audio_bytes_n -= pr->sz; |
|
|
345 |
|
npv_pipeline_limits_p.pkts.bytes_n -= pr->sz; |
346 |
346 |
npv_pipeline_limits_unlock(); |
npv_pipeline_limits_unlock(); |
347 |
347 |
|
|
348 |
348 |
npv_pkt_q_deq(pkt_q_p); |
npv_pkt_q_deq(pkt_q_p); |
File npv/fmt/local/code.frag.c changed (mode: 100644) (index 27a391b..e214a51) |
... |
... |
STATIC bool did_reached_limits(void) |
30 |
30 |
bool r; |
bool r; |
31 |
31 |
|
|
32 |
32 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
33 |
|
if (npv_pipeline_limits_p.pkts.audio_bytes_n |
|
34 |
|
>= npv_pipeline_limits_p.pkts.limit.audio_bytes_n |
|
35 |
|
&& npv_pipeline_limits_p.pkts.video_bytes_n |
|
36 |
|
>= npv_pipeline_limits_p.pkts.limit.video_bytes_n) |
|
|
33 |
|
if (npv_pipeline_limits_p.pkts.bytes_n >= npv_pipeline_limits_p.pkts.limit.bytes_n) |
37 |
34 |
r = true; |
r = true; |
38 |
35 |
else |
else |
39 |
36 |
r = false; |
r = false; |
File npv/fmt/public/code.frag.c changed (mode: 100644) (index 874b4e9..6ed0961) |
... |
... |
STATIC u8 pkts_read_and_q(void) { loop |
65 |
65 |
/* r == 0 */ |
/* r == 0 */ |
66 |
66 |
if (pkt_l->st_idx == npv_audio_st_p.idx) { |
if (pkt_l->st_idx == npv_audio_st_p.idx) { |
67 |
67 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
68 |
|
npv_pipeline_limits_p.pkts.audio_bytes_n += (u64)pkt_l->sz; |
|
69 |
|
if (npv_pipeline_limits_p.pkts.prefill.audio_bytes_rem > 0) |
|
70 |
|
npv_pipeline_limits_p.pkts.prefill.audio_bytes_rem -= |
|
71 |
|
(s64)pkt_l->sz; |
|
|
68 |
|
npv_pipeline_limits_p.pkts.bytes_n += (u64)pkt_l->sz; |
|
69 |
|
if (npv_pipeline_limits_p.pkts.prefill.bytes_rem > 0) |
|
70 |
|
npv_pipeline_limits_p.pkts.prefill.bytes_rem -= (s64)pkt_l->sz; |
72 |
71 |
npv_pipeline_limits_unlock(); |
npv_pipeline_limits_unlock(); |
73 |
72 |
|
|
74 |
73 |
npv_pkt_q_lock(npv_audio_pkt_q_p); |
npv_pkt_q_lock(npv_audio_pkt_q_p); |
|
... |
... |
STATIC u8 pkts_read_and_q(void) { loop |
77 |
76 |
npv_pkt_q_unlock(npv_audio_pkt_q_p); |
npv_pkt_q_unlock(npv_audio_pkt_q_p); |
78 |
77 |
} else if (pkt_l->st_idx == npv_video_st_p.idx) { |
} else if (pkt_l->st_idx == npv_video_st_p.idx) { |
79 |
78 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
80 |
|
npv_pipeline_limits_p.pkts.video_bytes_n += (u64)pkt_l->sz; |
|
81 |
|
if (npv_pipeline_limits_p.pkts.prefill.video_bytes_rem > 0) |
|
82 |
|
npv_pipeline_limits_p.pkts.prefill.video_bytes_rem -= |
|
83 |
|
(s64)pkt_l->sz; |
|
|
79 |
|
npv_pipeline_limits_p.pkts.bytes_n += (u64)pkt_l->sz; |
|
80 |
|
if (npv_pipeline_limits_p.pkts.prefill.bytes_rem > 0) |
|
81 |
|
npv_pipeline_limits_p.pkts.prefill.bytes_rem -= (s64)pkt_l->sz; |
84 |
82 |
npv_pipeline_limits_unlock(); |
npv_pipeline_limits_unlock(); |
85 |
83 |
|
|
86 |
84 |
npv_pkt_q_lock(npv_video_pkt_q_p); |
npv_pkt_q_lock(npv_video_pkt_q_p); |
File npv/local/code.frag.c changed (mode: 100644) (index 984f4bd..2d98097) |
... |
... |
STATIC void predecode_wait_start(void) |
241 |
241 |
#define PREDECODE 2 |
#define PREDECODE 2 |
242 |
242 |
STATIC void prefill_chk(void) |
STATIC void prefill_chk(void) |
243 |
243 |
{ |
{ |
244 |
|
s64 prefill_audio; |
|
245 |
|
s64 prefill_video; |
|
|
244 |
|
s64 prefill; |
246 |
245 |
struct itimerspec t; |
struct itimerspec t; |
247 |
246 |
int r; |
int r; |
248 |
247 |
|
|
249 |
248 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
250 |
|
prefill_audio = npv_pipeline_limits_p.pkts.prefill.audio_bytes_rem; |
|
251 |
|
prefill_video = npv_pipeline_limits_p.pkts.prefill.video_bytes_rem; |
|
|
249 |
|
prefill = npv_pipeline_limits_p.pkts.prefill.bytes_rem; |
252 |
250 |
npv_pipeline_limits_unlock(); |
npv_pipeline_limits_unlock(); |
253 |
|
if (prefill_audio <= 0 && prefill_video <= 0) { |
|
|
251 |
|
if (prefill <= 0) { |
254 |
252 |
/* prefill is done, switch to predecode */ |
/* prefill is done, switch to predecode */ |
255 |
253 |
atomic_store(&pre_x_p, PREDECODE); |
atomic_store(&pre_x_p, PREDECODE); |
256 |
254 |
predecode_wait_start(); |
predecode_wait_start(); |
File npv/pipeline/public/code.frag.c changed (mode: 100644) (index e922715..be4a0a1) |
1 |
1 |
STATIC void limits_reset(void) |
STATIC void limits_reset(void) |
2 |
2 |
{ |
{ |
3 |
|
limits_p.pkts.audio_bytes_n = 0; |
|
4 |
|
limits_p.pkts.video_bytes_n = 0; |
|
5 |
|
/* TODO: nah, move to a shared audio/video quantities */ |
|
6 |
|
/* hardcoded for now: arbitrary rough estimates */ |
|
7 |
|
/* ~8s of 200kb audio */ |
|
8 |
|
limits_p.pkts.limit.audio_bytes_n = 200000 / 8 * 8; |
|
9 |
|
/* ~8s of 10Mb video */ |
|
10 |
|
limits_p.pkts.limit.video_bytes_n = 10000000 / 8 * 8; |
|
|
3 |
|
limits_p.pkts.bytes_n = 0; |
|
4 |
|
limits_p.pkts.limit.bytes_n = PIPELINE_BYTES_N_MAX; |
11 |
5 |
} |
} |
12 |
6 |
STATIC void prefill_reset(u8 percent) |
STATIC void prefill_reset(u8 percent) |
13 |
7 |
{ |
{ |
14 |
8 |
if (percent > 100) |
if (percent > 100) |
15 |
|
fatal("invalid prefill of %u%% for the buffer of packet queues\n", percent); |
|
|
9 |
|
fatal("invalid prefill of %u%% for the buffer for packet queues\n", percent); |
16 |
10 |
if (percent != 0) { |
if (percent != 0) { |
17 |
|
limits_p.pkts.prefill.audio_bytes_rem = |
|
18 |
|
limits_p.pkts.limit.audio_bytes_n * percent / 100; |
|
19 |
|
pout("prefill size for the audio packet queue buffer is %u%%/%"PRId64" bytes\n", percent, limits_p.pkts.prefill.audio_bytes_rem); |
|
20 |
|
limits_p.pkts.prefill.video_bytes_rem = |
|
21 |
|
limits_p.pkts.limit.video_bytes_n * percent / 100; |
|
22 |
|
pout("prefill size for the video packet queue buffer is %u%%/%"PRId64" bytes\n", percent, limits_p.pkts.prefill.video_bytes_rem); |
|
|
11 |
|
limits_p.pkts.prefill.bytes_rem = |
|
12 |
|
limits_p.pkts.limit.bytes_n * percent / 100; |
|
13 |
|
pout("prefill size for the buffer for packet queues is %u%%/%"PRId64" bytes (100%%=%"PRId64" bytes)\n", percent, limits_p.pkts.prefill.bytes_rem, PIPELINE_BYTES_N_MAX); |
23 |
14 |
} else { |
} else { |
24 |
|
limits_p.pkts.prefill.audio_bytes_rem = 0; |
|
25 |
|
limits_p.pkts.prefill.video_bytes_rem = 0; |
|
26 |
|
pout("prefill for the packet queue buffers is disabled\n"); |
|
|
15 |
|
limits_p.pkts.prefill.bytes_rem = 0; |
|
16 |
|
pout("prefill for the buffer for packet queues is disabled\n"); |
27 |
17 |
} |
} |
28 |
18 |
} |
} |
29 |
19 |
STATIC void init_once(void) |
STATIC void init_once(void) |
File npv/video/public/code.frag.c changed (mode: 100644) (index fe609ce..b499e34) |
... |
... |
STATIC void pkts_send(void) { loop |
301 |
301 |
fatal("error while sending a packet to the decoder\n"); |
fatal("error while sending a packet to the decoder\n"); |
302 |
302 |
/* r == 0 */ |
/* r == 0 */ |
303 |
303 |
npv_pipeline_limits_lock(); |
npv_pipeline_limits_lock(); |
304 |
|
npv_pipeline_limits_p.pkts.video_bytes_n -= pr->sz; |
|
|
304 |
|
npv_pipeline_limits_p.pkts.bytes_n -= pr->sz; |
305 |
305 |
npv_pipeline_limits_unlock(); |
npv_pipeline_limits_unlock(); |
306 |
306 |
|
|
307 |
307 |
npv_pkt_q_deq(pkt_q_p); |
npv_pkt_q_deq(pkt_q_p); |