1.5 KiB
1.5 KiB
MediaFormatReader
The MediaFormatReader
obtains from a media resource decoded samples intended
for forward playback.
MediaFormatReader::Update()
manages transitions between multiple states.
The key transitions are captured in the diagram below:
stateDiagram-v2
DecodeError : Decode error
EOSDrain : Drain on end of stream
FatalDecodeError : Fatal decode error
InternalSeek : Internal seek to random access point
InternalSeekDemux : Demux to complete internal seek
InternalSeekDecode : Decode to complete internal seek
StreamChangeDrain : Drain of stream before stream change
VideoSkip : Skip video demux to next key frame
WaitingDrain : Drain when waiting for more data
[*] --> Demux
Demux --> Decode
Demux --> WaitingDrain
Demux --> StreamChangeDrain
Demux --> EOSDrain
Decode --> Demux
Decode --> DecodeError
Decode --> VideoSkip
DecodeError --> FatalDecodeError
DecodeError --> InternalSeek
DecodeError --> VideoSkip
WaitingDrain --> InternalSeek
WaitingDrain --> DecodeError
StreamChangeDrain --> Decode
StreamChangeDrain --> InternalSeek
StreamChangeDrain --> DecodeError
InternalSeek --> InternalSeekDemux
InternalSeekDemux --> InternalSeekDecode
InternalSeekDemux --> VideoSkip
InternalSeekDecode --> InternalSeekDemux
InternalSeekDecode --> VideoSkip
InternalSeekDecode --> Demux
VideoSkip --> Demux
VideoSkip --> DecodeError
FatalDecodeError --> [*]
EOSDrain --> [*]