1ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih/* 2ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * Copyright 2015 The Android Open Source Project 3ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * 4ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * Licensed under the Apache License, Version 2.0 (the "License"); 5ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * you may not use this file except in compliance with the License. 6ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * You may obtain a copy of the License at 7ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * 8ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * http://www.apache.org/licenses/LICENSE-2.0 9ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * 10ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * Unless required by applicable law or agreed to in writing, software 11ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * distributed under the License is distributed on an "AS IS" BASIS, 12ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * See the License for the specific language governing permissions and 14ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * limitations under the License. 15ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih */ 16ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 17ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shihpackage android.media; 18ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 19ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shihimport android.os.Parcel; 20ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 21ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih/** 22b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * Class that embodies one timed metadata access unit, including 23ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * 24ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * <ul> 25ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * <li> a time stamp, and </li> 26ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * <li> raw uninterpreted byte-array extracted directly from the container. </li> 27ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * </ul> 28ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * 29b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * @see MediaPlayer#setOnTimedMetaDataAvailableListener(android.media.MediaPlayer.OnTimedMetaDataListener) 30ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih */ 31b7514effd1b77829fb950f4fab22041f98b2075fRobert Shihpublic final class TimedMetaData { 32ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih private static final String TAG = "TimedMetaData"; 33ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 34b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih private long mTimestampUs; 35b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih private byte[] mMetaData; 36ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 37ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih /** 38ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih * @hide 39ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih */ 40ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih static TimedMetaData createTimedMetaDataFromParcel(Parcel parcel) { 41ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih return new TimedMetaData(parcel); 42ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 43ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 44ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih private TimedMetaData(Parcel parcel) { 45ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih if (!parseParcel(parcel)) { 46ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih throw new IllegalArgumentException("parseParcel() fails"); 47ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 48ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 49ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 50b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih /** 51b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * @return the timestamp associated with this metadata access unit in microseconds; 52b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * 0 denotes playback start. 53b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih */ 54b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih public long getTimestamp() { 55b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih return mTimestampUs; 56ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 57ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 58b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih /** 59b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * @return raw, uninterpreted content of this metadata access unit; for ID3 tags this includes 60b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih * everything starting from the 3 byte signature "ID3". 61b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih */ 62b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih public byte[] getMetaData() { 63b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih return mMetaData; 64ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 65ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 66ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih private boolean parseParcel(Parcel parcel) { 67ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih parcel.setDataPosition(0); 68ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih if (parcel.dataAvail() == 0) { 69ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih return false; 70ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 71ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 72b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih mTimestampUs = parcel.readLong(); 73b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih mMetaData = new byte[parcel.readInt()]; 74b7514effd1b77829fb950f4fab22041f98b2075fRobert Shih parcel.readByteArray(mMetaData); 75ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih 76ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih return true; 77ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih } 78ac033f033d2c0ff3d7cfd037409278d73260e87cRobert Shih} 79