diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 73422d3f67..51cc4e5500 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -145,6 +145,8 @@ * Fix user info removal for URLs that contain encoded @ characters ([#1138](https://github.com/androidx/media/pull/1138)). * Decoder Extensions (FFmpeg, VP9, AV1, etc.): + * Add 16 KB page support for decoder extensions on Android 15 + ([#1685](https://github.com/androidx/media/issues/1685)). * MIDI extension: * Leanback extension: * Cast Extension: diff --git a/libraries/decoder_av1/build.gradle b/libraries/decoder_av1/build.gradle index 6f66ad5880..b793cb2d8e 100644 --- a/libraries/decoder_av1/build.gradle +++ b/libraries/decoder_av1/build.gradle @@ -27,6 +27,14 @@ android { } } } + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } } // Configure the native build only if libgav1 is present to avoid gradle sync diff --git a/libraries/decoder_av1/src/main/jni/CMakeLists.txt b/libraries/decoder_av1/src/main/jni/CMakeLists.txt index 0202f0af57..4a39b6cd38 100644 --- a/libraries/decoder_av1/src/main/jni/CMakeLists.txt +++ b/libraries/decoder_av1/src/main/jni/CMakeLists.txt @@ -61,3 +61,7 @@ target_link_libraries(gav1JNI PRIVATE libgav1_static PRIVATE ${android_log_lib}) +# Enable 16 KB ELF alignment. +target_link_options(gav1JNI + PRIVATE "-Wl,-z,max-page-size=16384") + diff --git a/libraries/decoder_ffmpeg/build.gradle b/libraries/decoder_ffmpeg/build.gradle index 3c111c9e14..05b7c4f8ba 100644 --- a/libraries/decoder_ffmpeg/build.gradle +++ b/libraries/decoder_ffmpeg/build.gradle @@ -13,7 +13,17 @@ // limitations under the License. apply from: "$gradle.ext.androidxMediaSettingsDir/common_library_config.gradle" -android.namespace = 'androidx.media3.decoder.ffmpeg' +android { + namespace 'androidx.media3.decoder.ffmpeg' + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } +} // Configure the native build only if ffmpeg is present to avoid gradle sync // failures if ffmpeg hasn't been built according to the README instructions. diff --git a/libraries/decoder_ffmpeg/src/main/jni/CMakeLists.txt b/libraries/decoder_ffmpeg/src/main/jni/CMakeLists.txt index fe74c78048..819cb5baa4 100644 --- a/libraries/decoder_ffmpeg/src/main/jni/CMakeLists.txt +++ b/libraries/decoder_ffmpeg/src/main/jni/CMakeLists.txt @@ -56,3 +56,7 @@ target_link_libraries(ffmpegJNI if(ANDROID_ABI STREQUAL "arm64-v8a") target_link_options(ffmpegJNI PRIVATE "-Wl,-Bsymbolic") endif() + +# Enable 16 KB ELF alignment. +target_link_options(ffmpegJNI + PRIVATE "-Wl,-z,max-page-size=16384") diff --git a/libraries/decoder_flac/build.gradle b/libraries/decoder_flac/build.gradle index 0da6fa2e52..a7fa55ee40 100644 --- a/libraries/decoder_flac/build.gradle +++ b/libraries/decoder_flac/build.gradle @@ -23,6 +23,14 @@ android { } androidTest.assets.srcDir '../test_data/src/test/assets' } + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } } dependencies { diff --git a/libraries/decoder_flac/src/main/jni/Android.mk b/libraries/decoder_flac/src/main/jni/Android.mk index 69520a16e5..b19d169111 100644 --- a/libraries/decoder_flac/src/main/jni/Android.mk +++ b/libraries/decoder_flac/src/main/jni/Android.mk @@ -35,4 +35,6 @@ LOCAL_CFLAGS += -D_REENTRANT -DPIC -DU_COMMON_IMPLEMENTATION -fPIC -DHAVE_SYS_PA LOCAL_CFLAGS += -O3 -funroll-loops -finline-functions -DFLAC__NO_ASM '-DFLAC__HAS_OGG=0' LOCAL_LDLIBS := -llog -lz -lm +# Enable 16 KB ELF alignment. +LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" include $(BUILD_SHARED_LIBRARY) diff --git a/libraries/decoder_iamf/build.gradle b/libraries/decoder_iamf/build.gradle index f366047d33..17970629bc 100644 --- a/libraries/decoder_iamf/build.gradle +++ b/libraries/decoder_iamf/build.gradle @@ -27,6 +27,14 @@ android { } } } + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } } // Configure the native build only if libiamf is present to avoid gradle sync diff --git a/libraries/decoder_iamf/src/main/jni/CMakeLists.txt b/libraries/decoder_iamf/src/main/jni/CMakeLists.txt index e94494576b..32a65ed1ac 100644 --- a/libraries/decoder_iamf/src/main/jni/CMakeLists.txt +++ b/libraries/decoder_iamf/src/main/jni/CMakeLists.txt @@ -44,3 +44,7 @@ target_link_libraries(iamfJNI PRIVATE android PRIVATE iamf PRIVATE ${android_log_lib}) + +# Enable 16 KB ELF alignment. +target_link_options(iamfJNI + PRIVATE "-Wl,-z,max-page-size=16384") diff --git a/libraries/decoder_opus/build.gradle b/libraries/decoder_opus/build.gradle index af01cad013..763eba00b1 100644 --- a/libraries/decoder_opus/build.gradle +++ b/libraries/decoder_opus/build.gradle @@ -23,6 +23,14 @@ android { } androidTest.assets.srcDir '../test_data/src/test/assets' } + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } } dependencies { diff --git a/libraries/decoder_opus/src/main/jni/Android.mk b/libraries/decoder_opus/src/main/jni/Android.mk index 0b06d9ecd8..676774ed49 100644 --- a/libraries/decoder_opus/src/main/jni/Android.mk +++ b/libraries/decoder_opus/src/main/jni/Android.mk @@ -30,4 +30,6 @@ LOCAL_CPP_EXTENSION := .cc LOCAL_SRC_FILES := opus_jni.cc LOCAL_LDLIBS := -llog -lz -lm LOCAL_STATIC_LIBRARIES := libopus +# Enable 16 KB ELF alignment. +LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" include $(BUILD_SHARED_LIBRARY) diff --git a/libraries/decoder_vp9/build.gradle b/libraries/decoder_vp9/build.gradle index d7a29e5427..81dd71500b 100644 --- a/libraries/decoder_vp9/build.gradle +++ b/libraries/decoder_vp9/build.gradle @@ -23,6 +23,14 @@ android { } androidTest.assets.srcDir '../test_data/src/test/assets' } + + // TODO(Internal: b/372449691): Remove packagingOptions once AGP is updated + // to version 8.5.1 or higher. + packagingOptions { + jniLibs { + useLegacyPackaging true + } + } } dependencies { diff --git a/libraries/decoder_vp9/src/main/jni/Android.mk b/libraries/decoder_vp9/src/main/jni/Android.mk index cb7571a1b0..0794feb730 100644 --- a/libraries/decoder_vp9/src/main/jni/Android.mk +++ b/libraries/decoder_vp9/src/main/jni/Android.mk @@ -32,6 +32,8 @@ LOCAL_SRC_FILES := vpx_jni.cc LOCAL_LDLIBS := -llog -lz -lm -landroid LOCAL_SHARED_LIBRARIES := libvpx LOCAL_STATIC_LIBRARIES := cpufeatures +# Enable 16 KB ELF alignment. +LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" include $(BUILD_SHARED_LIBRARY) $(call import-module,android/cpufeatures)