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 * <code>
28 * Box Type: 'titl'<br>
29 * Container: {@link UserDataBox} ('udta')<br>
30 * Mandatory: No<br>
31 * Quantity: Zero or one<br><br>
32 * </code>
33 * <p/>
34 * Title for the media.
35 */
36public class TitleBox extends AbstractFullBox {
37    public static final String TYPE = "titl";
38
39    private String language;
40    private String title;
41
42    public TitleBox() {
43        super(TYPE);
44    }
45
46    public String getLanguage() {
47        return language;
48    }
49
50    public String getTitle() {
51        return title;
52    }
53
54    /**
55     * Sets the 3-letter ISO-639 language for this title.
56     *
57     * @param language 3-letter ISO-639 code
58     */
59    public void setLanguage(String language) {
60        this.language = language;
61    }
62
63    public void setTitle(String title) {
64        this.title = title;
65    }
66
67    protected long getContentSize() {
68        return 7 + Utf8.utf8StringLengthInBytes(title);
69    }
70
71
72    protected void getContent(ByteBuffer byteBuffer) {
73        writeVersionAndFlags(byteBuffer);
74        IsoTypeWriter.writeIso639(byteBuffer, language);
75        byteBuffer.put(Utf8.convert(title));
76        byteBuffer.put((byte) 0);
77    }
78
79    @Override
80    public void _parseDetails(ByteBuffer content) {
81        parseVersionAndFlags(content);
82        language = IsoTypeReader.readIso639(content);
83        title = IsoTypeReader.readString(content);
84    }
85
86    public String toString() {
87        return "TitleBox[language=" + getLanguage() + ";title=" + getTitle() + "]";
88    }
89}
90