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:

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:

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:

  1. Extract Reference Data: The player reads the current VOBU, decodes its leading I-frame, and renders it to the screen.
  2. Consult FWDI: Based on the selected multiplier, the playback firmware reads the corresponding forward pointer in the active DSI pack.
  3. 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.
  4. 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:

  1. Locate Preceding Keyframes: When reverse play is initiated, the engine reads the BWDIn table in the current DSI pack to determine the exact sector offset of the preceding VOBU corresponding to the target reverse speed.
  2. Reverse Stepping: The read head jumps backward to the targeted VOBU start address.
  3. 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.
  4. Iterate: The player accesses the DSI pack of the newly reached VOBU and uses its BWDIn pointers 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.