/** * */ package mp4.util.atom; import java.io.DataOutput; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; /** * @author system-3 * */ public class RmdaAtom extends ContainerAtom { //must // the movie header atom private RdrfAtom rdrf; //optional! // initial object descriptor private RmdrAtom rmdr; // the user data atom private RmcsAtom rmcs; // the list of tracks // the movie header atom private RmvcAtom rmvc; // initial object descriptor private RmcdAtom rmcd; // the user data atom private RmquAtom rmqu; // the list of tracks /** * @param type */ public RmdaAtom() { super(new byte[]{'r','m','d','a'}); // TODO Auto-generated constructor stub } /** * @param old */ public RmdaAtom(RmdaAtom old) { super(old); // TODO Auto-generated constructor stub rdrf = new RdrfAtom(old.rdrf); if (rmdr != null) { rmdr = new RmdrAtom(old.rmdr); } if (rmcs != null) { rmcs = new RmcsAtom(old.rmcs); } if (rmvc != null) { rmvc = new RmvcAtom(old.rmvc); } if (rmcd != null) { rmcd = new RmcdAtom(old.rmcd); } if (rmqu != null) { rmqu = new RmquAtom(old.rmqu); } } /* (non-Javadoc) * @see mp4.util.atom.ContainerAtom#addChild(mp4.util.atom.Atom) */ @Override public void addChild(Atom atom) { // TODO Auto-generated method stub if (atom instanceof RdrfAtom) { this.rdrf = (RdrfAtom) atom; } else if (atom instanceof RmdrAtom) { this.rmdr = (RmdrAtom) atom; } else if (atom instanceof RmcsAtom) { this.rmcs = (RmcsAtom) atom; } else if (atom instanceof RmvcAtom) { this.rmvc = (RmvcAtom) atom; } else if (atom instanceof RmcdAtom) { this.rmcd = (RmcdAtom) atom; } else if (atom instanceof RmquAtom) { this.rmqu = (RmquAtom) atom; } else { throw new AtomError("Can't add " + atom + " to moov"); } } /* (non-Javadoc) * @see mp4.util.atom.ContainerAtom#recomputeSize() */ @Override protected void recomputeSize() { // TODO Auto-generated method stub long newSize = rdrf.size(); if (rmdr != null) { newSize += rmdr.size(); } if (rmcs != null) { newSize += rmcs.size(); } if (rmvc != null) { newSize += rmvc.size(); } if (rmcd != null) { newSize += rmcd.size(); } if (rmqu != null) { newSize += rmqu.size(); } setSize(ATOM_HEADER_SIZE + newSize); } /* (non-Javadoc) * @see mp4.util.atom.Atom#accept(mp4.util.atom.AtomVisitor) */ @Override public void accept(AtomVisitor v) throws AtomException { // TODO Auto-generated method stub v.visit(this); } /* (non-Javadoc) * @see mp4.util.atom.Atom#writeData(java.io.DataOutput) */ @Override public void writeData(DataOutput out) throws IOException { // TODO Auto-generated method stub writeHeader(out); rdrf.writeData(out); if (rmdr != null) { rmdr.writeData(out); } if (rmcs != null) { rmcs.writeData(out); } if (rmvc != null) { rmvc.writeData(out); } if (rmcd != null) { rmcd.writeData(out); } if (rmqu != null) { rmqu.writeData(out); } } public long getTimeScale() { // TODO Auto-generated method stub return 0; } public long getDuration() { // TODO Auto-generated method stub return 0; } public RmdaAtom cut() { // TODO Auto-generated method stub return null; } public TrakAtom cut(float time, long movieTimeScale) { // TODO Auto-generated method stub return null; } public void setDuration(long cutDuration) { // TODO Auto-generated method stub } public void fixupOffsets(long delta) { // TODO Auto-generated method stub } }