||AudioDecoderInputTrack is used as a source for the audio decoder data, which
supports adjusting playback rate and preserve pitch.
The owner of this track would be responsible to push audio data via
`AppendData()` into a SPSC queue, which is a thread-safe queue between the
decoder thread (producer) and the graph thread (consumer). MediaTrackGraph
requires data via `ProcessInput()`, then AudioDecoderInputTrack would convert
(based on sample rate and playback rate) and append the amount of needed
audio frames onto the output segment that would be used by MediaTrackGraph.
||All public functions are not thread-safe.
Called on the task queue of MDSM only.
||A wrapper around AudioSink to provide the interface of MediaSink.
||A container class to make it easier to pass the playback info all the
way to DecodedStreamGraphListener from DecodedStream.
||Worker thread only members.
||A consumer of audio/video data which plays audio and video tracks and
manages A/V sync between them.
A typical sink sends audio/video outputs to the speaker and screen.
However, there are also sinks which capture the output of an media element
and send the output to a MediaStream.
This class is used to move A/V sync management and audio/video rendering
out of MDSM so it is possible for subclasses to do external rendering using
specific hardware which is required by TV projects and CDM.
Note this class is not thread-safe and should be called from the state
machine thread only.