mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 07:15:46 +00:00
Bug 1715947 - Don't call callback after GeckoHlsPlayer is released. r=jolin
`GeckoHlsPlayer.release()` releases `ExoPlayer` object on player thread. But it doesn't wait for whether it calls stop and callback is released. But `HLSDecoder` calls `GeckoHLSResourceWrapper.destroy()` then dispose JNI callback object immediately. So `GeckoHlsPlayer` may calls callback even if callback is disposed. We should check `mReleasing` before calling callback. Differential Revision: https://phabricator.services.mozilla.com/D117505
This commit is contained in:
parent
a8cb28ae2c
commit
714e4c72eb
@ -210,18 +210,21 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
|
||||
final LoadEventInfo loadEventInfo,
|
||||
final MediaLoadData mediaLoadData) {
|
||||
assertTrue(isPlayerThread());
|
||||
if (mediaLoadData.dataType != C.DATA_TYPE_MEDIA) {
|
||||
// Don't report non-media URLs.
|
||||
return;
|
||||
}
|
||||
if (mResourceCallbacks == null || loadEventInfo.uri == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (DEBUG) {
|
||||
Log.d(LOGTAG, "on-load: url=" + loadEventInfo.uri);
|
||||
synchronized (GeckoHlsPlayer.this) {
|
||||
if (mediaLoadData.dataType != C.DATA_TYPE_MEDIA) {
|
||||
// Don't report non-media URLs.
|
||||
return;
|
||||
}
|
||||
if (mResourceCallbacks == null || loadEventInfo.uri == null || mReleasing) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (DEBUG) {
|
||||
Log.d(LOGTAG, "on-load: url=" + loadEventInfo.uri);
|
||||
}
|
||||
mResourceCallbacks.onLoad(loadEventInfo.uri.toString());
|
||||
}
|
||||
mResourceCallbacks.onLoad(loadEventInfo.uri.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@ -269,8 +272,11 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
|
||||
if (!mIsPlayerInitDone) {
|
||||
return;
|
||||
}
|
||||
|
||||
mTracksInfo.onDataArrived(trackType);
|
||||
mResourceCallbacks.onDataArrived();
|
||||
if (!mReleasing) {
|
||||
mResourceCallbacks.onDataArrived();
|
||||
}
|
||||
checkInitDone();
|
||||
}
|
||||
}
|
||||
@ -432,6 +438,9 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
|
||||
Log.e(LOGTAG, "playerFailed" , e);
|
||||
}
|
||||
mIsPlayerInitDone = false;
|
||||
if (mReleasing) {
|
||||
return;
|
||||
}
|
||||
if (mResourceCallbacks != null) {
|
||||
mResourceCallbacks.onError(ResourceError.PLAYER.code());
|
||||
}
|
||||
@ -844,6 +853,9 @@ public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
|
||||
assertTrue(startTime != Long.MAX_VALUE && startTime != Long.MIN_VALUE);
|
||||
mPlayer.seekTo(positionUs / 1000 - startTime / 1000);
|
||||
} catch (final Exception e) {
|
||||
if (mReleasing) {
|
||||
return false;
|
||||
}
|
||||
if (mDemuxerCallbacks != null) {
|
||||
mDemuxerCallbacks.onError(DemuxerError.UNKNOWN.code());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user