Microsoft DirectX 9.0 |
Microsoft has specified the format for storage of digital video (DV) data in AVI files. Conforming to this specification will ensure that the AVI files authored in this format will be compatible with future versions of the Microsoft® DirectShow® digital video architecture for the Microsoft® Windows® platform.
This article describes the format of AVI files containing DV data. Specific FOURCCs (four-character codes) for interleaved DV data streams and DV compressor/decompressor stream handlers are defined. The stream format structure for DV data is defined. Specifications for two methods of storing DV data in the AVI file format are specified.
It is assumed that the reader is familiar with the DV data format. (This format is defined in the Specification of Consumer-use Digital VCRs, also called the Blue Book).
There are two types of DV AVI files: AVI files that contain one DV data stream, called type-1 files; and AVI files that contain DV video as a 'vids' stream and DV audio as 'auds' streams, called type-2 files.
AVI Files Containing One DV Data Stream (Type-1)
Interleaved DV data can be stored in its native format as a single stream within an AVI RIFF file. This has the advantage of using the minimum amount of data storage for DV. The primary disadvantage is that this file format is not backward-compatible with Video for Windows, because it doesn't contain either a video 'vids' or an audio 'auds' stream. Support is provided for the interleaved DV stream through the DV Muxer and DV Splitter filters provided with DirectShow.
DV data can be stored in a single stream within an AVI RIFF file by specifying the 'iavs' (interleaved audio and video stream) FOURCC (four-character code) in the fccType member and either of the 'dvsd', 'dvhd', or 'dvsl' FOURCCs in the fccHandler member of the 'strh' stream header chunk. The frames per second of the video stream must be specified in the dwRate and dwScale members and the total number of video blocks in the 'movi' chunk in the dwLength member.
The 'dvsd' stream handler FOURCC specifies that the DV data is as defined in Part 2 of the Specification of Consumer-use Digital VCRs. Video is in the format of 525 lines at 29.97 Hz (525-60) or 625 lines at 25.00 Hz (625-50).
The 'dvhd' stream handler FOURCC specifies that the DV data is as defined in Part 3 of the Specification of Consumer-use Digital VCRs. Video is in the format of 1125 lines at 30.00 Hz (1125-60) or 1250 lines at 25.00 Hz (1250-50).
The 'dvsl' stream handler FOURCC specifies that the DV data is as defined in Part 6 of Specification of Consumer-use Digital VCRs. Video is in the format of high-compression SD (SDL).
Note The remainder of this article provides definitions for 'dvsd' streams.
The stream header chunk must be followed by a DVINFO stream format chunk.
The actual DV data is stored as '##dc' chunks in the 'movi' chunk (the ## in the format represents the stream identifier). Each chunk contains one frame of data, either 10 or 12 DV DIF sequences for 525-60 or 625-50 systems, respectively. The DV SD ('dvsd') DIF sequence format is defined in Part 2 of the Specification of Consumer-use Digital VCRs.
The following example shows the AIFF RIFF form for an AVI file with one DV data stream, expanded with completed header chunks.
00000000 RIFF (0FAE35D4) 'AVI '
0000000C LIST (00000106) 'hdrl'
00000018 avih (00000038)
dwMicroSecPerFrame : 33367
dwMaxBytesPerSec : 3728000
dwPaddingGranularity : 0
dwFlags : 0x810 HASINDEX | TRUSTCKTYPE
dwTotalFrames : 2192
dwInitialFrames : 0
dwStreams : 1
dwSuggestedBufferSize : 120000
dwWidth : 720
dwHeight : 480
dwReserved : 0x0
00000058 LIST (0000006C) 'strl'
00000064 strh (00000038)
fccType : 'iavs'
fccHandler : 'dvsd'
dwFlags : 0x0
wPriority : 0
wLanguage : 0x0 undefined
dwInitialFrames : 0
dwScale : 100 (29.970 Frames/Sec)
dwRate : 2997
dwStart : 0
dwLength : 2192
dwSuggestedBufferSize : 120000
dwQuality : 0
dwSampleSize : 0
rcFrame : 0,0,720,480
000000A4 strf (00000020)
dwDVAAuxSrc : 0x........
dwDVAAuxCtl : 0x........
dwDVAAuxSrc1 : 0x........
dwDVAAuxCtl1 : 0x........
dwDVVAuxSrc : 0x........
dwDVVAuxCtl : 0x........
dwDVReserved[2] : 0,0
000000CC LIST (0FADAC00) 'movi'
0FADACD4 idx1 (00008900)
AVI Files Containing DV Video and DV Audio Streams (Type-2)
Interleaved DV data can be split into a video stream and one to four audio streams within an AVI RIFF file. This has the advantage of being backward-compatible with Video for Windows, because it contains a standard video 'vids' stream and at least one standard audio 'auds' stream The primary disadvantage is that this file format requires the audio data to be redundantly stored as audio streams. The "video" stream is actually the native interleaved DV data stream. However, as a standard 'vids' stream with a handler type of 'dvsd', the DV Video Decoder is used. This format also requires using the DV Splitter filter to split "captured" files before writing them as AVI files.
DV data can be stored as a video stream with a separate number of audio streams in an AVI RIFF file. The video stream is specified with a standard video stream header (the fccType member value is 'vids'). The fccHandler member is specified as 'dvsd', 'dvhd', or 'dvsl'. The frames per second of the video stream must be specified in the dwRate and dwScale members and the total number of video blocks in the 'movi' chunk in the dwLength member.
In this AVI file containing DV video as a 'vids' stream and DV audio as 'auds' streams form of DV, the video stream format chunk is a standard BITMAPINFOHEADER structure. The stream format chunk can be optionally extended to include the DVINFO chunk, by increasing the stream format chunk size from 40 bytes (size of the BITMAPINFOHEADER structure) to 72 bytes (size of BITMAPINFOHEADER plus DVINFO structures) and immediately following the BITMAPINFOHEADER data structure with a DVINFO data structure.
The audio stream(s) is specified with a standard audio stream header (the fccType member value is 'auds'). The fccHandler member is not used for audio streams.
The DV video data is stored as '##dc' chunks, as defined in the preceding description of an AVI file with one DV data, and the audio data is stored as '##wb' chunks in the 'movi' chunk.
The following example shows the AIFF RIFF form for an AVI file containing DV video as a 'vids' stream and DV audio as 'auds' streams expanded with completed header chunks (including optional DVINFO data following the BITMAPINFO in the 'strf' sub-chunk for the 'vids' stream).
00000000 RIFF (103E2920) 'AVI '
0000000C LIST (00000146) 'hdrl'
00000018 avih (00000038)
dwMicroSecPerFrame : 33367
dwMaxBytesPerSec : 3728000
dwPaddingGranularity : 0
dwFlags : 0x810 HASINDEX | TRUSTCKTYPE
dwTotalFrames : 2192
dwInitialFrames : 0
dwStreams : 2
dwSuggestedBufferSize : 120000
dwWidth : 720
dwHeight : 480
dwReserved : 0x0
00000058 LIST (00000094) 'strl'
00000064 strh (00000038)
fccType : 'vids'
fccHandler : 'dvsd'
dwFlags : 0x0
wPriority : 0
wLanguage : 0x0 undefined
dwInitialFrames : 0
dwScale : 100 (29.970 Frames/Sec)
dwRate : 2997
dwStart : 0
dwLength : 2192
dwSuggestedBufferSize : 120000
dwQuality : 0
dwSampleSize : 0
rcFrame : 0,0,720,480
000000A4 strf (00000048)
biSize : 40
biWidth : 720
biHeight : 480
biPlanes : 1
biBitCount : 24
biCompression : 0x64737664 'dvsd'
biSizeImage : 120000
biXPelsPerMeter : 0
biYPelsPerMeter : 0
biClrUsed : 0
biClrImportant : 0
dwDVAAuxSrc : 0x........
dwDVAAuxCtl : 0x........
dwDVAAuxSrc1 : 0x........
dwDVAAuxCtl1 : 0x........
dwDVVAuxSrc : 0x........
dwDVVAuxCtl : 0x........
dwDVReserved[2] : 0,0
000000F4 LIST (0000005E) 'strl'
00000100 strh (00000038)
fccType : 'auds'
fccHandler : ' '
dwFlags : 0x0
wPriority : 0
wLanguage : 0x0 undefined
dwInitialFrames : 0
dwScale : 1 (32000.000 Samples/Sec)
dwRate : 32000
dwStart : 0
dwLength : 2340474
dwSuggestedBufferSize : 4272
dwQuality : 0
dwSampleSize : 4
rcFrame : 0,0,0,0
00000140 strf (00000012)
wFormatTag : 1 PCM
nChannels : 2
nSamplesPerSec : 32000
nAvgBytesPerSec : 128000
nBlockAlign : 4
wBitsPerSample : 16
cbSize : 0
00000814 LIST (103D0EF4) 'movi'
103D1710 idx1 (00011210)
See Also