+For Gapless, we move from running state to partial drain and back, along +with setting of meta_data and signalling for next track :: + + + +----------+ + compr_drain_notify() | | + +------------------------>| RUNNING | + | | | + | +----------+ + | | + | | + | | compr_next_track() + | | + | V + | +----------+ + | | | + | |NEXT_TRACK| + | | | + | +----------+ + | | + | | + | | compr_partial_drain() + | | + | V + | +----------+ + | | | + +------------------------ | PARTIAL_ | + | DRAIN | + +----------+
May I suggest having a single state machine, not a big one and an additional partial one. It would help explain why in one case compr_drain_notify() triggers a transition to RUNNING while in the other one it goes to SETUP.
I realize it's more complicated to edit but it'd be easier on reviewers/users.