Loading media/java/android/media/MediaPlayer.java +41 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1336,6 +1337,7 @@ public class MediaPlayer mOnInfoListener = null; mOnVideoSizeChangedListener = null; mOnTimedTextListener = null; mOnSubtitleDataListener = null; _release(); } Loading Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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; Loading Loading @@ -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! Loading media/java/android/media/SubtitleData.java 0 → 100644 +88 −0 Original line number Diff line number Diff line /* * 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; } } Loading
media/java/android/media/MediaPlayer.java +41 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1336,6 +1337,7 @@ public class MediaPlayer mOnInfoListener = null; mOnVideoSizeChangedListener = null; mOnTimedTextListener = null; mOnSubtitleDataListener = null; _release(); } Loading Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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; Loading Loading @@ -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! Loading
media/java/android/media/SubtitleData.java 0 → 100644 +88 −0 Original line number Diff line number Diff line /* * 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; } }