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