Merge "Add OnMediaTimeDiscontinuity notification" into pi-dev

am: b9c661f79f

Change-Id: I421a35ec4ac0b695c6807250e1ced6c91d451d67
This commit is contained in:
Dongwon Kang
2018-04-05 10:06:42 -07:00
committed by android-build-merger
2 changed files with 91 additions and 13 deletions

View File

@@ -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;
@@ -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();
@@ -2725,7 +2731,9 @@ public class MediaPlayer extends PlayerBase
}
mSelectedSubtitleTrackIndex = -1;
}
setOnSubtitleDataListener(null);
synchronized (this) {
mSubtitleDataListenerDisabled = true;
}
if (track == null) {
return;
}
@@ -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
}
@@ -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;
@@ -3514,15 +3525,34 @@ public class MediaPlayer extends PlayerBase
return;
case MEDIA_SUBTITLE_DATA:
OnSubtitleDataListener onSubtitleDataListener = mOnSubtitleDataListener;
if (onSubtitleDataListener == null) {
return;
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;
@@ -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;
@@ -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

View File

@@ -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
+ "}";
}
}