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
62
63
use ;
use crate::;
/// Lightweight read-side signal fed into [`DecoderHooks::on_chunk`].
///
/// Mirrors the meaningful shape of `DecoderChunkOutcome` (in
/// `kithara-decode`) without the PCM payload — hooks emit events based
/// on byte-cursor state from the [`Timeline`](crate::Timeline), not on
/// the raw audio frames.
/// Lightweight seek-side signal fed into [`DecoderHooks::on_seek`].
///
/// Mirrors the meaningful shape of `DecoderSeekOutcome` (in
/// `kithara-decode`) for event-emission purposes only.
/// Reader-side hooks invoked by the decoder layer's `HookedDecoder`
/// right before it forwards the inner decoder's typed outcome to the
/// caller.
///
/// One call per `next_chunk` / `seek` — granularity is decoder
/// operations, not byte-level reads.
/// Shared, lockable hook handle. Used so that `Source::take_reader_hooks`
/// can hand off Clone-able ownership and the hook implementation can
/// hold `&mut self` state behind a single lock.
pub type SharedHooks = ;