package org.mp4parser.boxes.iso14496.part12; import org.mp4parser.support.AbstractBox; import org.mp4parser.tools.IsoTypeReader; import org.mp4parser.tools.IsoTypeWriter; import org.mp4parser.tools.Mp4Arrays; import java.nio.ByteBuffer; /** * This box provides a reference from the containing track to another track in the presentation. These references * are typed. A 'hint' reference links from the containing hint track to the media data that it hints. A content * description reference 'cdsc' links a descriptive or metadata track to the content which it describes. The * 'hind' dependency indicates that the referenced track(s)may contain media data required for decoding of * the track containing the track reference. The referenced tracks shall be hint tracks. The 'hind' dependency * can, for example, be used for indicating the dependencies between hint tracks documenting layered IP * multicast over RTP. * Exactly one Track Reference Box can be contained within the Track Box. * If this box is not present, the track is not referencing anyother track in any way. The reference array is sized * to fill the reference type box. */ public class TrackReferenceTypeBox extends AbstractBox { long[] trackIds = new long[0]; // ‘hint’ the referenced track(s) contain the original media for this hint track // ‘cdsc‘ this track describes the referenced track. // 'hind' this track depends on the referenced hint track, i.e., it should only be used if the referenced hint track is used. // 'vdep' this track contains auxiliary depth video information for the referenced video track // 'vplx' this track contains auxiliary parallax video information for the referenced video track public TrackReferenceTypeBox(String type) { super(type); } @Override protected long getContentSize() { return trackIds.length * 4; } @Override protected void getContent(ByteBuffer byteBuffer) { for (long trackId : trackIds) { IsoTypeWriter.writeUInt32(byteBuffer, trackId); } } @Override protected void _parseDetails(ByteBuffer content) { while (content.remaining() >= 4) { trackIds = Mp4Arrays.copyOfAndAppend(trackIds, new long[]{IsoTypeReader.readUInt32(content)}); } } public long[] getTrackIds() { return trackIds; } public void setTrackIds(long[] trackIds) { this.trackIds = trackIds; } }