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