FileDocCategorySizeDatePackage
VisualSampleEntry.javaAPI Docmp4parser 1.0-RC-176901Wed Dec 19 20:10:38 GMT 2012com.coremedia.iso.boxes.sampleentry

VisualSampleEntry

public class VisualSampleEntry extends SampleEntry implements com.coremedia.iso.boxes.ContainerBox
Contains information common to all visual tracks.
class VisualSampleEntry(codingname) extends SampleEntry (codingname){
unsigned int(16) pre_defined = 0;
const unsigned int(16) reserved = 0;
unsigned int(32)[3] pre_defined = 0;
unsigned int(16) width;
unsigned int(16) height;
template unsigned int(32) horizresolution = 0x00480000; // 72 dpi
template unsigned int(32) vertresolution = 0x00480000; // 72 dpi
const unsigned int(32) reserved = 0;
template unsigned int(16) frame_count = 1;
string[32] compressorname;
template unsigned int(16) depth = 0x0018;
int(16) pre_defined = -1;
}

Format-specific informationis appened as boxes after the data described in ISO/IEC 14496-12 chapter 8.16.2.

Fields Summary
public static final String
TYPE1
public static final String
TYPE2
public static final String
TYPE3
public static final String
TYPE_ENCRYPTED
Identifier for an encrypted video track.
private int
width
private int
height
private double
horizresolution
private double
vertresolution
private int
frameCount
private String
compressorname
private int
depth
private long[]
predefined
Constructors Summary
public VisualSampleEntry(String type)


       
        super(type);
    
Methods Summary
public void_parseDetails(java.nio.ByteBuffer content)

        _parseReservedAndDataReferenceIndex(content);
        long tmp = IsoTypeReader.readUInt16(content);
        assert 0 == tmp : "reserved byte not 0";
        tmp = IsoTypeReader.readUInt16(content);
        assert 0 == tmp : "reserved byte not 0";
        predefined[0] = IsoTypeReader.readUInt32(content);     // should be zero
        predefined[1] = IsoTypeReader.readUInt32(content);     // should be zero
        predefined[2] = IsoTypeReader.readUInt32(content);     // should be zero
        width = IsoTypeReader.readUInt16(content);
        height = IsoTypeReader.readUInt16(content);
        horizresolution = IsoTypeReader.readFixedPoint1616(content);
        vertresolution = IsoTypeReader.readFixedPoint1616(content);
        tmp = IsoTypeReader.readUInt32(content);
        assert 0 == tmp : "reserved byte not 0";
        frameCount = IsoTypeReader.readUInt16(content);
        int compressornameDisplayAbleData = IsoTypeReader.readUInt8(content);
        if (compressornameDisplayAbleData > 31) {
            System.out.println("invalid compressor name displayable data: " + compressornameDisplayAbleData);
            compressornameDisplayAbleData = 31;
        }
        byte[] bytes = new byte[compressornameDisplayAbleData];
        content.get(bytes);
        compressorname = Utf8.convert(bytes);
        if (compressornameDisplayAbleData < 31) {
            byte[] zeros = new byte[31 - compressornameDisplayAbleData];
            content.get(zeros);
            //assert Arrays.equals(zeros, new byte[zeros.length]) : "The compressor name length was not filled up with zeros";
        }
        depth = IsoTypeReader.readUInt16(content);
        tmp = IsoTypeReader.readUInt16(content);
        assert 0xFFFF == tmp;

        _parseChildBoxes(content);

    
public java.lang.StringgetCompressorname()

        return compressorname;
    
protected voidgetContent(java.nio.ByteBuffer byteBuffer)

        _writeReservedAndDataReferenceIndex(byteBuffer);
        IsoTypeWriter.writeUInt16(byteBuffer, 0);
        IsoTypeWriter.writeUInt16(byteBuffer, 0);
        IsoTypeWriter.writeUInt32(byteBuffer, predefined[0]);
        IsoTypeWriter.writeUInt32(byteBuffer, predefined[1]);
        IsoTypeWriter.writeUInt32(byteBuffer, predefined[2]);

        IsoTypeWriter.writeUInt16(byteBuffer, getWidth());
        IsoTypeWriter.writeUInt16(byteBuffer, getHeight());

        IsoTypeWriter.writeFixedPoint1616(byteBuffer, getHorizresolution());
        IsoTypeWriter.writeFixedPoint1616(byteBuffer, getVertresolution());


        IsoTypeWriter.writeUInt32(byteBuffer, 0);
        IsoTypeWriter.writeUInt16(byteBuffer, getFrameCount());
        IsoTypeWriter.writeUInt8(byteBuffer, Utf8.utf8StringLengthInBytes(getCompressorname()));
        byteBuffer.put(Utf8.convert(getCompressorname()));
        int a = Utf8.utf8StringLengthInBytes(getCompressorname());
        while (a < 31) {
            a++;
            byteBuffer.put((byte) 0);
        }
        IsoTypeWriter.writeUInt16(byteBuffer, getDepth());
        IsoTypeWriter.writeUInt16(byteBuffer, 0xFFFF);

        _writeChildBoxes(byteBuffer);

    
protected longgetContentSize()

        long contentSize = 78;
        for (Box boxe : boxes) {
            contentSize += boxe.getSize();
        }
        return contentSize;
    
public intgetDepth()

        return depth;
    
public intgetFrameCount()

        return frameCount;
    
public intgetHeight()

        return height;
    
public doublegetHorizresolution()

        return horizresolution;
    
public doublegetVertresolution()

        return vertresolution;
    
public intgetWidth()

        return width;
    
public voidsetCompressorname(java.lang.String compressorname)

        this.compressorname = compressorname;
    
public voidsetDepth(int depth)

        this.depth = depth;
    
public voidsetFrameCount(int frameCount)

        this.frameCount = frameCount;
    
public voidsetHeight(int height)

        this.height = height;
    
public voidsetHorizresolution(double horizresolution)

        this.horizresolution = horizresolution;
    
public voidsetVertresolution(double vertresolution)

        this.vertresolution = vertresolution;
    
public voidsetWidth(int width)

        this.width = width;