package com.coremedia.iso.boxes.mdat;
import com.coremedia.iso.IsoFile;
import com.coremedia.iso.boxes.Box;
import com.coremedia.iso.boxes.Container;
import com.coremedia.iso.boxes.TrackBox;
import com.coremedia.iso.boxes.fragment.MovieExtendsBox;
import com.googlecode.mp4parser.authoring.Sample;
import com.googlecode.mp4parser.authoring.samples.DefaultMp4SampleList;
import com.googlecode.mp4parser.authoring.samples.FragmentedMp4SampleList;
import java.lang.ref.SoftReference;
import java.lang.reflect.Array;
import java.nio.ByteBuffer;
import java.util.AbstractList;
import java.util.List;
/**
* Creates a list of <code>ByteBuffer</code>s that represent the samples of a given track.
*/
public class SampleList extends AbstractList<Sample> {
List<Sample> samples;
public SampleList(TrackBox trackBox, IsoFile... additionalFragments) {
Container topLevel = ((Box) trackBox.getParent()).getParent();
if (trackBox.getParent().getBoxes(MovieExtendsBox.class).isEmpty()) {
if (additionalFragments.length > 0) {
throw new RuntimeException("The TrackBox comes from a standard MP4 file. Only use the additionalFragments param if you are dealing with ( fragmented MP4 files AND additional fragments in standalone files )");
}
samples = new DefaultMp4SampleList(trackBox.getTrackHeaderBox().getTrackId(), topLevel);
} else {
samples = new FragmentedMp4SampleList(trackBox.getTrackHeaderBox().getTrackId(), topLevel, additionalFragments);
}
}
@Override
public Sample get(int index) {
return samples.get(index);
}
@Override
public int size() {
return samples.size();
}
}