mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Propagate failures handling messages on the playback thread
This restores functionality that was lost when we added support for general timed message delivery. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=187866807
This commit is contained in:
parent
d8d3bd7b3f
commit
110d6e4fdf
@ -339,7 +339,7 @@ import java.util.Collections;
|
|||||||
}
|
}
|
||||||
maybeNotifyPlaybackInfoChanged();
|
maybeNotifyPlaybackInfoChanged();
|
||||||
} catch (ExoPlaybackException e) {
|
} catch (ExoPlaybackException e) {
|
||||||
Log.e(TAG, "Renderer error.", e);
|
Log.e(TAG, "Playback error.", e);
|
||||||
stopInternal(/* reset= */ false, /* acknowledgeStop= */ false);
|
stopInternal(/* reset= */ false, /* acknowledgeStop= */ false);
|
||||||
eventHandler.obtainMessage(MSG_ERROR, e).sendToTarget();
|
eventHandler.obtainMessage(MSG_ERROR, e).sendToTarget();
|
||||||
maybeNotifyPlaybackInfoChanged();
|
maybeNotifyPlaybackInfoChanged();
|
||||||
@ -805,7 +805,7 @@ import java.util.Collections;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessageInternal(PlayerMessage message) {
|
private void sendMessageInternal(PlayerMessage message) throws ExoPlaybackException {
|
||||||
if (message.getPositionMs() == C.TIME_UNSET) {
|
if (message.getPositionMs() == C.TIME_UNSET) {
|
||||||
// If no delivery time is specified, trigger immediate message delivery.
|
// If no delivery time is specified, trigger immediate message delivery.
|
||||||
sendMessageToTarget(message);
|
sendMessageToTarget(message);
|
||||||
@ -824,7 +824,7 @@ import java.util.Collections;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessageToTarget(PlayerMessage message) {
|
private void sendMessageToTarget(PlayerMessage message) throws ExoPlaybackException {
|
||||||
if (message.getHandler().getLooper() == handler.getLooper()) {
|
if (message.getHandler().getLooper() == handler.getLooper()) {
|
||||||
deliverMessage(message);
|
deliverMessage(message);
|
||||||
if (playbackInfo.playbackState == Player.STATE_READY
|
if (playbackInfo.playbackState == Player.STATE_READY
|
||||||
@ -838,22 +838,24 @@ import java.util.Collections;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessageToTargetThread(final PlayerMessage message) {
|
private void sendMessageToTargetThread(final PlayerMessage message) {
|
||||||
message
|
Handler handler = message.getHandler();
|
||||||
.getHandler()
|
handler.post(
|
||||||
.post(
|
new Runnable() {
|
||||||
new Runnable() {
|
@Override
|
||||||
@Override
|
public void run() {
|
||||||
public void run() {
|
try {
|
||||||
deliverMessage(message);
|
deliverMessage(message);
|
||||||
}
|
} catch (ExoPlaybackException e) {
|
||||||
});
|
Log.e(TAG, "Unexpected error delivering message on external thread.", e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deliverMessage(PlayerMessage message) {
|
private void deliverMessage(PlayerMessage message) throws ExoPlaybackException {
|
||||||
try {
|
try {
|
||||||
message.getTarget().handleMessage(message.getType(), message.getPayload());
|
message.getTarget().handleMessage(message.getType(), message.getPayload());
|
||||||
} catch (ExoPlaybackException e) {
|
|
||||||
eventHandler.obtainMessage(MSG_ERROR, e).sendToTarget();
|
|
||||||
} finally {
|
} finally {
|
||||||
message.markAsProcessed(/* isDelivered= */ true);
|
message.markAsProcessed(/* isDelivered= */ true);
|
||||||
}
|
}
|
||||||
@ -899,7 +901,8 @@ import java.util.Collections;
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeTriggerPendingMessages(long oldPeriodPositionUs, long newPeriodPositionUs) {
|
private void maybeTriggerPendingMessages(long oldPeriodPositionUs, long newPeriodPositionUs)
|
||||||
|
throws ExoPlaybackException {
|
||||||
if (pendingMessages.isEmpty() || playbackInfo.periodId.isAd()) {
|
if (pendingMessages.isEmpty() || playbackInfo.periodId.isAd()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,8 @@ public final class PlayerMessage {
|
|||||||
*
|
*
|
||||||
* @param messageType The message type.
|
* @param messageType The message type.
|
||||||
* @param payload The message payload.
|
* @param payload The message payload.
|
||||||
* @throws ExoPlaybackException If an error occurred whilst handling the message.
|
* @throws ExoPlaybackException If an error occurred whilst handling the message. Should only be
|
||||||
|
* thrown by targets that handle messages on the playback thread.
|
||||||
*/
|
*/
|
||||||
void handleMessage(int messageType, Object payload) throws ExoPlaybackException;
|
void handleMessage(int messageType, Object payload) throws ExoPlaybackException;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user