Package gov.nih.mipav.model.file
Class FileAvi
- java.lang.Object
- 
- gov.nih.mipav.model.file.FileBase
- 
- gov.nih.mipav.model.file.FileAvi
 
 
- 
 public class FileAvi extends FileBase AVI file writer and reader.- Version:
- 1.1 March 5, 2011
- Author:
- William Gandler, Matthew J. McAuliffe, Ph.D. The Microsoft Video 1 decoding was mostly derived from Mike A good source of sample avi files is http://samples.mplayerhq.hu.
 
- 
- 
Field SummaryFields Modifier and Type Field Description private booleanAVIF_HASINDEXprivate booleanAVIF_ISINTERLEAVEDDOCUMENT ME!private booleanAVIF_MUSTUSEINDEXglobals needed for read - set in readHeader, used in readImage.private shortbitCountDOCUMENT ME!private intblankFramesSentDOCUMENT ME!private byte[]bufferWriteDOCUMENT ME!private floatcaptureTimeprivate intcompression0 for RGB 24 bit per pixel uncompressed 1 for RLE 8 bit per pixel compressed 1296126531 for Microsoft video 1 compression.private floatcompressionQualityDOCUMENT ME!private intdataFramesSentDOCUMENT ME!private byte[]dataSignatureglobals needed for write.private int[]dcLengthDOCUMENT ME!private booleanendianesstrue for big-endian and false for little-endian.private java.io.FilefileDOCUMENT ME!private java.lang.StringfileDirDOCUMENT ME!private FileInfoAvifileInfoDOCUMENT ME!private java.lang.StringfileNameDOCUMENT ME!private java.io.FilefileWprivate intframesToCaptureprivate intframesToSkipprivate intheightDOCUMENT ME!private longidx1PositionDOCUMENT ME!private ModelImageimageADOCUMENT ME!private ModelImageimageBDOCUMENT ME!private float[]imageBufferADOCUMENT ME!private float[]imageBufferBDOCUMENT ME!private floatimageMinADOCUMENT ME!private longindexPointerDOCUMENT ME!private intindexSizeSize of the index block in bytes.private booleanisScriptfor saving within scripts.private intLIST2SizeDOCUMENT ME!private intLIST2subchunkSizeDOCUMENT ME!private ModelLUTLUTaDOCUMENT ME!private byte[]lutBufferDOCUMENT ME!private int[]lutBufferRemappedDOCUMENT ME!private intmicroSecPerFrameDOCUMENT ME!private longmoviPositionDOCUMENT ME!private longmoviSubchunkPositionDOCUMENT ME!private intnewCompressionType2 for .mov, 3 for mjpeg, 4 for mp4v2.private java.lang.StringoutputFileNameprivate ProgressBarInterfaceprogressBarDOCUMENT ME!private java.io.RandomAccessFileraFileWprivate intrateprivate booleanreadQTDOCUMENT ME!private floatremapConstADOCUMENT ME!private long[]savedbLengthDOCUMENT ME!private longsaveFileSizeDOCUMENT ME!private longsaveLIST2SizeDOCUMENT ME!private longsavemoviDOCUMENT ME!private intscaleprivate floatskipTimeprivate intstreamsDOCUMENT ME!private inttDimDOCUMENT ME!private inttotalBlankFramesDOCUMENT ME!private inttotalDataFramesThese are used for writing the AVI frame by frame from the surface renderer.private ViewUserInterfaceUIDOCUMENT ME!private booleanuseNewCompressionDOCUMENT ME!private intwidthDOCUMENT ME!private booleanwriteQTDOCUMENT ME!private intxDimDOCUMENT ME!private intxPadDOCUMENT ME!private intyDimDOCUMENT ME!private intzDimDOCUMENT ME!- 
Fields inherited from class gov.nih.mipav.model.file.FileBaseBIG_ENDIAN, bitsPerPixel, fileNames, LITTLE_ENDIAN, pBarVisible, raFile, READ, READ_WRITE
 
- 
 - 
Constructor SummaryConstructors Constructor Description FileAvi(java.lang.String fileName, java.lang.String fileDir)Avi reader/writer constructor.
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()DOCUMENT ME!private byte[]createLUT()Creates a LUT to write.voidfinalize()Prepares this class for cleanup.java.lang.StringgetFileDir()Returns fileDir.FileInfoAvigetFileInfo()java.lang.StringgetFileName()Returns fileName.booleangetHasIndex()intgetMicroSecPerFrame()ModelLUTgetModelLUT()Returns LUT if defined.booleangetMustUseIndex()intgetRate()intgetScale()intreadHeader()Reads the image header.ModelImagereadImage(boolean one)Reads the AVI file header and data.booleanreadWriteImage()voidsetAVIWrite(ModelImage _imageA, int microSecPerFrame, int _totalDataFrames, int _totalBlankFrames)This method sets up for an AVI image write.voidsetCaptureTime(float captureTime)voidsetCompressionQuality(float quality)DOCUMENT ME!voidsetIsScript(boolean isScript)DOCUMENT ME!voidsetMicroSecPerFrame(int microSec)DOCUMENT ME!voidsetOutputFileName(java.lang.String outputFileName)voidsetProgressBar(ProgressBarInterface pBar)DOCUMENT ME!voidsetReadQT(boolean readQT)DOCUMENT ME!voidsetSkipTime(float skipTime)voidsetWriteQT(boolean writeQuickTime)DOCUMENT ME!private voidwriteAVITriplet(int timeSlice, int slice, ModelLUT LUTb, int red, int green, int blue, float opacityPrime, float alphaBlend, java.util.BitSet paintBitmap)Writes the AVI BGR triplet.private voidwriteAVITripletC(int timeSlice, int slice, ModelRGB RGBTA, ModelRGB RGBTB, int red, int green, int blue, float opacityPrime, float alphaBlend, java.util.BitSet paintBitmap)Write BGR AVI triplet for color image.private voidwriteAVITripletCFrames()Write BGR AVI triplet for color image.voidwriteBlankFrame()DOCUMENT ME!voidwriteDataFrame(ModelImage _imageA)DOCUMENT ME!private voidwriteidx1CHUNK()DOCUMENT ME!booleanwriteImage(ModelImage _imageA, ModelImage _imageB, ModelLUT _LUTa, ModelLUT LUTb, ModelRGB RGBTA, ModelRGB RGBTB, int red, int green, int blue, float OPACITY, float alphaBlend, java.util.BitSet paintBitmap, int compression)This method writes an AVI image file.voidwriteIntW(int data, boolean bigEndian)Writes an int as four bytes to a file.private voidwriteRLE8(int timeSlice, int slice, byte[] pixStore, byte[] lastStore, byte[] encodeStore)Writes the RLE8 encoded LUT index.voidwriteShortW(short data, boolean bigEndian)Writes a short as two bytes to a file.- 
Methods inherited from class gov.nih.mipav.model.file.FileBaseaddProgressChangeListener, bytesToDouble, bytesToFloat, bytesToInt, bytesToShort, doubleToBytes, fireProgressStateChanged, fireProgressStateChanged, fireProgressStateChanged, floatToBytes, getBufferDouble, getBufferFloat, getBufferInt, getBufferLong, getBufferShort, getBufferUShort, getDataType, getDouble, getFloat, getInt, getLong, getProgressChangeListeners, getRaFile, getSignedShort, getString, getUInt, getUnsignedByte, getUnsignedShort, intToBytes, isBigEndian, isProgressBarVisible, linkProgress, longToBytes, readDouble, readFloat, readInt, readLong, readShort, readString, readUnsignedShort, removeProgressChangeListener, setBigEndian, setBufferFloat, setBufferInt, setBufferLong, setBufferShort, setBufferString, setDataType, setEndianess, shortToBytes, writeBytes, writeDouble, writeFloat, writeInt, writeLong, writeShort
 
- 
 
- 
- 
- 
Field Detail- 
AVIF_ISINTERLEAVEDprivate boolean AVIF_ISINTERLEAVED DOCUMENT ME!
 - 
AVIF_MUSTUSEINDEXprivate boolean AVIF_MUSTUSEINDEX globals needed for read - set in readHeader, used in readImage.
 - 
AVIF_HASINDEXprivate boolean AVIF_HASINDEX 
 - 
bitCountprivate short bitCount DOCUMENT ME!
 - 
blankFramesSentprivate int blankFramesSent DOCUMENT ME!
 - 
bufferWriteprivate byte[] bufferWrite DOCUMENT ME!
 - 
compressionprivate int compression 0 for RGB 24 bit per pixel uncompressed 1 for RLE 8 bit per pixel compressed 1296126531 for Microsoft video 1 compression.
 - 
compressionQualityprivate float compressionQuality DOCUMENT ME!
 - 
dataFramesSentprivate int dataFramesSent DOCUMENT ME!
 - 
dataSignatureprivate byte[] dataSignature globals needed for write.
 - 
dcLengthprivate int[] dcLength DOCUMENT ME!
 - 
endianessprivate boolean endianess true for big-endian and false for little-endian.
 - 
fileprivate java.io.File file DOCUMENT ME!
 - 
fileDirprivate java.lang.String fileDir DOCUMENT ME!
 - 
fileInfoprivate FileInfoAvi fileInfo DOCUMENT ME!
 - 
fileNameprivate java.lang.String fileName DOCUMENT ME!
 - 
heightprivate int height DOCUMENT ME!
 - 
idx1Positionprivate long idx1Position DOCUMENT ME!
 - 
imageAprivate ModelImage imageA DOCUMENT ME!
 - 
imageBprivate ModelImage imageB DOCUMENT ME!
 - 
imageBufferAprivate float[] imageBufferA DOCUMENT ME!
 - 
imageBufferBprivate float[] imageBufferB DOCUMENT ME!
 - 
imageMinAprivate float imageMinA DOCUMENT ME!
 - 
indexPointerprivate long indexPointer DOCUMENT ME!
 - 
indexSizeprivate int indexSize Size of the index block in bytes.
 - 
isScriptprivate boolean isScript for saving within scripts.
 - 
LIST2Sizeprivate int LIST2Size DOCUMENT ME!
 - 
LIST2subchunkSizeprivate int LIST2subchunkSize DOCUMENT ME!
 - 
LUTaprivate ModelLUT LUTa DOCUMENT ME!
 - 
lutBufferprivate byte[] lutBuffer DOCUMENT ME!
 - 
lutBufferRemappedprivate int[] lutBufferRemapped DOCUMENT ME!
 - 
microSecPerFrameprivate int microSecPerFrame DOCUMENT ME!
 - 
scaleprivate int scale 
 - 
rateprivate int rate 
 - 
moviPositionprivate long moviPosition DOCUMENT ME!
 - 
moviSubchunkPositionprivate long moviSubchunkPosition DOCUMENT ME!
 - 
newCompressionTypeprivate int newCompressionType 2 for .mov, 3 for mjpeg, 4 for mp4v2.
 - 
progressBarprivate ProgressBarInterface progressBar DOCUMENT ME!
 - 
readQTprivate boolean readQT DOCUMENT ME!
 - 
remapConstAprivate float remapConstA DOCUMENT ME!
 - 
savedbLengthprivate long[] savedbLength DOCUMENT ME!
 - 
saveFileSizeprivate long saveFileSize DOCUMENT ME!
 - 
saveLIST2Sizeprivate long saveLIST2Size DOCUMENT ME!
 - 
savemoviprivate long savemovi DOCUMENT ME!
 - 
streamsprivate int streams DOCUMENT ME!
 - 
totalBlankFramesprivate int totalBlankFrames DOCUMENT ME!
 - 
totalDataFramesprivate int totalDataFrames These are used for writing the AVI frame by frame from the surface renderer.
 - 
UIprivate ViewUserInterface UI DOCUMENT ME!
 - 
useNewCompressionprivate boolean useNewCompression DOCUMENT ME!
 - 
widthprivate int width DOCUMENT ME!
 - 
writeQTprivate boolean writeQT DOCUMENT ME!
 - 
xDimprivate int xDim DOCUMENT ME!
 - 
yDimprivate int yDim DOCUMENT ME!
 - 
zDimprivate int zDim DOCUMENT ME!
 - 
tDimprivate int tDim DOCUMENT ME!
 - 
xPadprivate int xPad DOCUMENT ME!
 - 
outputFileNameprivate java.lang.String outputFileName 
 - 
captureTimeprivate float captureTime 
 - 
skipTimeprivate float skipTime 
 - 
fileWprivate java.io.File fileW 
 - 
raFileWprivate java.io.RandomAccessFile raFileW 
 - 
framesToCaptureprivate int framesToCapture 
 - 
framesToSkipprivate int framesToSkip 
 
- 
 - 
Method Detail- 
setCaptureTimepublic void setCaptureTime(float captureTime) 
 - 
setSkipTimepublic void setSkipTime(float skipTime) 
 - 
setOutputFileNamepublic void setOutputFileName(java.lang.String outputFileName) 
 - 
getMicroSecPerFramepublic int getMicroSecPerFrame() 
 - 
getScalepublic int getScale() 
 - 
getRatepublic int getRate() 
 - 
getHasIndexpublic boolean getHasIndex() 
 - 
getMustUseIndexpublic boolean getMustUseIndex() 
 - 
closepublic void close() DOCUMENT ME!
 - 
finalizepublic void finalize() Prepares this class for cleanup.
 - 
getFileDirpublic java.lang.String getFileDir() Returns fileDir.- Returns:
- fileDir
 
 - 
getFileNamepublic java.lang.String getFileName() Returns fileName.- Returns:
- filename
 
 - 
getFileInfopublic FileInfoAvi getFileInfo() 
 - 
getModelLUTpublic ModelLUT getModelLUT() Returns LUT if defined.- Returns:
- The LUT if defined, otherwise null.
 
 - 
readImagepublic ModelImage readImage(boolean one) throws java.io.IOException Reads the AVI file header and data.- Parameters:
- one- if true only reads one slice per file
- Returns:
- An ARGB image
- Throws:
- java.io.IOException- if there is an error reading the file
 
 - 
setAVIWritepublic void setAVIWrite(ModelImage _imageA, int microSecPerFrame, int _totalDataFrames, int _totalBlankFrames) throws java.io.IOException This method sets up for an AVI image write. This is only used for RGB images where only an imageA and no imageB will be present. The image will be written as a series of 2D images and a series of frames without data used for repeating existing frames. This method will use the first 2D image.- Parameters:
- _imageA- First 2D image for AVI.
- microSecPerFrame- Frame rate.
- _totalDataFrames- Number of frames containing true data.
- _totalBlankFrames- Number of frames that are "blank" and should be filled with previous frame's data.
- Throws:
- java.io.IOException- if there is an error writing the file.
 
 - 
setCompressionQualitypublic void setCompressionQuality(float quality) DOCUMENT ME!- Parameters:
- quality- DOCUMENT ME!
 
 - 
setIsScriptpublic void setIsScript(boolean isScript) DOCUMENT ME!- Parameters:
- isScript- DOCUMENT ME!
 
 - 
setMicroSecPerFramepublic void setMicroSecPerFrame(int microSec) DOCUMENT ME!- Parameters:
- microSec- DOCUMENT ME!
 
 - 
setProgressBarpublic void setProgressBar(ProgressBarInterface pBar) DOCUMENT ME!- Parameters:
- pBar- DOCUMENT ME!
 
 - 
setReadQTpublic void setReadQT(boolean readQT) DOCUMENT ME!- Parameters:
- readQT- DOCUMENT ME!
 
 - 
setWriteQTpublic void setWriteQT(boolean writeQuickTime) DOCUMENT ME!- Parameters:
- writeQuickTime- DOCUMENT ME!
 
 - 
writeBlankFramepublic void writeBlankFrame() throws java.io.IOExceptionDOCUMENT ME!- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeDataFramepublic void writeDataFrame(ModelImage _imageA) throws java.io.IOException DOCUMENT ME!- Parameters:
- _imageA- DOCUMENT ME!
- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeImagepublic boolean writeImage(ModelImage _imageA, ModelImage _imageB, ModelLUT _LUTa, ModelLUT LUTb, ModelRGB RGBTA, ModelRGB RGBTB, int red, int green, int blue, float OPACITY, float alphaBlend, java.util.BitSet paintBitmap, int compression) throws java.io.IOException This method writes an AVI image file.- Parameters:
- _imageA- DOCUMENT ME!
- _imageB- DOCUMENT ME!
- _LUTa- DOCUMENT ME!
- LUTb- DOCUMENT ME!
- RGBTA- DOCUMENT ME!
- RGBTB- DOCUMENT ME!
- red- DOCUMENT ME!
- green- DOCUMENT ME!
- blue- DOCUMENT ME!
- OPACITY- DOCUMENT ME!
- alphaBlend- DOCUMENT ME!
- paintBitmap- DOCUMENT ME!
- compression- -1 = unchosen, 0 = 24 bit uncompressed RGB, 1 = 8 bit per pixel compressed RLE
- Returns:
- DOCUMENT ME!
- Throws:
- java.io.IOException- if there is an error writing the file.
 
 - 
createLUTprivate byte[] createLUT() Creates a LUT to write.- Returns:
- DOCUMENT ME!
 
 - 
readHeaderpublic int readHeader() throws java.io.IOExceptionReads the image header.- Returns:
- DOCUMENT ME!
- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeAVITripletprivate void writeAVITriplet(int timeSlice, int slice, ModelLUT LUTb, int red, int green, int blue, float opacityPrime, float alphaBlend, java.util.BitSet paintBitmap) throws java.io.IOExceptionWrites the AVI BGR triplet.- Parameters:
- timeSlice- t (time) slice to show
- slice- z slice to show
- LUTb- DOCUMENT ME!
- red- DOCUMENT ME!
- green- DOCUMENT ME!
- blue- DOCUMENT ME!
- opacityPrime- DOCUMENT ME!
- alphaBlend- DOCUMENT ME!
- paintBitmap- DOCUMENT ME!
- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeAVITripletCprivate void writeAVITripletC(int timeSlice, int slice, ModelRGB RGBTA, ModelRGB RGBTB, int red, int green, int blue, float opacityPrime, float alphaBlend, java.util.BitSet paintBitmap) throws java.io.IOExceptionWrite BGR AVI triplet for color image.- Parameters:
- timeSlice- t (time) slice to show
- slice- z slice to show
- RGBTA- DOCUMENT ME!
- RGBTB- DOCUMENT ME!
- red- DOCUMENT ME!
- green- DOCUMENT ME!
- blue- DOCUMENT ME!
- opacityPrime- DOCUMENT ME!
- alphaBlend- DOCUMENT ME!
- paintBitmap- DOCUMENT ME!
- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeAVITripletCFramesprivate void writeAVITripletCFrames() throws java.io.IOExceptionWrite BGR AVI triplet for color image. Since this is a frame captured on screen, this method is much simpler.- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeidx1CHUNKprivate void writeidx1CHUNK() throws java.io.IOExceptionDOCUMENT ME!- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
writeRLE8private void writeRLE8(int timeSlice, int slice, byte[] pixStore, byte[] lastStore, byte[] encodeStore) throws java.io.IOExceptionWrites the RLE8 encoded LUT index.- Parameters:
- timeSlice- t (time) slice to show
- slice- z slice to show
- pixStore- DOCUMENT ME!
- lastStore- DOCUMENT ME!
- encodeStore- DOCUMENT ME!
- Throws:
- java.io.IOException- DOCUMENT ME!
 
 - 
readWriteImagepublic boolean readWriteImage() throws java.io.IOException- Throws:
- java.io.IOException
 
 - 
writeIntWpublic final void writeIntW(int data, boolean bigEndian) throws java.io.IOExceptionWrites an int as four bytes to a file.- Parameters:
- data- Data to be written to file.
- bigEndian-- trueindicates big endian byte order,- falseindicates little endian.
- Throws:
- java.io.IOException- if there is an error writing the file
 
 - 
writeShortWpublic final void writeShortW(short data, boolean bigEndian) throws java.io.IOExceptionWrites a short as two bytes to a file.- Parameters:
- data- Data to be written to file.
- bigEndian-- trueindicates big endian byte order,- falseindicates little endian.
- Throws:
- java.io.IOException- if there is an error writing the file
 
 
- 
 
-