Home | History | Annotate | Download | only in boxes
      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 
     17 package com.coremedia.iso.boxes;
     18 
     19 import com.coremedia.iso.IsoTypeReader;
     20 import com.coremedia.iso.IsoTypeWriter;
     21 import com.coremedia.iso.Utf8;
     22 import com.googlecode.mp4parser.AbstractFullBox;
     23 
     24 import 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  */
     32 public 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