Cannes Video Splicing: Live Frame Rate Edge Sorting
Frame tearing doesn't negotiate—it exposes every weak link in your capture pipeline the instant a live dealer feed hits a high-motion splice point. The Cannes-grade splicing rigs I've torn apart on the bench all fail the same way: they sort edge frames by timestamp instead of by decoded presentation order, and the whole live frame rate edge sorting stack collapses into judder the moment dealer hands move fast across the felt.
Let me be blunt. Most operators think splicing is a rendering problem. It's not. It's a hardware arbitration problem buried three layers below your overlay engine, and if you don't fix the sorting logic at the edge, no amount of GPU headroom will save you. 🎯

Why Timestamp Sorting Fails at the Splice Boundary
Here's the mechanism nobody documents. When a live video splice occurs—camera cut, dealer swap, table transition—the encoder emits a burst of frames with near-identical PTS values. A naive sorter queues them FIFO and hands them to the compositor in arrival order. That's the bug. Arrival order is not decode order, and decode order is not display order. The frame rate edge sorting layer must re-sequence by monotonic decode index before the compositor ever touches a pixel, or you get exactly one inverted frame per splice. One frame. That's all it takes to make a roulette ball teleport.
I've measured this on capture cards running at 59.94Hz with a 16ms jitter budget. Inverted frames spike presentation latency to 33ms for a single cycle, then snap back. The human eye catches that snap every single time. Players don't report "frame inversion"—they report "the game glitched" and cash out. 💸
The Edge Sorter Architecture That Actually Holds
Stop buffering at the compositor. Move the sort to the capture edge, before the frame ever enters shared memory. The architecture I run uses a three-slot ring per stream: slot A holds the last confirmed display frame, slot B holds the incoming decode candidate, slot C is a sacrificial buffer for splice bursts. The sorter compares decode indices, not clocks. Clocks lie under load; indices don't. This is the difference between a live frame rate edge sorting implementation that survives a 12-hour dealer shift and one that degrades after twenty minutes of thermal throttling.

Hardware Interrupts Are Eating Your Frame Budget
Every splice triggers a capture card interrupt. Every interrupt steals cycles from the sorter thread if you haven't pinned it to an isolated core. I've watched a $400 capture card drop 4% of frames at splice boundaries purely because the driver's interrupt handler preempted the sorting loop. Pin the sorter. Disable interrupt coalescing on the capture device. Set the ring buffer depth to match your worst-case splice burst—mine is 8 frames deep—and never let the compositor pull directly from the driver queue. The edge sorter is the only consumer. Everything else reads its output. 🔧
And for the love of clean signal, validate your decode indices against the container's frame count. I've caught two firmware revisions that emitted duplicate indices after a resolution change mid-stream—a splice edge case that silently corrupts the entire sort order downstream. The sorter must reject non-monotonic indices and force a keyframe resync. No exceptions.
Latency Budget Reality Check
Run the numbers yourself. A 59.94Hz stream gives you 16.68ms per frame. The edge sorter adds 1.2ms of processing overhead in my rig—measured, not estimated. That leaves 15.48ms for decode, composite, and transport. Blow that budget at the splice and the sorter's ring buffer absorbs the overrun for up to 8 frames before it has to drop. Eight frames at 59.94Hz is 133ms of grace. That's your real splice tolerance, and if your pipeline can't recover inside it, the sort order will drift and you'll ship inverted frames to players who are already reaching for the withdraw button.