/** * */ package mp4.util.atom; import java.io.DataOutput; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * @author system-3 * */ public class RmraAtom extends ContainerAtom { // the list of tracks private List<RmdaAtom> m_rmdaList; public RmraAtom() { super(new byte[]{'r','m','r','a'}); // TODO Auto-generated constructor stub } /** * Copy constructor for RmraAtom atom. Performs a deep copy. * @param old the movie atom to copy */ public RmraAtom(RmraAtom old) { super(old); //TODO m_rmdaList = new LinkedList<RmdaAtom>(); for (Iterator<RmdaAtom> i = old.getRmdas(); i.hasNext(); ) { m_rmdaList.add(new RmdaAtom(i.next())); } } /** * Return an iterator with the media's tracks. For most movies, there are two tracks, the sound * track and the video track. * @return an iterator with the movie traks. */ public Iterator<RmdaAtom> getRmdas() { return m_rmdaList.iterator(); } /* (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 RmdaAtom) { if (m_rmdaList == null) { m_rmdaList = new LinkedList<RmdaAtom>(); } m_rmdaList.add((RmdaAtom) 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 = 0; for (Iterator<RmdaAtom> i = getRmdas(); i.hasNext(); ) { newSize += i.next().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); for (Iterator<RmdaAtom> i = getRmdas(); i.hasNext(); ) { i.next().writeData(out); } } }