Copyright 2013-01-06 Werner Randelshofer

org.monte.media.avi
Class AbstractAVIStream.VideoTrack

java.lang.Object
  extended by org.monte.media.avi.AbstractAVIStream.Track
      extended by 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
 
Constructor Summary
AbstractAVIStream.VideoTrack(int trackIndex, int fourCC, Format videoFormat)
           
 
Method Summary
 int getSampleChunkFourCC(boolean isSync)
           
 long getSTRFChunkSize()
           
 
Methods inherited from class org.monte.media.avi.AbstractAVIStream.Track
addSample
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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.

Constructor Detail

AbstractAVIStream.VideoTrack

public AbstractAVIStream.VideoTrack(int trackIndex,
                                    int fourCC,
                                    Format videoFormat)
Method Detail

getSTRFChunkSize

public long getSTRFChunkSize()
Specified by:
getSTRFChunkSize in class AbstractAVIStream.Track

getSampleChunkFourCC

public int getSampleChunkFourCC(boolean isSync)
Specified by:
getSampleChunkFourCC in class AbstractAVIStream.Track

Copyright 2013-01-06 Werner Randelshofer