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
//! What the SILK and CELT decoders need to run deep packet loss
//! concealment (deep PLC).
//!
//! libopus passes its deep PLC state (`LPCNetPLCState *lpcnet`) from
//! `opus_decode_frame` down to `silk_Decode`, `silk_decode_frame`,
//! `silk_PLC` and `celt_decode_with_ec_dred`. Only the mid channel of SILK
//! and the main CELT call of a frame get it; the CELT redundancy frames
//! and the CELT fade-out frame get `NULL`. opus1 passes
//! `Option<&mut DeepPlcArgs>` along the same calls, and `None` where
//! libopus passes `NULL`.
//!
//! With the cargo feature `deep-plc`, `DeepPlcArgs` holds the state of one
//! `OpusDecoder`, its models and its kernel variant. Without the feature
//! it is a type without values, so every argument of that type is `None`
//! and the decoders behave as a libopus built without deep PLC.
use crate;
/// The deep PLC state of one decoder and what it runs on.
pub
/// A type without values: builds without the feature `deep-plc` have no
/// deep PLC state to pass.
pub
/// Without the feature `deep-plc`, `Option<&mut DeepPlcArgs>` is always
/// `None`.
pub type DeepPlcArgs<'a> = NoDeepPlc;