SCTE 104/35 Codex
Tying the requested time to a video frame
13.2.6A timestamp() sets when the Injector processes an operation; it does not set the splice point. Three moments are distinct: the request processing time, which the timestamp() time_type fixes as immediate, UTC, VITC, or GPI; the section injection, when the Injector writes the splice_info_section into the stream; and the splice point, which falls pre_roll_time after injection and is where the cut actually happens. For deferred processing the Automation System and Injector clocks must agree within a few milliseconds, synchronized by NTP or SNTP, GPS, SMPTE time code, or the alive message exchange, per clause 13.2.6; immediate processing needs no such sync and is timed to the start of the video frame that carries the last received byte, per clause 8.2.3.1. For a normal splice the Injector must correlate that splice point to the real frame leaving its output and that frame's presentation time, then write the value into the SCTE 35 splice_time so it names the right picture. An immediate splice carries no splice_time at all: splice_immediate_flag is set and the splicer acts at its own nearest opportunity, so there is no picture to name. Getting the correlation and the encoder's processing delay right is what makes a timed splice frame accurate; a request whose timing is perfect but tied to the wrong output frame still cuts late or early.