Loading media/java/android/media/MediaPlayer.java +82 −13 Original line number Diff line number Diff line Loading @@ -2128,7 +2128,13 @@ public class MediaPlayer extends PlayerBase mTimeProvider.close(); mTimeProvider = null; } mOnSubtitleDataListener = null; synchronized(this) { mSubtitleDataListenerDisabled = false; mExtSubtitleDataListener = null; mExtSubtitleDataHandler = null; mOnMediaTimeDiscontinuityListener = null; mOnMediaTimeDiscontinuityHandler = null; } // Modular DRM clean up mOnDrmConfigHelper = null; Loading Loading @@ -2699,7 +2705,7 @@ public class MediaPlayer extends PlayerBase private int mSelectedSubtitleTrackIndex = -1; private Vector<InputStream> mOpenSubtitleSources; private OnSubtitleDataListener mSubtitleDataListener = new OnSubtitleDataListener() { private final OnSubtitleDataListener mIntSubtitleDataListener = new OnSubtitleDataListener() { @Override public void onSubtitleData(MediaPlayer mp, SubtitleData data) { int index = data.getTrackIndex(); Loading @@ -2725,7 +2731,9 @@ public class MediaPlayer extends PlayerBase } mSelectedSubtitleTrackIndex = -1; } setOnSubtitleDataListener(null); synchronized (this) { mSubtitleDataListenerDisabled = true; } if (track == null) { return; } Loading @@ -2745,7 +2753,9 @@ public class MediaPlayer extends PlayerBase selectOrDeselectInbandTrack(mSelectedSubtitleTrackIndex, true); } catch (IllegalStateException e) { } setOnSubtitleDataListener(mSubtitleDataListener); synchronized (this) { mSubtitleDataListenerDisabled = false; } } // no need to select out-of-band tracks } Loading Loading @@ -3304,6 +3314,7 @@ public class MediaPlayer extends PlayerBase private static final int MEDIA_SUBTITLE_DATA = 201; private static final int MEDIA_META_DATA = 202; private static final int MEDIA_DRM_INFO = 210; private static final int MEDIA_TIME_DISCONTINUITY = 211; private static final int MEDIA_AUDIO_ROUTING_CHANGED = 10000; private TimeProvider mTimeProvider; Loading Loading @@ -3514,15 +3525,34 @@ public class MediaPlayer extends PlayerBase return; case MEDIA_SUBTITLE_DATA: OnSubtitleDataListener onSubtitleDataListener = mOnSubtitleDataListener; if (onSubtitleDataListener == null) { final OnSubtitleDataListener extSubtitleListener; final Handler extSubtitleHandler; synchronized(this) { if (mSubtitleDataListenerDisabled) { return; } extSubtitleListener = mExtSubtitleDataListener; extSubtitleHandler = mExtSubtitleDataHandler; } if (msg.obj instanceof Parcel) { Parcel parcel = (Parcel) msg.obj; SubtitleData data = new SubtitleData(parcel); final SubtitleData data = new SubtitleData(parcel); parcel.recycle(); onSubtitleDataListener.onSubtitleData(mMediaPlayer, data); mIntSubtitleDataListener.onSubtitleData(mMediaPlayer, data); if (extSubtitleListener != null) { if (extSubtitleHandler == null) { extSubtitleListener.onSubtitleData(mMediaPlayer, data); } else { extSubtitleHandler.post(new Runnable() { @Override public void run() { extSubtitleListener.onSubtitleData(mMediaPlayer, data); } }); } } } return; Loading Loading @@ -3553,6 +3583,43 @@ public class MediaPlayer extends PlayerBase } return; case MEDIA_TIME_DISCONTINUITY: final OnMediaTimeDiscontinuityListener mediaTimeListener; final Handler mediaTimeHandler; synchronized(this) { mediaTimeListener = mOnMediaTimeDiscontinuityListener; mediaTimeHandler = mOnMediaTimeDiscontinuityHandler; } if (mediaTimeListener == null) { return; } if (msg.obj instanceof Parcel) { Parcel parcel = (Parcel) msg.obj; parcel.setDataPosition(0); long anchorMediaUs = parcel.readLong(); long anchorRealUs = parcel.readLong(); float playbackRate = parcel.readFloat(); parcel.recycle(); final MediaTimestamp timestamp; if (anchorMediaUs != -1 && anchorRealUs != -1) { timestamp = new MediaTimestamp( anchorMediaUs /*Us*/, anchorRealUs * 1000 /*Ns*/, playbackRate); } else { timestamp = MediaTimestamp.TIMESTAMP_UNKNOWN; } if (mediaTimeHandler == null) { mediaTimeListener.onMediaTimeDiscontinuity(mMediaPlayer, timestamp); } else { mediaTimeHandler.post(new Runnable() { @Override public void run() { mediaTimeListener.onMediaTimeDiscontinuity(mMediaPlayer, timestamp); } }); } } return; default: Log.e(TAG, "Unknown message type " + msg.what); return; Loading Loading @@ -3877,13 +3944,15 @@ public class MediaPlayer extends PlayerBase private void setOnSubtitleDataListenerInt( @Nullable OnSubtitleDataListener listener, @Nullable Handler handler) { synchronized (this) { mOnSubtitleDataListener = listener; mOnSubtitleDataHandler = handler; mExtSubtitleDataListener = listener; mExtSubtitleDataHandler = handler; } } private OnSubtitleDataListener mOnSubtitleDataListener; private Handler mOnSubtitleDataHandler; private boolean mSubtitleDataListenerDisabled; /** External OnSubtitleDataListener, the one set by {@link #setOnSubtitleDataListener}. */ private OnSubtitleDataListener mExtSubtitleDataListener; private Handler mExtSubtitleDataHandler; /** * Interface definition of a callback to be invoked when discontinuity in the normal progression Loading media/java/android/media/MediaTimestamp.java +9 −0 Original line number Diff line number Diff line Loading @@ -98,4 +98,13 @@ public final class MediaTimestamp && (this.nanoTime == that.nanoTime) && (this.clockRate == that.clockRate); } @Override public String toString() { return getClass().getName() + "{AnchorMediaTimeUs=" + mediaTimeUs + " AnchorSystemNanoTime=" + nanoTime + " clockRate=" + clockRate + "}"; } } Loading
media/java/android/media/MediaPlayer.java +82 −13 Original line number Diff line number Diff line Loading @@ -2128,7 +2128,13 @@ public class MediaPlayer extends PlayerBase mTimeProvider.close(); mTimeProvider = null; } mOnSubtitleDataListener = null; synchronized(this) { mSubtitleDataListenerDisabled = false; mExtSubtitleDataListener = null; mExtSubtitleDataHandler = null; mOnMediaTimeDiscontinuityListener = null; mOnMediaTimeDiscontinuityHandler = null; } // Modular DRM clean up mOnDrmConfigHelper = null; Loading Loading @@ -2699,7 +2705,7 @@ public class MediaPlayer extends PlayerBase private int mSelectedSubtitleTrackIndex = -1; private Vector<InputStream> mOpenSubtitleSources; private OnSubtitleDataListener mSubtitleDataListener = new OnSubtitleDataListener() { private final OnSubtitleDataListener mIntSubtitleDataListener = new OnSubtitleDataListener() { @Override public void onSubtitleData(MediaPlayer mp, SubtitleData data) { int index = data.getTrackIndex(); Loading @@ -2725,7 +2731,9 @@ public class MediaPlayer extends PlayerBase } mSelectedSubtitleTrackIndex = -1; } setOnSubtitleDataListener(null); synchronized (this) { mSubtitleDataListenerDisabled = true; } if (track == null) { return; } Loading @@ -2745,7 +2753,9 @@ public class MediaPlayer extends PlayerBase selectOrDeselectInbandTrack(mSelectedSubtitleTrackIndex, true); } catch (IllegalStateException e) { } setOnSubtitleDataListener(mSubtitleDataListener); synchronized (this) { mSubtitleDataListenerDisabled = false; } } // no need to select out-of-band tracks } Loading Loading @@ -3304,6 +3314,7 @@ public class MediaPlayer extends PlayerBase private static final int MEDIA_SUBTITLE_DATA = 201; private static final int MEDIA_META_DATA = 202; private static final int MEDIA_DRM_INFO = 210; private static final int MEDIA_TIME_DISCONTINUITY = 211; private static final int MEDIA_AUDIO_ROUTING_CHANGED = 10000; private TimeProvider mTimeProvider; Loading Loading @@ -3514,15 +3525,34 @@ public class MediaPlayer extends PlayerBase return; case MEDIA_SUBTITLE_DATA: OnSubtitleDataListener onSubtitleDataListener = mOnSubtitleDataListener; if (onSubtitleDataListener == null) { final OnSubtitleDataListener extSubtitleListener; final Handler extSubtitleHandler; synchronized(this) { if (mSubtitleDataListenerDisabled) { return; } extSubtitleListener = mExtSubtitleDataListener; extSubtitleHandler = mExtSubtitleDataHandler; } if (msg.obj instanceof Parcel) { Parcel parcel = (Parcel) msg.obj; SubtitleData data = new SubtitleData(parcel); final SubtitleData data = new SubtitleData(parcel); parcel.recycle(); onSubtitleDataListener.onSubtitleData(mMediaPlayer, data); mIntSubtitleDataListener.onSubtitleData(mMediaPlayer, data); if (extSubtitleListener != null) { if (extSubtitleHandler == null) { extSubtitleListener.onSubtitleData(mMediaPlayer, data); } else { extSubtitleHandler.post(new Runnable() { @Override public void run() { extSubtitleListener.onSubtitleData(mMediaPlayer, data); } }); } } } return; Loading Loading @@ -3553,6 +3583,43 @@ public class MediaPlayer extends PlayerBase } return; case MEDIA_TIME_DISCONTINUITY: final OnMediaTimeDiscontinuityListener mediaTimeListener; final Handler mediaTimeHandler; synchronized(this) { mediaTimeListener = mOnMediaTimeDiscontinuityListener; mediaTimeHandler = mOnMediaTimeDiscontinuityHandler; } if (mediaTimeListener == null) { return; } if (msg.obj instanceof Parcel) { Parcel parcel = (Parcel) msg.obj; parcel.setDataPosition(0); long anchorMediaUs = parcel.readLong(); long anchorRealUs = parcel.readLong(); float playbackRate = parcel.readFloat(); parcel.recycle(); final MediaTimestamp timestamp; if (anchorMediaUs != -1 && anchorRealUs != -1) { timestamp = new MediaTimestamp( anchorMediaUs /*Us*/, anchorRealUs * 1000 /*Ns*/, playbackRate); } else { timestamp = MediaTimestamp.TIMESTAMP_UNKNOWN; } if (mediaTimeHandler == null) { mediaTimeListener.onMediaTimeDiscontinuity(mMediaPlayer, timestamp); } else { mediaTimeHandler.post(new Runnable() { @Override public void run() { mediaTimeListener.onMediaTimeDiscontinuity(mMediaPlayer, timestamp); } }); } } return; default: Log.e(TAG, "Unknown message type " + msg.what); return; Loading Loading @@ -3877,13 +3944,15 @@ public class MediaPlayer extends PlayerBase private void setOnSubtitleDataListenerInt( @Nullable OnSubtitleDataListener listener, @Nullable Handler handler) { synchronized (this) { mOnSubtitleDataListener = listener; mOnSubtitleDataHandler = handler; mExtSubtitleDataListener = listener; mExtSubtitleDataHandler = handler; } } private OnSubtitleDataListener mOnSubtitleDataListener; private Handler mOnSubtitleDataHandler; private boolean mSubtitleDataListenerDisabled; /** External OnSubtitleDataListener, the one set by {@link #setOnSubtitleDataListener}. */ private OnSubtitleDataListener mExtSubtitleDataListener; private Handler mExtSubtitleDataHandler; /** * Interface definition of a callback to be invoked when discontinuity in the normal progression Loading
media/java/android/media/MediaTimestamp.java +9 −0 Original line number Diff line number Diff line Loading @@ -98,4 +98,13 @@ public final class MediaTimestamp && (this.nanoTime == that.nanoTime) && (this.clockRate == that.clockRate); } @Override public String toString() { return getClass().getName() + "{AnchorMediaTimeUs=" + mediaTimeUs + " AnchorSystemNanoTime=" + nanoTime + " clockRate=" + clockRate + "}"; } }