diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java index c54fef3591..715f1b183a 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java @@ -22,6 +22,7 @@ import android.media.MediaFormat; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; +import android.os.PersistableBundle; import android.view.Surface; import androidx.annotation.IntDef; import androidx.annotation.Nullable; @@ -306,6 +307,13 @@ import java.nio.ByteBuffer; codec.signalEndOfInputStream(); } + @Override + @RequiresApi(26) + public PersistableBundle getMetrics() { + maybeBlockOnQueueing(); + return codec.getMetrics(); + } + @VisibleForTesting /* package */ void onError(MediaCodec.CodecException error) { asynchronousMediaCodecCallback.onError(codec, error); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java index 6e75445e7f..c188c831f0 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java @@ -20,6 +20,7 @@ import android.media.MediaCrypto; import android.media.MediaFormat; import android.os.Bundle; import android.os.Handler; +import android.os.PersistableBundle; import android.view.Surface; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -338,4 +339,12 @@ public interface MediaCodecAdapter { */ @RequiresApi(18) void signalEndOfInputStream(); + + /** + * Returns metrics data about the current codec instance. + * + * @see MediaCodec#getMetrics() + */ + @RequiresApi(26) + PersistableBundle getMetrics(); } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java index 60ffb6eb64..5f97cf81e2 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java @@ -23,6 +23,7 @@ import android.media.MediaCodec; import android.media.MediaFormat; import android.os.Bundle; import android.os.Handler; +import android.os.PersistableBundle; import android.view.Surface; import androidx.annotation.DoNotInline; import androidx.annotation.Nullable; @@ -233,8 +234,16 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { codec.setVideoScalingMode(scalingMode); } + @Override + @RequiresApi(26) + public PersistableBundle getMetrics() { + return codec.getMetrics(); + } + @RequiresApi(18) private static final class Api18 { + private Api18() {} + @DoNotInline public static Surface createCodecInputSurface(MediaCodec codec) { return codec.createInputSurface(); diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java index 7cb20eca75..8355b7f4a7 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java @@ -23,6 +23,7 @@ import android.media.MediaCodec; import android.media.MediaFormat; import android.os.Bundle; import android.os.Handler; +import android.os.PersistableBundle; import android.util.SparseArray; import android.view.Surface; import androidx.annotation.Nullable; @@ -277,6 +278,12 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa delegate.signalEndOfInputStream(); } + @RequiresApi(26) + @Override + public PersistableBundle getMetrics() { + return delegate.getMetrics(); + } + // Dumpable implementation @Override