1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes.threegpp26244; 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader; 4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter; 5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.Utf8; 6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractFullBox; 7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/** 11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Location Information Box as specified in TS 26.244. 12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class LocationInformationBox extends AbstractFullBox { 14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE = "loci"; 15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private String language; 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private String name = ""; 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int role; 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private double longitude; 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private double latitude; 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private double altitude; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private String astronomicalBody = ""; 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private String additionalNotes = ""; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public LocationInformationBox() { 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu super(TYPE); 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String getLanguage() { 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return language; 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setLanguage(String language) { 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.language = language; 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String getName() { 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return name; 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setName(String name) { 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.name = name; 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getRole() { 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return role; 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setRole(int role) { 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.role = role; 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public double getLongitude() { 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return longitude; 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setLongitude(double longitude) { 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.longitude = longitude; 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public double getLatitude() { 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return latitude; 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setLatitude(double latitude) { 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.latitude = latitude; 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public double getAltitude() { 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return altitude; 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setAltitude(double altitude) { 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.altitude = altitude; 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String getAstronomicalBody() { 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return astronomicalBody; 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setAstronomicalBody(String astronomicalBody) { 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.astronomicalBody = astronomicalBody; 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String getAdditionalNotes() { 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return additionalNotes; 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setAdditionalNotes(String additionalNotes) { 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.additionalNotes = additionalNotes; 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected long getContentSize() { 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return 22 + Utf8.convert(name).length + Utf8.convert(astronomicalBody).length + Utf8.convert(additionalNotes).length; 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void _parseDetails(ByteBuffer content) { 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseVersionAndFlags(content); 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu language = IsoTypeReader.readIso639(content); 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu name = IsoTypeReader.readString(content); 102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu role = IsoTypeReader.readUInt8(content); 103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu longitude = IsoTypeReader.readFixedPoint1616(content); 104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu latitude = IsoTypeReader.readFixedPoint1616(content); 105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu altitude = IsoTypeReader.readFixedPoint1616(content); 106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu astronomicalBody = IsoTypeReader.readString(content); 107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu additionalNotes = IsoTypeReader.readString(content); 108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected void getContent(ByteBuffer byteBuffer) { 113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writeVersionAndFlags(byteBuffer); 114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeIso639(byteBuffer, language); 115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put(Utf8.convert(name)); 116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put((byte) 0); 117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(byteBuffer, role); 118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeFixedPont1616(byteBuffer, longitude); 119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeFixedPont1616(byteBuffer, latitude); 120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeFixedPont1616(byteBuffer, altitude); 121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put(Utf8.convert(astronomicalBody)); 122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put((byte) 0); 123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put(Utf8.convert(additionalNotes)); 124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put((byte) 0); 125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 127