From a162d689b62b80baba6863b4889ab7441f0505e7 Mon Sep 17 00:00:00 2001 From: christosts Date: Mon, 26 Apr 2021 14:41:40 +0100 Subject: [PATCH] MediaCodecRenderer: do not call protected methods from constructor MediaCodecRenderer is calling its protected methods resetCodecStateForRelease() and resetCodecStateForFlush() from its constructor. Classess that override the methods (eg. DebugMediaCodecVideoRenderer) need to checks if the methods are called from the superclass constructor thus their members are not initialized yet. With this change, the MCR constructor does not call the two methods and sets the respective state directly on its fields. PiperOrigin-RevId: 370445978 --- .../exoplayer2/mediacodec/MediaCodecRenderer.java | 12 +++++++++++- .../playbacktests/gts/DebugRenderersFactory.java | 5 +---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index d2fad6268b..25626b09c1 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -416,7 +416,17 @@ public abstract class MediaCodecRenderer extends BaseRenderer { // endianness. bypassBatchBuffer.ensureSpaceForWrite(/* length= */ 0); bypassBatchBuffer.data.order(ByteOrder.nativeOrder()); - resetCodecStateForRelease(); + + codecOperatingRate = CODEC_OPERATING_RATE_UNSET; + codecAdaptationWorkaroundMode = ADAPTATION_WORKAROUND_MODE_NEVER; + codecReconfigurationState = RECONFIGURATION_STATE_NONE; + inputIndex = C.INDEX_UNSET; + outputIndex = C.INDEX_UNSET; + codecHotswapDeadlineMs = C.TIME_UNSET; + largestQueuedPresentationTimeUs = C.TIME_UNSET; + lastBufferInStreamPresentationTimeUs = C.TIME_UNSET; + codecDrainState = DRAIN_STATE_NONE; + codecDrainAction = DRAIN_ACTION_NONE; } /** diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java index 6520b30b91..17b422d30c 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java @@ -140,10 +140,7 @@ import java.util.ArrayList; protected void resetCodecStateForFlush() { super.resetCodecStateForFlush(); clearTimestamps(); - - if (inputFormatChangeTimesUs != null) { - inputFormatChangeTimesUs.clear(); - } + inputFormatChangeTimesUs.clear(); inputFormatChanged = false; outputMediaFormatChanged = false; currentMediaFormat = null;