How DSI Pointers Enable Trick Play in VOB Files
In DVD-Video VOB (Video Object) containers, seamless trick play modes—such as fast-forward, rewind, and frame-stepping—depend on navigation metadata embedded directly within the multiplexed stream. This article explains how forward and backward pointers within the Data Search Information (DSI) pack allow playback systems to quickly locate Intra-coded frames (I-frames) across Video Object Units (VOBUs), enabling rapid, non-sequential navigation without overwhelming the MPEG-2 video decoder.
The Role of VOBUs and the DSI Pack
A standard VOB file consists of a continuous stream of packs,
structured into Video Object Units (VOBUs). Each VOBU typically
represents between 0.4 and 1.0 seconds of presentation time and begins
with a Navigation Pack (NV_PCK).
The Navigation Pack contains two distinct sub-packets:
- PCI (Presentation Control Information): Handles real-time display aspects, such as angle changes, highlights, and audio/sub-picture synchronization.
- DSI (Data Search Information): Supplies relative address offsets and timing data essential for playback navigation and trick modes.
Because MPEG-2 compression uses inter-frame prediction (P-frames and B-frames) that rely on preceding or succeeding reference frames, a player cannot decode arbitrary frames during rapid scanning. It must locate standalone I-frames. The DSI pack provides the map that makes this possible without parsing every byte of the stream.
Forward and Backward Navigation Tables
Within the DSI pack, navigation relies on two dedicated lookup structures:
- FWDIn (Forward Information Pointers): Relative sector offsets to future VOBUs.
- BWDIn (Backward Information Pointers): Relative sector offsets to past VOBUs.
These tables do not simply point to the immediately adjacent units;
they contain an array of predetermined temporal offsets representing
target VOBUs at various intervals (such as +0.5, +1.0, +2.0, up to +120
seconds into the future, and equivalent negative values into the past).
If a target interval cannot be matched exactly due to variable bitrate
encoding or variable VOBU sizes, the pointer targets the closest
existing VOBU. If no valid VOBU exists within a specific range (such as
reaching the end or beginning of a video cell), the pointer is assigned
a specific termination value (such as 0x3FFFFFFF).
Executing Fast-Forward Playback
During accelerated forward playback (e.g., 2x, 4x, or 16x speed), the optical drive or media parser executes the following sequence:
- Extract Reference Data: The player reads the current VOBU, decodes its leading I-frame, and renders it to the screen.
- Consult FWDI: Based on the selected multiplier, the playback firmware reads the corresponding forward pointer in the active DSI pack.
- Sector Skip: Instead of linearly reading every intermediate audio, sub-picture, and inter-coded video packet, the optical pickup or read buffer skips directly to the sector address designated by the pointer.
- Repeat: The player immediately reads the new
NV_PCK, extracts the next I-frame, and repeats the cycle.
By skipping intermediate B- and P-frames entirely, the decoder workload remains within standard real-time processing limits while creating the visual illusion of rapid, smooth forward motion.
Executing Rewind Playback
MPEG-2 bitstreams are strictly designed for forward decoding; backward temporal dependencies do not natively exist. Playing an MPEG stream in reverse by simply reversing the bitstream causes the decoder to fail. The DSI backward pointers resolve this limitation:
- Locate Preceding Keyframes: When reverse play is
initiated, the engine reads the
BWDIntable in the current DSI pack to determine the exact sector offset of the preceding VOBU corresponding to the target reverse speed. - Reverse Stepping: The read head jumps backward to the targeted VOBU start address.
- Decode in Forward Order, Display in Reverse: The decoder processes the VOBU's I-frame (and occasionally select reference frames) in forward order to render a valid image, but presents the resulting frames sequentially backward relative to the original timeline.
- Iterate: The player accesses the DSI pack of the
newly reached VOBU and uses its
BWDInpointers to calculate the next backward jump.
Efficiency and Decoder Protection
Without DSI forward and backward pointers, implementing trick play
would require the playback engine to parse the entire program stream
linearly, de-multiplexing and discarding non-essential packets on the
fly while searching for MPEG start codes (0x000001B3 for
Sequence Headers and 0x00000100 for Pictures).
By providing pre-calculated sector addresses directly in the stream headers, DSI pointers eliminate parsing overhead, reduce physical drive head movements, prevent buffer overflow/underflow conditions, and guarantee that the decoder only receives self-contained, fully decodable image frames during accelerated navigation.