In the LEADTOOLS Multimedia.NET toolkit framework and supporting DirectShow filters and codecs, media samples contain audio, video or other stream data that need to be delivered downstream while the filter graph is running. MediaSample start and stop times determine when these samples should be visible on the renderer device(s) attached to the graph.
The time stamp defines a media sample's start and stop times, measured in stream time. The time stamp is sometimes called the presentation time. When a renderer filter receives a sample, it schedules rendering based on the time stamp. If the sample arrives late, or has no time stamp, the filter renders the sample immediately. Otherwise, the filter waits until the sample's start time before it renders the sample
Source filters and parser filters are responsible for setting the correct time stamps on the samples they process. Use the following guidelines.
File Playback
The first sample is time stamped with a start time of zero. Subsequent time stamps are determined by the sample length and the playback rate, which itself is determined by the file format. Video and Audio Capture
Every sample is time stamped with a start time equal to the stream time when it was captured. Video preview frames are an exception. Because of graph latency, a preview frame that is time stamped with the current stream time will always arrive late at the video renderer (The DirectShow component responsible for playing the video). This may cause the renderer to drop frames, in an attempt at quality control. Therefore, preview frames should not be time stamped. To set the time stamp on a sample, call the SetTime method. Optionally, the filter can also specify a media time for the sample. In a video stream (the portion of the file holding the video data), media time represents the frame number. In an audio stream (the portion of the file holding the audio data), media time represents the sample number in the packet.
For example, if each packet contains one second of 44.1 kilohertz (kHz) audio, the first packet has a media start time of zero and a media stop time of 44100. In a seekable stream, the media time is always relative to the start time of the stream. For example, suppose you seek to 2 seconds from the start of a 15-fps video stream. The first media sample after the seek has a time stamp of zero but a media time of 30. Renderer and mux filters can use the media time to determine whether frames or samples have been dropped, by checking for gaps. However, filters are not required to set the media time. To set the media time for a sample, call the SetMediaTime method.