/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.container.mp4.stsd; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.ttProject.container.IContainer; import com.ttProject.container.mp4.Mp4Atom; import com.ttProject.nio.channels.IReadChannel; import com.ttProject.unit.extra.BitLoader; import com.ttProject.unit.extra.bit.Bit16; import com.ttProject.unit.extra.bit.Bit32; import com.ttProject.unit.extra.bit.Bit8; public abstract class VideoRecord extends DescriptionRecord { /** ロガー */ private Logger logger = Logger.getLogger(VideoRecord.class); private Bit8[] reserved1 = new Bit8[6]; private Bit16 dataReferenceIndex = new Bit16(); private Bit16 predefined1 = new Bit16(); private Bit16 reserved2 = new Bit16(); private Bit32[] predefined2 = new Bit32[3]; private Bit16 width = new Bit16(); private Bit16 height = new Bit16(); private Bit32 horizontalResolution = new Bit32(); private Bit32 verticalResolution = new Bit32(); private Bit32 reserved3 = new Bit32(); private Bit16 frameCount = new Bit16(); private Bit8[] compressorName = new Bit8[32]; private Bit16 depth = new Bit16(); private Bit16 predefined3 = new Bit16(); private List<Mp4Atom> boxes = new ArrayList<Mp4Atom>(); { for(int i = 0;i < 6;i ++) { reserved1[i] = new Bit8(); } for(int i = 0;i < 3;i ++) { predefined2[i] = new Bit32(); } for(int i = 0;i < 32;i ++) { compressorName[i] = new Bit8(); } } public VideoRecord(Bit32 size, Bit32 name) { super(size, name); } @Override public void minimumLoad(IReadChannel channel) throws Exception { super.minimumLoad(channel); BitLoader loader = new BitLoader(channel); loader.load(reserved1); loader.load(dataReferenceIndex, predefined1, reserved2); loader.load(predefined2); loader.load(width, height, horizontalResolution, verticalResolution, reserved3, frameCount); loader.load(compressorName); loader.load(depth, predefined3); int targetSize = getSize() - 0x56; IContainer container = null; StsdAtomReader reader = new StsdAtomReader(); while(targetSize > 0 && (container = reader.read(channel)) != null) { logger.info("found container:" + container); boxes.add((Mp4Atom)container); targetSize -= container.getSize(); } } @Override protected void requestUpdate() throws Exception { } }