diff options
Diffstat (limited to 'isoparser/src/main/java/com/googlecode/mp4parser/authoring/tracks/SilenceTrackImpl.java')
-rw-r--r-- | isoparser/src/main/java/com/googlecode/mp4parser/authoring/tracks/SilenceTrackImpl.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/authoring/tracks/SilenceTrackImpl.java b/isoparser/src/main/java/com/googlecode/mp4parser/authoring/tracks/SilenceTrackImpl.java new file mode 100644 index 0000000..f74ab3c --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/authoring/tracks/SilenceTrackImpl.java @@ -0,0 +1,98 @@ +package com.googlecode.mp4parser.authoring.tracks; + +import com.coremedia.iso.boxes.*; +import com.googlecode.mp4parser.authoring.Mp4TrackImpl; +import com.googlecode.mp4parser.authoring.Track; +import com.googlecode.mp4parser.authoring.TrackMetaData; + +import java.nio.ByteBuffer; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * This is just a basic idea how things could work but they don't. + */ +public class SilenceTrackImpl implements Track { + Track source; + + List<ByteBuffer> samples = new LinkedList<ByteBuffer>(); + TimeToSampleBox.Entry entry; + + public SilenceTrackImpl(Track ofType, long ms) { + source = ofType; + if ("mp4a".equals(ofType.getSampleDescriptionBox().getSampleEntry().getType())) { + long numFrames = getTrackMetaData().getTimescale() * ms / 1000 / 1024; + long standZeit = getTrackMetaData().getTimescale() * ms / numFrames / 1000; + entry = new TimeToSampleBox.Entry(numFrames, standZeit); + + + while (numFrames-- > 0) { + samples.add((ByteBuffer) ByteBuffer.wrap(new byte[]{ + 0x21, 0x10, 0x04, 0x60, (byte) 0x8c, 0x1c, + }).rewind()); + } + + } else { + throw new RuntimeException("Tracks of type " + ofType.getClass().getSimpleName() + " are not supported"); + } + } + + public SampleDescriptionBox getSampleDescriptionBox() { + return source.getSampleDescriptionBox(); + } + + public List<TimeToSampleBox.Entry> getDecodingTimeEntries() { + return Collections.singletonList(entry); + + } + + public TrackMetaData getTrackMetaData() { + return source.getTrackMetaData(); + } + + public String getHandler() { + return source.getHandler(); + } + + public boolean isEnabled() { + return source.isEnabled(); + } + + public boolean isInMovie() { + return source.isInMovie(); + } + + public boolean isInPreview() { + return source.isInPreview(); + } + + public boolean isInPoster() { + return source.isInPoster(); + } + + public List<ByteBuffer> getSamples() { + return samples; + } + + public Box getMediaHeaderBox() { + return source.getMediaHeaderBox(); + } + + public SubSampleInformationBox getSubsampleInformationBox() { + return null; + } + + public List<CompositionTimeToSample.Entry> getCompositionTimeEntries() { + return null; + } + + public long[] getSyncSamples() { + return null; + } + + public List<SampleDependencyTypeBox.Entry> getSampleDependencies() { + return null; + } + +} |