![JAR search and dependency download from the Maven repository](/logo.png)
org.jcodec.containers.mp4.boxes.NodeBox Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.containers.mp4.boxes;
import java.io.DataOutput;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.collections15.CollectionUtils;
import org.apache.commons.collections15.Predicate;
import org.jcodec.containers.mp4.io.Input;
import org.jcodec.containers.mp4.io.WindowInput;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* A node box
*
* A box containing children, no data
*
* @author Stanislav Vitvitskiy
*
*/
public class NodeBox extends Box {
protected List boxes = new LinkedList();
protected BoxFactory factory = BoxFactory.getDefault();
public NodeBox(Header atom) {
super(atom);
}
public NodeBox(NodeBox other) {
super(other);
this.boxes = other.boxes;
this.factory = other.factory;
}
public void parse(Input input) throws IOException {
Box box;
while ((box = parseChildBox(input, factory)) != null)
boxes.add(box);
}
protected static Box parseChildBox(Input input, BoxFactory factory) throws IOException {
Header childAtom = Header.read(input);
if (childAtom == null)
return null;
WindowInput wi = new WindowInput(input, childAtom.getBodySize());
return parseBox(wi, childAtom, factory);
}
public static Box newBox(Header header, BoxFactory factory) {
Class extends Box> claz = factory.toClass(header.getFourcc());
if (claz == null)
return new LeafBox(header);
try {
try {
return claz.getConstructor(Header.class).newInstance(header);
} catch (NoSuchMethodException e) {
return claz.newInstance();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Box parseBox(Input input, Header childAtom, BoxFactory factory) throws IOException {
Box box = newBox(childAtom, factory);
WindowInput window = new WindowInput(input, (int) childAtom.getBodySize());
box.parse(window);
window.skipRemaining();
return box;
}
public List getBoxes() {
return boxes;
}
public void add(Box box) {
boxes.add(box);
}
protected void doWrite(DataOutput out) throws IOException {
for (Box box : boxes) {
box.write(out);
}
}
public void addFirst(MovieHeaderBox box) {
boxes.add(0, box);
}
public void filter(Predicate predicate) {
CollectionUtils.filter(boxes, predicate);
}
public void replace(String fourcc, Box box) {
filter(not(fourcc));
add(box);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy