org.jaudiotagger.audio.mp4
Class Mp4AtomTree

java.lang.Object
  extended by org.jaudiotagger.audio.mp4.Mp4AtomTree

public class Mp4AtomTree
extends java.lang.Object

Tree representing atoms in the mp4 file

Note it doesn't create the complete tree it delves into subtrees for atom we know about and are interested in. (Note it would be impossible to create a complete tree for any file without understanding all the nodes because some atoms such as meta contain data and children and therefore need to be specially preprocessed)

This class is currently only used when writing tags because it better handles the difficulties of mdat aand free atoms being optional/multiple places then the older sequential method. It is expected this class will eventually be used when reading tags as well.

Uses a TreeModel for the tree, with convenience methods holding onto references to most common nodes so they can be used without having to traverse the tree again.


Field Summary
private  javax.swing.tree.DefaultTreeModel dataTree
           
private  java.util.List<javax.swing.tree.DefaultMutableTreeNode> freeNodes
           
private  javax.swing.tree.DefaultMutableTreeNode hdlrWithinMdiaNode
           
private  javax.swing.tree.DefaultMutableTreeNode hdlrWithinMetaNode
           
private  javax.swing.tree.DefaultMutableTreeNode ilstNode
           
static java.util.logging.Logger logger
           
private  javax.swing.tree.DefaultMutableTreeNode mdatNode
           
private  java.util.List<javax.swing.tree.DefaultMutableTreeNode> mdatNodes
           
private  javax.swing.tree.DefaultMutableTreeNode metaNode
           
private  java.nio.ByteBuffer moovBuffer
           
private  Mp4BoxHeader moovHeader
           
private  javax.swing.tree.DefaultMutableTreeNode moovNode
           
private  javax.swing.tree.DefaultMutableTreeNode rootNode
           
private  Mp4StcoBox stco
           
private  javax.swing.tree.DefaultMutableTreeNode stcoNode
           
private  java.util.List<javax.swing.tree.DefaultMutableTreeNode> trakNodes
           
private  javax.swing.tree.DefaultMutableTreeNode udtaNode
           
 
Constructor Summary
Mp4AtomTree(java.io.RandomAccessFile raf)
          Create Atom Tree
Mp4AtomTree(java.io.RandomAccessFile raf, boolean closeOnExit)
          Create Atom Tree and maintain open channel to raf, should only be used if will continue to use raf after this call, you will have to close raf yourself.
 
Method Summary
 void buildChildrenOfNode(java.nio.ByteBuffer moovBuffer, javax.swing.tree.DefaultMutableTreeNode parentNode)
           
 javax.swing.tree.DefaultTreeModel buildTree(java.io.RandomAccessFile raf, boolean closeExit)
          Build a tree of the atoms in the file
 Mp4BoxHeader getBoxHeader(javax.swing.tree.DefaultMutableTreeNode node)
           
 javax.swing.tree.DefaultTreeModel getDataTree()
           
 java.util.List<javax.swing.tree.DefaultMutableTreeNode> getFreeNodes()
           
 javax.swing.tree.DefaultMutableTreeNode getHdlrWithinMdiaNode()
           
 javax.swing.tree.DefaultMutableTreeNode getHdlrWithinMetaNode()
           
 javax.swing.tree.DefaultMutableTreeNode getIlstNode()
           
 javax.swing.tree.DefaultMutableTreeNode getMdatNode()
           
 javax.swing.tree.DefaultMutableTreeNode getMetaNode()
           
 java.nio.ByteBuffer getMoovBuffer()
           
 Mp4BoxHeader getMoovHeader()
           
 javax.swing.tree.DefaultMutableTreeNode getMoovNode()
           
 Mp4StcoBox getStco()
           
 javax.swing.tree.DefaultMutableTreeNode getStcoNode()
           
 java.util.List<javax.swing.tree.DefaultMutableTreeNode> getTrakNodes()
           
 javax.swing.tree.DefaultMutableTreeNode getUdtaNode()
           
 void printAtomTree()
          Display atom tree
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

rootNode

private javax.swing.tree.DefaultMutableTreeNode rootNode

dataTree

private javax.swing.tree.DefaultTreeModel dataTree

moovNode

private javax.swing.tree.DefaultMutableTreeNode moovNode

mdatNode

private javax.swing.tree.DefaultMutableTreeNode mdatNode

stcoNode

private javax.swing.tree.DefaultMutableTreeNode stcoNode

ilstNode

private javax.swing.tree.DefaultMutableTreeNode ilstNode

metaNode

private javax.swing.tree.DefaultMutableTreeNode metaNode

udtaNode

private javax.swing.tree.DefaultMutableTreeNode udtaNode

hdlrWithinMdiaNode

private javax.swing.tree.DefaultMutableTreeNode hdlrWithinMdiaNode

hdlrWithinMetaNode

private javax.swing.tree.DefaultMutableTreeNode hdlrWithinMetaNode

freeNodes

private java.util.List<javax.swing.tree.DefaultMutableTreeNode> freeNodes

mdatNodes

private java.util.List<javax.swing.tree.DefaultMutableTreeNode> mdatNodes

trakNodes

private java.util.List<javax.swing.tree.DefaultMutableTreeNode> trakNodes

stco

private Mp4StcoBox stco

moovBuffer

private java.nio.ByteBuffer moovBuffer

moovHeader

private Mp4BoxHeader moovHeader

logger

public static java.util.logging.Logger logger
Constructor Detail

Mp4AtomTree

public Mp4AtomTree(java.io.RandomAccessFile raf)
            throws java.io.IOException,
                   CannotReadException
Create Atom Tree

Parameters:
raf -
Throws:
java.io.IOException
CannotReadException

Mp4AtomTree

public Mp4AtomTree(java.io.RandomAccessFile raf,
                   boolean closeOnExit)
            throws java.io.IOException,
                   CannotReadException
Create Atom Tree and maintain open channel to raf, should only be used if will continue to use raf after this call, you will have to close raf yourself.

Parameters:
raf -
closeOnExit - to keep randomfileaccess open, only used when randomaccessfile already being used
Throws:
java.io.IOException
CannotReadException
Method Detail

buildTree

public javax.swing.tree.DefaultTreeModel buildTree(java.io.RandomAccessFile raf,
                                                   boolean closeExit)
                                            throws java.io.IOException,
                                                   CannotReadException
Build a tree of the atoms in the file

Parameters:
raf -
closeExit - false to keep randomfileacces open, only used when randomaccessfile already being used
Returns:
Throws:
java.io.IOException
CannotReadException

printAtomTree

public void printAtomTree()
Display atom tree


buildChildrenOfNode

public void buildChildrenOfNode(java.nio.ByteBuffer moovBuffer,
                                javax.swing.tree.DefaultMutableTreeNode parentNode)
                         throws java.io.IOException,
                                CannotReadException
Parameters:
moovBuffer -
parentNode -
Throws:
java.io.IOException
CannotReadException

getDataTree

public javax.swing.tree.DefaultTreeModel getDataTree()
Returns:

getMoovNode

public javax.swing.tree.DefaultMutableTreeNode getMoovNode()
Returns:

getStcoNode

public javax.swing.tree.DefaultMutableTreeNode getStcoNode()
Returns:

getIlstNode

public javax.swing.tree.DefaultMutableTreeNode getIlstNode()
Returns:

getBoxHeader

public Mp4BoxHeader getBoxHeader(javax.swing.tree.DefaultMutableTreeNode node)
Parameters:
node -
Returns:

getMdatNode

public javax.swing.tree.DefaultMutableTreeNode getMdatNode()
Returns:

getUdtaNode

public javax.swing.tree.DefaultMutableTreeNode getUdtaNode()
Returns:

getMetaNode

public javax.swing.tree.DefaultMutableTreeNode getMetaNode()
Returns:

getHdlrWithinMetaNode

public javax.swing.tree.DefaultMutableTreeNode getHdlrWithinMetaNode()
Returns:

getHdlrWithinMdiaNode

public javax.swing.tree.DefaultMutableTreeNode getHdlrWithinMdiaNode()
Returns:

getFreeNodes

public java.util.List<javax.swing.tree.DefaultMutableTreeNode> getFreeNodes()
Returns:

getTrakNodes

public java.util.List<javax.swing.tree.DefaultMutableTreeNode> getTrakNodes()
Returns:

getStco

public Mp4StcoBox getStco()
Returns:

getMoovBuffer

public java.nio.ByteBuffer getMoovBuffer()
Returns:

getMoovHeader

public Mp4BoxHeader getMoovHeader()
Returns: