diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java index e58bfafc11..a55f398620 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java @@ -167,6 +167,7 @@ public final class SsimHelper { private static final String ASSET_FILE_SCHEME = "asset:///"; private static final int MAX_IMAGES_ALLOWED = 1; + private final MediaFormat mediaFormat; private final MediaCodec mediaCodec; private final MediaExtractor mediaExtractor; private final MediaCodec.BufferInfo bufferInfo; @@ -178,6 +179,7 @@ public final class SsimHelper { private boolean hasReadEndOfInputStream; private boolean queuedEndOfStreamToDecoder; private boolean dequeuedAllDecodedFrames; + private boolean isCodecStarted; private int dequeuedFramesCount; /** @@ -230,10 +232,8 @@ public final class SsimHelper { String sampleMimeType = checkNotNull(mediaFormat.getString(MediaFormat.KEY_MIME)); mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MEDIA_CODEC_COLOR_SPACE); + this.mediaFormat = mediaFormat; mediaCodec = MediaCodec.createDecoderByType(sampleMimeType); - mediaCodec.configure( - mediaFormat, imageReader.getSurface(), /* crypto= */ null, /* flags= */ 0); - mediaCodec.start(); } /** @@ -243,6 +243,12 @@ public final class SsimHelper { */ @Nullable public Image runUntilComparisonFrameOrEnded() throws InterruptedException { + if (!isCodecStarted) { + mediaCodec.configure( + mediaFormat, imageReader.getSurface(), /* crypto= */ null, /* flags= */ 0); + mediaCodec.start(); + isCodecStarted = true; + } while (!hasEnded() && !isCurrentFrameComparisonFrame) { while (dequeueOneFrameFromDecoder()) {} while (queueOneFrameToDecoder()) {}