/* * Copyright 2011 castLabs, Berlin * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.googlecode.mp4parser.boxes.mp4.objectdescriptors; import com.coremedia.iso.IsoTypeReader; import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; /* class InitialObjectDescriptor extends ObjectDescriptorBase : bit(8) tag=InitialObjectDescrTag { bit(10) ObjectDescriptorID; bit(1) URL_Flag; bit(1) includeInlineProfileLevelFlag; const bit(4) reserved=0b1111; if (URL_Flag) { bit(8) URLlength; bit(8) URLstring[URLlength]; } else { bit(8) ODProfileLevelIndication; bit(8) sceneProfileLevelIndication; bit(8) audioProfileLevelIndication; bit(8) visualProfileLevelIndication; bit(8) graphicsProfileLevelIndication; ES_Descriptor esDescr[1 .. 255]; OCI_Descriptor ociDescr[0 .. 255]; IPMP_DescriptorPointer ipmpDescrPtr[0 .. 255]; IPMP_Descriptor ipmpDescr [0 .. 255]; IPMP_ToolListDescriptor toolListDescr[0 .. 1]; } ExtensionDescriptor extDescr[0 .. 255]; } */ //@Descriptor(tags = {0x02, 0x10}) public class InitialObjectDescriptor extends ObjectDescriptorBase { private int objectDescriptorId; int urlFlag; int includeInlineProfileLevelFlag; int urlLength; String urlString; int oDProfileLevelIndication; int sceneProfileLevelIndication; int audioProfileLevelIndication; int visualProfileLevelIndication; int graphicsProfileLevelIndication; List<ESDescriptor> esDescriptors = new ArrayList<ESDescriptor>(); List<ExtensionDescriptor> extensionDescriptors = new ArrayList<ExtensionDescriptor>(); List<BaseDescriptor> unknownDescriptors = new ArrayList<BaseDescriptor>(); @Override public void parseDetail(ByteBuffer bb) throws IOException { int data = IsoTypeReader.readUInt16(bb); objectDescriptorId = (data & 0xFFC0) >> 6; urlFlag = (data & 0x3F) >> 5; includeInlineProfileLevelFlag = (data & 0x1F) >> 4; int sizeLeft = getSize() - 2; if (urlFlag == 1) { urlLength = IsoTypeReader.readUInt8(bb); urlString = IsoTypeReader.readString(bb, urlLength); sizeLeft = sizeLeft - (1 + urlLength); } else { oDProfileLevelIndication = IsoTypeReader.readUInt8(bb); sceneProfileLevelIndication = IsoTypeReader.readUInt8(bb); audioProfileLevelIndication = IsoTypeReader.readUInt8(bb); visualProfileLevelIndication = IsoTypeReader.readUInt8(bb); graphicsProfileLevelIndication = IsoTypeReader.readUInt8(bb); sizeLeft = sizeLeft - 5; if (sizeLeft > 2) { final BaseDescriptor descriptor = ObjectDescriptorFactory.createFrom(-1, bb); sizeLeft = sizeLeft - descriptor.getSize(); if (descriptor instanceof ESDescriptor) { esDescriptors.add((ESDescriptor) descriptor); } else { unknownDescriptors.add(descriptor); } } } if (sizeLeft > 2) { final BaseDescriptor descriptor = ObjectDescriptorFactory.createFrom(-1, bb); if (descriptor instanceof ExtensionDescriptor) { extensionDescriptors.add((ExtensionDescriptor) descriptor); } else { unknownDescriptors.add(descriptor); } } } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("InitialObjectDescriptor"); sb.append("{objectDescriptorId=").append(objectDescriptorId); sb.append(", urlFlag=").append(urlFlag); sb.append(", includeInlineProfileLevelFlag=").append(includeInlineProfileLevelFlag); sb.append(", urlLength=").append(urlLength); sb.append(", urlString='").append(urlString).append('\''); sb.append(", oDProfileLevelIndication=").append(oDProfileLevelIndication); sb.append(", sceneProfileLevelIndication=").append(sceneProfileLevelIndication); sb.append(", audioProfileLevelIndication=").append(audioProfileLevelIndication); sb.append(", visualProfileLevelIndication=").append(visualProfileLevelIndication); sb.append(", graphicsProfileLevelIndication=").append(graphicsProfileLevelIndication); sb.append(", esDescriptors=").append(esDescriptors); sb.append(", extensionDescriptors=").append(extensionDescriptors); sb.append(", unknownDescriptors=").append(unknownDescriptors); sb.append('}'); return sb.toString(); } }