This topic describes the structures in the stream block of a multimedia file. A subset of these structures is returned by mmGetFileInfo.
This topic contains the following information:
The following table shows the general structure of a stream block:
Block |
Structure |
Quantity |
Description |
blkHeader |
1 |
Block header, with type and size of the block. |
|
header |
1 |
Stream or track global information. |
|
format |
or |
1 |
Audio or video stream format information. |
codec |
or union of or |
0 or 1 |
Codec-specific information. |
Level 1 contains block header information that identifies the block as a stream block and contains the total size of the block. This information is contained in the FILE_INFO_BLOCK_HEADER structure.
typedef struct
{
WORD blkSize;
WORD blkType;
#define BLK_TYPE_PRESENTATION 1
#define BLK_TYPE_STREAM 2
} FILE_INFO_BLOCK_HEADER;
Field |
Description |
blkSize |
Total size of the block in which this header is included, in bytes. |
blkType |
Identifies the block of information. BLK_STREAM identifies the block as a stream block. |
Level 2 contains header information specific to a stream, including the type of codec used by the stream. The information is contained in the FILE_INFO_STREAM_HEADER structure.
typedef struct
{
WORD blkSize;
WORD streamType;
#define STREAM_TYPE_UNKNWN 0
#define STREAM_TYPE_AUDIO 1
#define STREAM_TYPE_VIDEO 2
WORD codec;
#define S_CODEC_UNKNWN 0
#define S_CODEC_AMR 1
#define S_CODEC_AAC 2
#define S_CODEC_H263 3
#define S_CODEC_MPEG4 4
#define S_CODEC_AMR_WB 5
#define S_CODEC_AMR_WB_EXT 6
#define S_CODEC_H264 7
DWORD streamID;
DWORD creationTime;
DWORD duration;
DWORD rate;
WORD altGroupID;
WORD swiGroupID;
WORD selectAttributes;
#define SELECT_ATTR_LANGUAGE 0x0001
#define SELECT_ATTR_BANDWIDTH 0x0002
#define SELECT_ATTR_CODEC 0x0004
#define SELECT_ATTR_SCREENSIZE 0x0008
#define SELECT_ATTR_MAXPKTSIZE 0x0010
#define SELECT_ATTR_STREAMTYPE 0x0020
DWORD duration;
DWORD rate;
char handlerName [8];
DWORD sampleSize;
#define SAMPLE_SIZE_VARIABLE 0
DWORD sampleCount;
DWORD maxSampleSize;
DWORD byteCount;
DWORD flags;
DWORD startDelay;
} FILE_INFO_STREAM_HEADER;
Field |
Description |
blkSize |
Total size of the FILE_INFO_STREAM_HEADER block, in bytes. The default value is 44. |
streamType |
Type of stream. Determines whether the stream block is an audio or video stream block. Valid values:
|
codec |
Type of codec. Determines whether the codec structure is an audio or video structure. Valid values:
|
streamID |
Identifier of the stream or track. |
creationTime |
Creation date of the stream or track. |
altGroupID |
Reserved for future use. |
swiGroupID |
Reserved for future use. |
selectAttributes |
Reserved for future use. |
duration |
Play duration of the stream or track. |
rate |
Sampling rate for audio stream (in Hz) or frame rate for video stream (in frames per second). |
handlerName |
Media handler name. |
sampleSize |
Size of the sample. The value is 0 (zero) if the size is variable. |
sampleCount |
Number of samples in the stream. |
maxSampleSize |
Size of the largest sample in the stream. The value is 0 (zero) if the information is not available. |
byteCount |
Total number of bytes in the stream or track. |
flags |
Reserved for future use. |
startdelay |
Reserved for future use. |
Level 3 contains the following media format structures:
The structure used depends on the codec specified in the stream header.
Note: When new fields are added, the blkSize field of blkHeader must reflect the new size of the block.
Contains audio-specific stream format information. It is always present in an audio stream block, and is common to all audio codecs.
typedef struct
WORD blkSize;
WORD channelCount;
#define CHANNEL_COUNT_MONO 1
#define CHANNEL_COUNT_STEREO 2
#define CHANNEL_COUNT_51 6
WORD sampleSize;
WORD flags;
FILE_INFO_FORMAT_AUDIO;
Field |
Description |
blkSize |
Total size of the FILE_INFO_FORMAT_AUDIO block, in bytes. The default value is 10. |
channelCount |
Number of audio channels: 1 = CHANNEL_COUNT_MONO 2 = CHANNEL_COUNT_STEREO 6 = CHANNEL_COUNT_51 |
sampleSize |
Number of bits per audio sample. |
flags |
Reserved for future use. |
Contains video-specific stream format information. It is always present in a video stream block, and is common to all video codecs.
typedef struct
{
WORD blkSize;
WORD width;
WORD height;
INT16 layer;
WORD hResolution;
WORD vResolution;
DWORD flags;
} FILE_INFO_FORMAT_VIDEO;
Field |
Description |
blkSize |
Total size of the FILE_INFO_FORMAT_VIDEO block, in bytes. The default value is 20. |
width |
Picture width, in pixels. For example, 176 for QCIF. |
height |
Picture height, in pixels. For example, 144 for QCIF. |
layer |
Front-to-back ordering. 0 is the normal view. Negative values are in front. |
hResolution |
Picture horizontal resolution, in pixels per inch. For example, 72. |
vResolution |
Picture vertical resolution in pixels per inch. For example, 72. |
flags |
Reserved for future use. |
Level 4 contains the following codec information structures:
The structure used depends on the codec specified in the stream header.
Contains AMR codec information.
typedef struct
{
WORD modeSet; /* bitmap of AMR modes possibly present in stream. b0=mode 0 etc. */
#define S_AMR_MODE_475 0x0001
#define S_AMR_MODE_515 0x0002
#define S_AMR_MODE_590 0x0004
#define S_AMR_MODE_670 0x0008
#define S_AMR_MODE_740 0x0010
#define S_AMR_MODE_795 0x0020
#define S_AMR_MODE_102 0x0040
#define S_AMR_MODE_122 0x0080
#define S_AMR_MODE_SID 0x0100
#define S_AMR_MODE_NODATA 0x8000
#define S_AMR_MODE_ALL 0x81FF
BYTE modeChangePeriod;
BYTE framesPerSample;
char vendor [8];
// new fields may be added here in future release
} FILE_INFO_CODEC_AMR;
Field |
Description |
modeSet |
Bitmap of AMR modes that can be present in the stream. Valid values:
|
modeChangePeriod |
A value of 0 (zero) specifies no restriction. |
framesPerSample |
Number of frames per sample. |
vendor |
Four-character string representing the codec's manufacturer. |
Contains H.263 codec information.
typedef struct
{
BYTE level;
BYTE profile;
DWORD avgBitrate;
DWORD maxBitrate;
char vendor [8];
// new fields may be added here in future release
} FILE_INFO_CODEC_H263;
Field |
Description |
level |
H.263 standard level. Valid values are 10, 20, and 30. |
profile |
H.263 profile. The only valid value is 0. |
avgBitrate |
Reserved for future use. |
maxBitrate |
Reserved for future use. |
vendor |
Reserved for future use. |
Contains H.264 codec information.
typedef struct
{
WORD dcStreamType;
WORD dcSpecInfoSize;
#define MMFI_MAX_H264_DCI_SZ 1024
BYTE pDcSpecInfo[MMFI_MAX_H264_DCI_SZ];
WORD dcSpecInfoSize3gppFormat;
BYTE pDcSpecInfo3gppFormat[MMFI_MAX_H264_DCI_SZ];
BYTE level;
} FILE_INFO_CODEC_H264;
Field |
Description |
dcStreamType |
streamType field of the MPEG-4 DecoderConfig descriptor. |
dcSpecInfoSize |
Size of decoder specific information, in bytes. |
pDcSpecInfo |
Points to specific information found in the MPEG-4 DecoderConfig descriptor. |
dcSpecInfoSize3gppFormat |
Size of decoder specific information, 3gpp format, in bytes. The 3gpp format version contains H.264 start codes. |
pDcSpecInfo3gppFormat |
Points to specific information found in the MPEG-4 DecoderConfig descriptor, 3gpp format. |
level |
H.264 level. |
Contains MPEG-4 codec information.
typedef struct
{
WORD dcStreamType;
WORD dcBufferSize;
DWORD dcAvgBitrate;
DWORD dcMaxBitrate;
WORD dcSpecInfoSize;
#define MMFI_MAX_MPEG4_DCI_SZ 128
BYTE pDcSpecInfo[MMFI_MAX_MPEG4_DCI_SZ];
BYTE level;
} FILE_INFO_CODEC_MPEG4;
Field |
Description |
dcStreamType |
streamType field of the MPEG-4 DecoderConfig descriptor. |
dcBufferSize |
Maximum size of sample, in bytes, as indicated in the MPEG-4 DecoderConfig descriptor. For example, minimum size of the decoder buffer. |
dcAvgBitrate |
Average bitrate, as indicated in the MPEG-4 DecoderConfig descriptor. |
dcMaxBitrate |
Maximum bitrate, as indicated in the MPEG-4 DecoderConfig descriptor. |
dcSpecInfoSize |
Size of decoder specific information, in bytes. |
pDcSpecInfo |
Points to specific information found in the MPEG-4 DecoderConfig descriptor. If present, this data is stored at the end of the current stream block. |
level |
MPEG-4 level. |