diff --git a/libraries/decoder_iamf/src/main/proguard-rules.txt b/libraries/decoder_iamf/proguard-rules.txt similarity index 100% rename from libraries/decoder_iamf/src/main/proguard-rules.txt rename to libraries/decoder_iamf/proguard-rules.txt diff --git a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoder.java b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoder.java index 8036798ee5..106aaf5873 100644 --- a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoder.java +++ b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoder.java @@ -56,6 +56,9 @@ public final class IamfDecoder public IamfDecoder(List initializationData, boolean spatializationSupported) throws IamfDecoderException { super(new DecoderInputBuffer[1], new SimpleDecoderOutputBuffer[1]); + if (!IamfLibrary.isAvailable()) { + throw new IamfDecoderException("Failed to load decoder native libraries."); + } if (initializationData.size() != 1) { throw new IamfDecoderException("Initialization data must contain a single element."); } diff --git a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoderException.java b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoderException.java index 9cf0bb43ae..55fa3ec7dc 100644 --- a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoderException.java +++ b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfDecoderException.java @@ -15,10 +15,12 @@ */ package androidx.media3.decoder.iamf; +import androidx.media3.common.util.UnstableApi; import androidx.media3.decoder.DecoderException; /** Thrown when an IAMF decoder error occurs. */ -final class IamfDecoderException extends DecoderException { +@UnstableApi +public final class IamfDecoderException extends DecoderException { /* package */ IamfDecoderException(String message) { super(message); diff --git a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfLibrary.java b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfLibrary.java index ba97114bc3..7aa29916c9 100644 --- a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfLibrary.java +++ b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/IamfLibrary.java @@ -15,7 +15,6 @@ */ package androidx.media3.decoder.iamf; -import androidx.media3.common.C; import androidx.media3.common.MediaLibraryInfo; import androidx.media3.common.util.LibraryLoader; import androidx.media3.common.util.UnstableApi; @@ -43,12 +42,9 @@ public final class IamfLibrary { * it must do so before calling any other method defined by this class, and before instantiating a * {@link LibiamfAudioRenderer} instance. * - * @param cryptoType The {@link C.CryptoType} for which the decoder library supports decrypting - * protected content, or {@link C#CRYPTO_TYPE_UNSUPPORTED} if the library does not support - * decryption. * @param libraries The names of the IAMF native libraries. */ - public static void setLibraries(@C.CryptoType int cryptoType, String... libraries) { + public static void setLibraries(String... libraries) { LOADER.setLibraries(libraries); } diff --git a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/LibiamfAudioRenderer.java b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/LibiamfAudioRenderer.java index a7fb295140..9365f9b4d1 100644 --- a/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/LibiamfAudioRenderer.java +++ b/libraries/decoder_iamf/src/main/java/androidx/media3/decoder/iamf/LibiamfAudioRenderer.java @@ -27,6 +27,7 @@ import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.TraceUtil; +import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; import androidx.media3.decoder.CryptoConfig; import androidx.media3.decoder.DecoderException; @@ -36,6 +37,7 @@ import androidx.media3.exoplayer.audio.DecoderAudioRenderer; import java.util.Objects; /** Decodes and renders audio using the native IAMF decoder. */ +@UnstableApi public class LibiamfAudioRenderer extends DecoderAudioRenderer { private final Context context; diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java index 1c6ce756a7..563924c1cd 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java @@ -547,6 +547,7 @@ public class DefaultRenderersFactory implements RenderersFactory { // The extension is present, but instantiation failed. throw new IllegalStateException("Error instantiating FFmpeg extension", e); } + try { // Full class names used for constructor args so the LINT rule triggers if any of them move. Class clazz = Class.forName("androidx.media3.decoder.iamf.LibiamfAudioRenderer"); @@ -559,6 +560,7 @@ public class DefaultRenderersFactory implements RenderersFactory { Renderer renderer = (Renderer) constructor.newInstance(context, eventHandler, eventListener, audioSink); out.add(extensionRendererIndex++, renderer); + Log.i(TAG, "Loaded LibiamfAudioRenderer."); } catch (ClassNotFoundException e) { // Expected if the app was built without the extension. } catch (Exception e) {