Commit 110d6e4f by olly Committed by Oliver Woodman

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
parent d8d3bd7b
...@@ -339,7 +339,7 @@ import java.util.Collections; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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 { ...@@ -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;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment