public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException { super.parse(in, size, boxParser, lastMovieFragmentBox); classificationEntity = IsoFile.bytesToFourCC(in.read(4)); classificationTableIndex = in.readUInt16(); language = in.readIso639(); classificationInfo = in.readString(); }
@Override public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException { super.parse(in, size, boxParser, lastMovieFragmentBox); dataReferenceType = in.readString(4); dataReferenceSize = in.readUInt32(); dataReference = in.readString((int) dataReferenceSize); }
private long getVariable(long length, IsoBufferWrapper in) throws IOException { long ret; if (((length + 1) * 8) == 8) { ret = in.readUInt8(); } else if (((length + 1) * 8) == 16) { ret = in.readUInt16(); } else if (((length + 1) * 8) == 24) { ret = in.readUInt24(); } else if (((length + 1) * 8) == 32) { ret = in.readUInt32(); } else if (((length + 1) * 8) == 64) { ret = in.readUInt64(); } else { throw new IOException("lengthSize not power of two"); } return ret; }
@Override public void parse(int tag, IsoBufferWrapper in, int maxLength) throws IOException { super.parse(tag, in, maxLength); if (getSize() > 0) { bytes = in.read(getSize()); } }
@Override public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException { super.parse(in, size, boxParser, lastMovieFragmentBox); trackId = in.readUInt32(); long temp = in.readUInt32(); reserved = (int) (temp >> 6); lengthSizeOfTrafNum = (int) (temp & 0x3F) >> 4; lengthSizeOfTrunNum = (int) (temp & 0xC) >> 2; lengthSizeOfSampleNum = (int) (temp & 0x3); long numberOfEntries = in.readUInt32(); entries = new ArrayList<Entry>(); for (int i = 0; i < numberOfEntries; i++) { Entry entry = new Entry(); if (getVersion() == 1) { entry.time = in.readUInt64(); entry.moofOffset = in.readUInt64(); } else { entry.time = in.readUInt32(); entry.moofOffset = in.readUInt32(); } entry.trafNumber = getVariable(lengthSizeOfTrafNum, in); entry.trunNumber = getVariable(lengthSizeOfTrunNum, in); entry.sampleNumber = getVariable(lengthSizeOfSampleNum, in); entries.add(entry); } }
public RawH264Track(IsoBufferWrapperImpl rawH264) throws IOException { InnerAccessUnit current = new InnerAccessUnit(); InnerAccessUnit previous = new InnerAccessUnit(); NALUnitReader nalUnitReader = new AnnexBNALUnitReader(rawH264); AccessUnitSourceImpl accessUnitSource = new AccessUnitSourceImpl(nalUnitReader); streamParams = accessUnitSource; SliceHeaderReader sliceHeaderReader = new SliceHeaderReader(accessUnitSource); AccessUnit au; long frameNumInGop = 0; while ((au = accessUnitSource.nextAccessUnit()) != null) { // System.err.println("Start AU"); List<IsoBufferWrapper> nals = new LinkedList<IsoBufferWrapper>(); IsoBufferWrapper nalUnitBuffer; while ((nalUnitBuffer = au.nextNALUnit()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); new IsoOutputStream(baos).writeUInt32(nalUnitBuffer.size()); nals.add(new IsoBufferWrapperImpl(baos.toByteArray())); nals.add(nalUnitBuffer); NALUnit nalUnit = NALUnit.read(nalUnitBuffer); if (nalUnit.type == NALUnitType.IDR_SLICE || nalUnit.type == NALUnitType.NON_IDR_SLICE || nalUnit.type == NALUnitType.AUX_SLICE || nalUnit.type == NALUnitType.SLICE_PART_A || nalUnit.type == NALUnitType.SLICE_PART_B || nalUnit.type == NALUnitType.SLICE_PART_C) { current.sliceHeaders.add(sliceHeaderReader.read(nalUnit, new CAVLCReader(nalUnitBuffer))); } if (++a % 1000 == 0) { System.err.println(a); } } samples.add(new MultiplexIsoBufferWrapperImpl(nals)); decodedPoc(current, previous); if (current.poc == 0) { frameNumInGop = 0; } System.err.println("cts: " + (current.poc - frameNumInGop * 2)); previous = current; frameNumInGop++; current = new InnerAccessUnit(); } }
public IsoBufferWrapper nextNALUnit() throws IOException { if (src.remaining() < 5) { return null; } long nalLength; if (src.remaining() >= nalLengthSize) { // nalLength = src.read(nalLengthSize); nalLength = src.readUInt32(); if (nalLength == 0) return null; IsoBufferWrapper segment = src.getSegment(src.position(), nalLength); src.position(src.position() + nalLength); return segment; } else { throw new RuntimeException( "remaining bytes less than nalLengthSize found in sample. should not be here."); } }
@Override public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException { super.parse(in, size, boxParser, lastMovieFragmentBox); maxSamplePerFrame = in.readUInt32(); unknown1 = in.readUInt8(); sampleSize = in.readUInt8(); historyMult = in.readUInt8(); initialHistory = in.readUInt8(); kModifier = in.readUInt8(); channels = in.readUInt8(); unknown2 = in.readUInt16(); maxCodedFrameSize = in.readUInt32(); bitRate = in.readUInt32(); sampleRate = in.readUInt32(); }