org.monte.media.avi
Class AbstractAVIStream.VideoTrack
java.lang.Object
org.monte.media.avi.AbstractAVIStream.Track
org.monte.media.avi.AbstractAVIStream.VideoTrack
- Enclosing class:
- AbstractAVIStream
protected class AbstractAVIStream.VideoTrack
- extends AbstractAVIStream.Track
Represents a video track in an AVI file.
The format of a video track is defined in a "strf" chunk, which contains a
BITMAPINFOHEADER struct.
//----------------------
// AVI Bitmap Info Header
// ----------------------
typedef struct {
BYTE blue;
BYTE green;
BYTE red;
BYTE reserved;
} RGBQUAD;
// Values for this enum taken from:
// http://www.fourcc.org/index.php?http%3A//www.fourcc.org/rgb.php
enum {
BI_RGB = 0x00000000,
RGB = 0x32424752, // Alias for BI_RGB
BI_RLE8 = 0x01000000,
RLE8 = 0x38454C52, // Alias for BI_RLE8
BI_RLE4 = 0x00000002,
RLE4 = 0x34454C52, // Alias for BI_RLE4
BI_BITFIELDS = 0x00000003,
raw = 0x32776173,
RGBA = 0x41424752,
RGBT = 0x54424752,
cvid = "cvid"
} bitmapCompression;
typedef struct {
DWORD structSize;
// Specifies the number of bytes required by the structure.
LONG width;
// Specifies the width of the bitmap.
// - For RGB formats, the width is specified in pixels.
// - The same is true for YUV formats if the bitdepth is an even power
// of 2.
// - For YUV formats where the bitdepth is not an even power of 2,
// however, the width is specified in bytes.
// Decoders and video sources should propose formats where "width" is
// the width of the image. If the video renderer is using DirectDraw, it
// modifies the format so that "width" equals the stride of the surface,
// and the "target" member of the VIDEOINFOHEADER or VIDEOINFOHEADER2
// structure specifies the image width. Then it proposes the modified
// format using IPin::QueryAccept.
// For RGB and even-power-of-2 YUV formats, if the video renderer does
// not specify the stride, then round the width up to the nearst DWORD
// boundary to find the stride.
LONG height;
// Specifies the height of the bitmap, in pixels.
// - For uncompressed RGB bitmaps, if "height" is positive, the bitmap
// is a bottom-up DIB with the origin at the lower left corner. If
// "height" is negative, the bitmap is a top-down DIB with the origin
// at the upper left corner.
// - For YUV bitmaps, the bitmap is always top-down, regardless of the
// sign of "height". Decoders should offer YUV formats with postive
// "height", but for backward compatibility they should accept YUV
// formats with either positive or negative "height".
// - For compressed formats, height must be positive, regardless of
// image orientation.
WORD planes;
// Specifies the number of planes for the target device. This value must
// be set to 1.
WORD bitCount;
// Specifies the number of bits per pixel.
//DWORD enum bitmapCompression compression;
FOURCC enum bitmapCompression compression;
// If the bitmap is compressed, this member is a FOURCC the specifies
// the compression.
// Value Description
// BI_RLE8 A run-length encoded (RLE) format for bitmaps with 8
// bpp. The compression format is a 2-byte format
// consisting of a count byte followed by a byte containing a color index. For more information, see Bitmap Compression.
// BI_RLE4 An RLE format for bitmaps with 4 bpp. The compression
// format is a 2-byte format consisting of a count byte
// followed by two word-length color indexes. For more
// information, see Bitmap Compression.
// BI_JPEG Windows 98/Me, Windows 2000/XP: Indicates that the
// image is a JPEG image.
// BI_PNG Windows 98/Me, Windows 2000/XP: Indicates that the
// image is a PNG image.
// For uncompressed formats, the following values are possible:
// Value Description
// BI_RGB Uncompressed RGB.
// BI_BITFIELDS Specifies that the bitmap is not compressed and that
// the color table consists of three DWORD color masks
// that specify the red, green, and blue components,
// respectively, of each pixel. This is valid when used
// with 16- and 32-bpp bitmaps.
DWORD imageSizeInBytes;
// Specifies the size, in bytes, of the image. This can be set to 0 for
// uncompressed RGB bitmaps.
LONG xPelsPerMeter;
// Specifies the horizontal resolution, in pixels per meter, of the
// target device for the bitmap.
LONG yPelsPerMeter;
// Specifies the vertical resolution, in pixels per meter, of the target
// device for the bitmap.
DWORD numberOfColorsUsed;
// Specifies the number of color indices in the color table that are
// actually used by the bitmap
DWORD numberOfColorsImportant;
// Specifies the number of color indices that are considered important
// for displaying the bitmap. If this value is zero, all colors are
// important.
RGBQUAD colors[];
// If the bitmap is 8-bpp or less, the bitmap uses a color table, which
// immediately follows the BITMAPINFOHEADER. The color table consists of
// an array of RGBQUAD values. The size of the array is given by the
// "clrUsed" member. If "clrUsed" is zero, the array contains the
// maximum number of colors for the given bitdepth; that is,
// 2^"bitCount" colors.
} BITMAPINFOHEADER;
|
Field Summary |
protected java.awt.image.IndexColorModel |
palette
Index color model for RAW_RGB4 and RAW_RGB8 formats. |
protected java.lang.Object |
previousData
Previous frame for delta compression. |
protected java.awt.image.IndexColorModel |
previousPalette
|
protected float |
videoQuality
The video compression quality. |
| Fields inherited from class org.monte.media.avi.AbstractAVIStream.Track |
codec, extraHeaders, fccHandler, flags, format, initialFrames, inputBuffer, language, length, mediaType, name, outputBuffer, priority, quality, rate, readIndex, samples, scale, startTime, strfChunk, strhChunk, syncInterval, twoCC |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
videoQuality
protected float videoQuality
- The video compression quality.
palette
protected java.awt.image.IndexColorModel palette
- Index color model for RAW_RGB4 and RAW_RGB8 formats.
previousPalette
protected java.awt.image.IndexColorModel previousPalette
previousData
protected java.lang.Object previousData
- Previous frame for delta compression.
AbstractAVIStream.VideoTrack
public AbstractAVIStream.VideoTrack(int trackIndex,
java.lang.String fourCC,
Format videoFormat)
getSTRFChunkSize
public long getSTRFChunkSize()
- Specified by:
getSTRFChunkSize in class AbstractAVIStream.Track
getSampleChunkFourCC
public java.lang.String getSampleChunkFourCC(boolean isSync)
- Specified by:
getSampleChunkFourCC in class AbstractAVIStream.Track