File npv/video/local/code.frag.c changed (mode: 100644) (index 5b7ef06..a4b757b) |
... |
... |
static void select_fr(s64 now, avutil_video_fr_ref_t **selected_fr, |
294 |
294 |
struct dec_fr_priv_t **selected_fr_priv) |
struct dec_fr_priv_t **selected_fr_priv) |
295 |
295 |
{ |
{ |
296 |
296 |
u16 fr_idx; |
u16 fr_idx; |
|
297 |
|
u16 selected_fr_idx; |
297 |
298 |
u64 selected_fr_delta; |
u64 selected_fr_delta; |
298 |
299 |
|
|
299 |
300 |
fr_idx = 0; |
fr_idx = 0; |
|
... |
... |
static void select_fr(s64 now, avutil_video_fr_ref_t **selected_fr, |
308 |
309 |
if (delta < selected_fr_delta) { |
if (delta < selected_fr_delta) { |
309 |
310 |
*selected_fr = dec_frs_p.a[fr_idx]; |
*selected_fr = dec_frs_p.a[fr_idx]; |
310 |
311 |
*selected_fr_priv = dec_frs_p.priv_a + fr_idx; |
*selected_fr_priv = dec_frs_p.priv_a + fr_idx; |
|
312 |
|
selected_fr_idx = fr_idx; |
311 |
313 |
selected_fr_delta = delta; |
selected_fr_delta = delta; |
312 |
314 |
} |
} |
313 |
315 |
++fr_idx; |
++fr_idx; |
314 |
316 |
} |
} |
|
317 |
|
/* smooth occasional drops due to spikes in latency over 1-2 frames */ |
|
318 |
|
if (selected_fr_idx >= 1) { |
|
319 |
|
struct dec_fr_priv_t *prev_fr_priv; |
|
320 |
|
|
|
321 |
|
if (selected_fr_idx >= 2) { |
|
322 |
|
prev_fr_priv = dec_frs_p.priv_a + selected_fr_idx - 2; |
|
323 |
|
if (!prev_fr_priv->was_qed_to_pe) { |
|
324 |
|
/* hijack the time slot */ |
|
325 |
|
*selected_fr = dec_frs_p.a[selected_fr_idx - 2]; |
|
326 |
|
*selected_fr_priv = prev_fr_priv; |
|
327 |
|
return; |
|
328 |
|
} |
|
329 |
|
} |
|
330 |
|
prev_fr_priv = dec_frs_p.priv_a + selected_fr_idx - 1; |
|
331 |
|
if (!prev_fr_priv->was_qed_to_pe) { |
|
332 |
|
/* hijack the time slot */ |
|
333 |
|
*selected_fr = dec_frs_p.a[selected_fr_idx - 1]; |
|
334 |
|
*selected_fr_priv = prev_fr_priv; |
|
335 |
|
} |
|
336 |
|
} |
315 |
337 |
} |
} |
316 |
338 |
#undef NO_FR |
#undef NO_FR |
317 |
339 |
static void frs_clear_last_qed_to_pe(void) |
static void frs_clear_last_qed_to_pe(void) |