AlbumBox.java revision dd9eb897ee7c7b507cbdcf80263bb4b5de6966bf
1/*
2 * Copyright 2008 CoreMedia AG, Hamburg
3 *
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.coremedia.iso.boxes;
18
19import com.coremedia.iso.IsoTypeReader;
20import com.coremedia.iso.IsoTypeWriter;
21import com.coremedia.iso.Utf8;
22import com.googlecode.mp4parser.AbstractFullBox;
23
24import java.nio.ByteBuffer;
25
26/**
27 * Meta information in a 'udta' box about a track.
28 * Defined in 3GPP 26.244.
29 *
30 * @see com.coremedia.iso.boxes.UserDataBox
31 */
32public class AlbumBox extends AbstractFullBox {
33    public static final String TYPE = "albm";
34
35    private String language;
36    private String albumTitle;
37    private int trackNumber;
38
39    public AlbumBox() {
40        super(TYPE);
41    }
42
43    /**
44     * Declares the language code for the {@link #getAlbumTitle()} return value. See ISO 639-2/T for the set of three
45     * character codes.Each character is packed as the difference between its ASCII value and 0x60. The code is
46     * confined to being three lower-case letters, so these values are strictly positive.
47     *
48     * @return the language code
49     */
50    public String getLanguage() {
51        return language;
52    }
53
54    public String getAlbumTitle() {
55        return albumTitle;
56    }
57
58    public int getTrackNumber() {
59        return trackNumber;
60    }
61
62    public void setLanguage(String language) {
63        this.language = language;
64    }
65
66    public void setAlbumTitle(String albumTitle) {
67        this.albumTitle = albumTitle;
68    }
69
70    public void setTrackNumber(int trackNumber) {
71        this.trackNumber = trackNumber;
72    }
73
74    protected long getContentSize() {
75        return 6 + Utf8.utf8StringLengthInBytes(albumTitle) + 1 + (trackNumber == -1 ? 0 : 1);
76    }
77
78    @Override
79    public void _parseDetails(ByteBuffer content) {
80        parseVersionAndFlags(content);
81        language = IsoTypeReader.readIso639(content);
82        albumTitle = IsoTypeReader.readString(content);
83
84        if (content.remaining() > 0) {
85            trackNumber = IsoTypeReader.readUInt8(content);
86        } else {
87            trackNumber = -1;
88        }
89    }
90
91    @Override
92    protected void getContent(ByteBuffer byteBuffer) {
93        writeVersionAndFlags(byteBuffer);
94        IsoTypeWriter.writeIso639(byteBuffer, language);
95        byteBuffer.put(Utf8.convert(albumTitle));
96        byteBuffer.put((byte) 0);
97        if (trackNumber != -1) {
98            IsoTypeWriter.writeUInt8(byteBuffer, trackNumber);
99        }
100    }
101
102    public String toString() {
103        StringBuilder buffer = new StringBuilder();
104        buffer.append("AlbumBox[language=").append(getLanguage()).append(";");
105        buffer.append("albumTitle=").append(getAlbumTitle());
106        if (trackNumber >= 0) {
107            buffer.append(";trackNumber=").append(getTrackNumber());
108        }
109        buffer.append("]");
110        return buffer.toString();
111    }
112}
113