@Override @Deprecated @SuppressWarnings("deprecation") public void blockingSendMessages(ExoPlayerMessage... messages) { List<PlayerMessage> playerMessages = new ArrayList<>(); for (ExoPlayerMessage message : messages) { playerMessages.add( createMessage(message.target) .setType(message.messageType) .setPayload(message.message) .send()); } boolean wasInterrupted = false; for (PlayerMessage message : playerMessages) { boolean blockMessage = true; while (blockMessage) { try { message.blockUntilDelivered(); blockMessage = false; } catch (InterruptedException e) { wasInterrupted = true; } } } if (wasInterrupted) { // Restore the interrupted status. Thread.currentThread().interrupt(); } }
private void setVideoSurfaceInternal(@Nullable Surface surface, boolean ownsSurface) { // Note: We don't turn this method into a no-op if the surface is being replaced with itself // so as to ensure onRenderedFirstFrame callbacks are still called in this case. List<PlayerMessage> messages = new ArrayList<>(); for (Renderer renderer : renderers) { if (renderer.getTrackType() == C.TRACK_TYPE_VIDEO) { messages.add( player.createMessage(renderer).setType(C.MSG_SET_SURFACE).setPayload(surface).send()); } } if (this.surface != null && this.surface != surface) { // We're replacing a surface. Block to ensure that it's not accessed after the method returns. try { for (PlayerMessage message : messages) { message.blockUntilDelivered(); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // If we created the previous surface, we are responsible for releasing it. if (this.ownsSurface) { this.surface.release(); } } this.surface = surface; this.ownsSurface = ownsSurface; }
/** * This was pulled from the <i>Deprecated</i> ExoPlayerImpl#blockingSendMessages method * * @param messages The messages */ protected void blockingSendMessages(List<PlayerMessage> messages) { boolean wasInterrupted = false; for (PlayerMessage message : messages) { boolean blockMessage = true; while (blockMessage) { try { message.blockUntilDelivered(); blockMessage = false; } catch (InterruptedException e) { wasInterrupted = true; } } } if (wasInterrupted) { // Restore the interrupted status. Thread.currentThread().interrupt(); } }