decoder must know the timestamps input buffer for several reasons.
First , if a stream has B-frames , then reordering the buffers and assigning the correct timestamps to the buffers is done using a decoder . Therefore, when timestamps received in the input buffer, it will be queued for reordering.
Secondly, if the use case is something like Android-TV , which infact has tunneled video playback , a timestamp consumed by a video decoder that tunnels with the base HW block for synchronization and rendering.
Finally, if there is any drop in packets or frames, the decoder can potentially perform some kind of hiding if it notices a sharp transition in timestamps without calling a flash. This is not the norm, but an extended function of some decoders.
In traditional cases, as you indicated, synchronization is performed by the player engine, in which the decoder reflects the timestamp of the input buffer into the output buffer.
source share