183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang/* 283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * Copyright (C) 2011 The Android Open Source Project 383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * you may not use this file except in compliance with the License. 683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * You may obtain a copy of the License at 783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * http://www.apache.org/licenses/LICENSE-2.0 983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 1083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * Unless required by applicable law or agreed to in writing, software 1183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS, 1283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * See the License for the specific language governing permissions and 1483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * limitations under the License. 1583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang */ 1683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 1783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhangpackage android.media; 1883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 1983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhangimport android.os.Parcel; 2083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 2183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang/** 2283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * @hide 2383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 2483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * Class to hold the subtitle track's data, including: 2583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <ul> 2683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Track index</li> 2783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Start time (in microseconds) of the data</li> 2883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Duration (in microseconds) of the data</li> 2983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> A byte-array of the data</li> 3083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * </ul> 3183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 3283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <p> To receive the subtitle data, applications need to do the following: 3383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 3483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <ul> 3583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Select a track of type MEDIA_TRACK_TYPE_SUBTITLE with {@link MediaPlayer.selectTrack(int)</li> 3683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Implement the {@link MediaPlayer.OnSubtitleDataListener} interface</li> 3783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * <li> Register the {@link MediaPlayer.OnSubtitleDataListener} callback on a MediaPlayer object</li> 3883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * </ul> 3983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * 4083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang * @see android.media.MediaPlayer 4183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang */ 4283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhangpublic final class SubtitleData 4383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang{ 4483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private static final String TAG = "SubtitleData"; 4583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 4683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private int mTrackIndex; 4783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private long mStartTimeUs; 4883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private long mDurationUs; 4983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private byte[] mData; 5083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 5183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang public SubtitleData(Parcel parcel) { 5283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang if (!parseParcel(parcel)) { 5383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang throw new IllegalArgumentException("parseParcel() fails"); 5483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 5583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 5683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 5783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang public int getTrackIndex() { 5883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return mTrackIndex; 5983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 6083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 6183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang public long getStartTimeUs() { 6283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return mStartTimeUs; 6383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 6483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 6583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang public long getDurationUs() { 6683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return mDurationUs; 6783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 6883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 6983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang public byte[] getData() { 7083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return mData; 7183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 7283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 7383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang private boolean parseParcel(Parcel parcel) { 7483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang parcel.setDataPosition(0); 7583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang if (parcel.dataAvail() == 0) { 7683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return false; 7783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 7883ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 7983ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang mTrackIndex = parcel.readInt(); 8083ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang mStartTimeUs = parcel.readLong(); 8183ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang mDurationUs = parcel.readLong(); 8283ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang mData = new byte[parcel.readInt()]; 8383ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang parcel.readByteArray(mData); 8483ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang 8583ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang return true; 8683ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang } 8783ddaf664c7a9eb2759269ec75d25dba48edebf2Chong Zhang} 88