From a80360460555b5f92509356bb455f3a4771d757a Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 1 Dec 2021 08:43:44 +0000 Subject: [PATCH] Increase transformer min API version to 21 This will remove the need to implement compat code handling very old API versions where some symbols are not available, and it reduces the burden of dealing with media framework issues around concurrent codec usage that are worse on older API versions. Top apps that we've surveyed as potential users for transformer library features are using API 21 or later. PiperOrigin-RevId: 413341540 --- libraries/transformer/build.gradle | 1 + .../java/androidx/media3/transformer/AudioSamplePipeline.java | 2 -- .../src/main/java/androidx/media3/transformer/FrameEditor.java | 2 -- .../main/java/androidx/media3/transformer/FrameworkMuxer.java | 1 - .../androidx/media3/transformer/MediaCodecAdapterWrapper.java | 3 --- .../main/java/androidx/media3/transformer/MuxerWrapper.java | 2 -- .../src/main/java/androidx/media3/transformer/Transformer.java | 1 - .../androidx/media3/transformer/TransformerAudioRenderer.java | 2 -- .../androidx/media3/transformer/TransformerBaseRenderer.java | 2 -- .../androidx/media3/transformer/TransformerMediaClock.java | 2 -- .../androidx/media3/transformer/TransformerVideoRenderer.java | 2 -- .../java/androidx/media3/transformer/VideoSamplePipeline.java | 2 -- 12 files changed, 1 insertion(+), 21 deletions(-) diff --git a/libraries/transformer/build.gradle b/libraries/transformer/build.gradle index 510f8eca97..00dfc401ab 100644 --- a/libraries/transformer/build.gradle +++ b/libraries/transformer/build.gradle @@ -15,6 +15,7 @@ apply from: "$gradle.ext.androidxMediaSettingsDir/common_library_config.gradle" android { defaultConfig { + minSdkVersion 21 // The following argument makes the Android Test Orchestrator run its // "pm clear" command after each test invocation. This command ensures // that the app's state is completely cleared between tests. diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java index 76f7d51955..c98a858dae 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java @@ -23,7 +23,6 @@ import static java.lang.Math.min; import android.media.MediaCodec.BufferInfo; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.PlaybackException; @@ -41,7 +40,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; /** * Pipeline to decode audio samples, apply transformations on the raw samples, and re-encode them. */ -@RequiresApi(18) /* package */ final class AudioSamplePipeline implements SamplePipeline { private static final String TAG = "AudioSamplePipeline"; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java index dfad38037c..dc552d26f1 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java @@ -24,7 +24,6 @@ import android.opengl.EGLExt; import android.opengl.EGLSurface; import android.opengl.GLES20; import android.view.Surface; -import androidx.annotation.RequiresApi; import androidx.media3.common.util.GlUtil; import java.io.IOException; @@ -32,7 +31,6 @@ import java.io.IOException; * FrameEditor applies changes to individual video frames. Changes include just resolution for now, * but may later include brightness, cropping, rotation, etc. */ -@RequiresApi(18) /* package */ final class FrameEditor { static { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java index e0d3456ba8..4ebe62e846 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java @@ -36,7 +36,6 @@ import java.lang.reflect.Field; import java.nio.ByteBuffer; /** Muxer implementation that uses a {@link MediaMuxer}. */ -@RequiresApi(18) /* package */ final class FrameworkMuxer implements Muxer { public static final class Factory implements Muxer.Factory { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/MediaCodecAdapterWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/MediaCodecAdapterWrapper.java index 8db4105660..e41174a4ee 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MediaCodecAdapterWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MediaCodecAdapterWrapper.java @@ -26,7 +26,6 @@ import android.media.MediaCodecInfo.CodecCapabilities; import android.media.MediaFormat; import android.view.Surface; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; @@ -50,7 +49,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; * through {@link MediaCodecAdapter}. This is done by simplifying the calls needed to queue and * dequeue buffers, removing the need to track buffer indices and codec events. */ -@RequiresApi(18) /* package */ final class MediaCodecAdapterWrapper { // MediaCodec decoders always output 16 bit PCM, unless configured to output PCM float. @@ -303,7 +301,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; inputBuffer.data = null; } - @RequiresApi(18) public void signalEndOfInputStream() { codec.signalEndOfInputStream(); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java index 83c18bd017..0bba625b21 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -22,7 +22,6 @@ import static androidx.media3.common.util.Util.minValue; import android.util.SparseIntArray; import android.util.SparseLongArray; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; @@ -34,7 +33,6 @@ import java.nio.ByteBuffer; * *

This wrapper can contain at most one video track and one audio track. */ -@RequiresApi(18) /* package */ final class MuxerWrapper { /** diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index c2f94abbf0..a51b93b64e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -80,7 +80,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; * of the application's main thread is used. In all cases the Looper of the thread from which the * transformer must be accessed can be queried using {@link #getApplicationLooper()}. */ -@RequiresApi(18) @UnstableApi public final class Transformer { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java index 602cceb12c..f534bcfdca 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java @@ -20,7 +20,6 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.exoplayer.source.SampleStream.FLAG_REQUIRE_FORMAT; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; @@ -30,7 +29,6 @@ import androidx.media3.exoplayer.FormatHolder; import androidx.media3.exoplayer.source.SampleStream.ReadDataResult; import androidx.media3.extractor.metadata.mp4.SlowMotionData; -@RequiresApi(18) /* package */ final class TransformerAudioRenderer extends TransformerBaseRenderer { private static final String TAG = "TransformerAudioRenderer"; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java index 8703e29007..29bdce9048 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java @@ -19,7 +19,6 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkStateNotNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; @@ -34,7 +33,6 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.RequiresNonNull; -@RequiresApi(18) /* package */ abstract class TransformerBaseRenderer extends BaseRenderer { protected final MuxerWrapper muxerWrapper; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerMediaClock.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerMediaClock.java index a33b505502..82d5b45f55 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerMediaClock.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerMediaClock.java @@ -18,12 +18,10 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Util.minValue; import android.util.SparseLongArray; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.PlaybackParameters; import androidx.media3.exoplayer.MediaClock; -@RequiresApi(18) /* package */ final class TransformerMediaClock implements MediaClock { private final SparseLongArray trackTypeToTimeUs; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java index 0baca1b026..60d79eda20 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java @@ -20,7 +20,6 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.exoplayer.source.SampleStream.FLAG_REQUIRE_FORMAT; import android.content.Context; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.decoder.DecoderInputBuffer; @@ -31,7 +30,6 @@ import java.nio.ByteBuffer; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.RequiresNonNull; -@RequiresApi(18) /* package */ final class TransformerVideoRenderer extends TransformerBaseRenderer { private static final String TAG = "TransformerTranscodingVideoRenderer"; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java index 1fe2bbe908..ac1f792dcd 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java @@ -21,7 +21,6 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import android.content.Context; import android.media.MediaCodec; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.PlaybackException; @@ -33,7 +32,6 @@ import java.io.IOException; /** * Pipeline to decode video samples, apply transformations on the raw samples, and re-encode them. */ -@RequiresApi(18) /* package */ final class VideoSamplePipeline implements SamplePipeline { private static final String TAG = "VideoSamplePipeline";