diff options
author | Chong Zhang <chz@google.com> | 2013-08-06 09:43:22 -0700 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2013-08-16 14:38:48 -0700 |
commit | 83ddaf664c7a9eb2759269ec75d25dba48edebf2 (patch) | |
tree | 22407aef660792659d8e2f39fba4305435c66938 /media | |
parent | 1c56a67dbbade39b1d88738a49fd31b4f97df0ab (diff) | |
download | frameworks_base-83ddaf664c7a9eb2759269ec75d25dba48edebf2.zip frameworks_base-83ddaf664c7a9eb2759269ec75d25dba48edebf2.tar.gz frameworks_base-83ddaf664c7a9eb2759269ec75d25dba48edebf2.tar.bz2 |
MediaPlayer: add listener for subtitle data
Bug: 10326117
Change-Id: I8fbd54df70e37a061c7c875743ded09f1922ef8f
Diffstat (limited to 'media')
-rw-r--r-- | media/java/android/media/MediaPlayer.java | 41 | ||||
-rw-r--r-- | media/java/android/media/SubtitleData.java | 88 |
2 files changed, 129 insertions, 0 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 7206244..946dd71 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -39,6 +39,7 @@ import android.graphics.Bitmap; import android.graphics.SurfaceTexture; import android.media.AudioManager; import android.media.MediaFormat; +import android.media.SubtitleData; import java.io.File; import java.io.FileDescriptor; @@ -1336,6 +1337,7 @@ public class MediaPlayer mOnInfoListener = null; mOnVideoSizeChangedListener = null; mOnTimedTextListener = null; + mOnSubtitleDataListener = null; _release(); } @@ -1546,6 +1548,8 @@ public class MediaPlayer public static final int MEDIA_TRACK_TYPE_VIDEO = 1; public static final int MEDIA_TRACK_TYPE_AUDIO = 2; public static final int MEDIA_TRACK_TYPE_TIMEDTEXT = 3; + /** @hide */ + public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; final int mTrackType; final MediaFormat mFormat; @@ -1913,6 +1917,7 @@ public class MediaPlayer private static final int MEDIA_TIMED_TEXT = 99; private static final int MEDIA_ERROR = 100; private static final int MEDIA_INFO = 200; + private static final int MEDIA_SUBTITLE_DATA = 201; private class EventHandler extends Handler { @@ -1992,6 +1997,18 @@ public class MediaPlayer } return; + case MEDIA_SUBTITLE_DATA: + if (mOnSubtitleDataListener == null) { + return; + } + if (msg.obj instanceof Parcel) { + Parcel parcel = (Parcel) msg.obj; + SubtitleData data = new SubtitleData(parcel); + parcel.recycle(); + mOnSubtitleDataListener.onSubtitleData(mMediaPlayer, data); + } + return; + case MEDIA_NOP: // interface test message - ignore break; @@ -2203,6 +2220,30 @@ public class MediaPlayer private OnTimedTextListener mOnTimedTextListener; + /** + * Interface definition of a callback to be invoked when a + * track has data available. + * + * @hide + */ + public interface OnSubtitleDataListener + { + public void onSubtitleData(MediaPlayer mp, SubtitleData data); + } + + /** + * Register a callback to be invoked when a track has data available. + * + * @param listener the callback that will be run + * + * @hide + */ + public void setOnSubtitleDataListener(OnSubtitleDataListener listener) + { + mOnSubtitleDataListener = listener; + } + + private OnSubtitleDataListener mOnSubtitleDataListener; /* Do not change these values without updating their counterparts * in include/media/mediaplayer.h! diff --git a/media/java/android/media/SubtitleData.java b/media/java/android/media/SubtitleData.java new file mode 100644 index 0000000..f552e82 --- /dev/null +++ b/media/java/android/media/SubtitleData.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media; + +import android.os.Parcel; +import android.util.Log; + +/** + * @hide + * + * Class to hold the subtitle track's data, including: + * <ul> + * <li> Track index</li> + * <li> Start time (in microseconds) of the data</li> + * <li> Duration (in microseconds) of the data</li> + * <li> A byte-array of the data</li> + * </ul> + * + * <p> To receive the subtitle data, applications need to do the following: + * + * <ul> + * <li> Select a track of type MEDIA_TRACK_TYPE_SUBTITLE with {@link MediaPlayer.selectTrack(int)</li> + * <li> Implement the {@link MediaPlayer.OnSubtitleDataListener} interface</li> + * <li> Register the {@link MediaPlayer.OnSubtitleDataListener} callback on a MediaPlayer object</li> + * </ul> + * + * @see android.media.MediaPlayer + */ +public final class SubtitleData +{ + private static final String TAG = "SubtitleData"; + + private int mTrackIndex; + private long mStartTimeUs; + private long mDurationUs; + private byte[] mData; + + public SubtitleData(Parcel parcel) { + if (!parseParcel(parcel)) { + throw new IllegalArgumentException("parseParcel() fails"); + } + } + + public int getTrackIndex() { + return mTrackIndex; + } + + public long getStartTimeUs() { + return mStartTimeUs; + } + + public long getDurationUs() { + return mDurationUs; + } + + public byte[] getData() { + return mData; + } + + private boolean parseParcel(Parcel parcel) { + parcel.setDataPosition(0); + if (parcel.dataAvail() == 0) { + return false; + } + + mTrackIndex = parcel.readInt(); + mStartTimeUs = parcel.readLong(); + mDurationUs = parcel.readLong(); + mData = new byte[parcel.readInt()]; + parcel.readByteArray(mData); + + return true; + } +} |