Startup
The following discussion applies to constant bit rate operation.
When a decoder is started in the middle of a sequence, it does not know how full its buffer should be. If it decodes the first access unit at the wrong time, its fullness will not be the mirror image of the encoder buffer fullness, and it may later underflow or overflow. This problem would be solved if the decoder could use the VBV model, but the required vbv_buffer_size_value is not available except in the sequence header. Fortunately, equivalent information is carried in the PCR and PTS/DTS values which are present throughout the sequence.
The first step of startup is to synchronize the decoder system time clock (STC). The value of the STC may simply be set to equal the first program clock reference (PCR) that is received. (An inexact clock frequency could eventually cause the buffer to overflow or underflow, but does not affect the basic start-up procedure. Clock synchronization is discussed in Decoder STC Synchronization.
The second step of startup is to obtain a complete access unit to decode. The decoder therefore discards incoming data until it encounters a picture header with a presentation time stamp (PTS) (a decode time stamp, DTS, will also be present for a reordered picture). In ATSC streams, every access unit has this information.
The last step of startup is to wait until the buffer has the correct fullness to remove and decode the picture. This occurs when the STC equals the picture's PTS. This was pre-calculated by the encoder as explained in Constant Bit Rate Operation. Thus, the decoder will wait before starting decoding until sufficient information has been transferred into the decoder buffer, as predetermined by the encoder.
Notes:
If the decoder buffer is larger than required, this procedure will simply result in the upper part of the buffer being unused. Thus, it is sufficient to know a priori the maximum buffer size that is allowed in the particular system. See ATSC Doc A/53 Constraints on MPEG .
In systems that do not send PTS with every access unit, the PTS value can be computed from a previous PTS by assuming a constant presentation rate.