Media Enhancement API adalah alat canggih yang menggunakan akselerasi GPU di perangkat untuk melakukan peningkatan kualitas gambar yang berlatensi rendah dan berkualitas tinggi. Fitur ini mencakup pemetaan tone otomatis, penghilangan blur, penghilangan derau, dan peningkatan kualitas.
Sebelum menginisialisasi API, Anda harus mengonfigurasi dependensi project dan
mendeklarasikan persyaratan akselerasi hardware dalam manifes. Melewati konfigurasi ini adalah penyebab utama error runtime GLOBAL_INIT_FAILED.
Dependensi Gradle
Tambahkan dependensi berikut ke file app/build.gradle.kts Anda. Untuk
memfasilitasi eksekusi asinkron yang tidak memblokir, sertakan coroutine Kotlin dan
Jetpack Media3 untuk penanganan platform hardware.
dependencies {
// Google Play services Media Enhancement Library (Beta)
implementation("com.google.android.gms:play-services-media-effect-enhancement:16.0.0-beta04")
}
Lihat detail paket untuk play-services-media-effect-enhancement di
repositori Maven Google.
Sebaiknya gunakan juga coroutine Kotlin untuk mengelola sesi peningkatan kualitas secara asinkron.
// Kotlin coroutines for asynchronous API handling
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3")
Persyaratan manifes Android
Tambahkan elemen berikut di dalam tag <application> pada file
AndroidManifest.xml Anda:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<!-- 1. Google Play services version for runtime compatibility checks -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<!-- 2. Declare OpenCL compute libraries for NPU/GPU neural acceleration -->
<uses-native-library android:name="libOpenCL.so" android:required="false" />
<uses-native-library android:name="libOpenCL-car.so" android:required="false" />
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false" />
<!-- 3. Declare OpenGL ES for high-performance graphics rendering -->
<uses-native-library android:name="libGLESv2.so" android:required="false" />
<uses-native-library android:name="libGLESv3.so" android:required="false" />
</application>
</manifest>
OpenCL menyediakan library komputasi native yang diperlukan untuk mengaktifkan akselerasi neural NPU dan GPU untuk tugas Peningkatan Kualitas Media. Mendeklarasikan library ini di manifes Anda adalah prasyarat agar API dapat memanfaatkan akselerasi hardware, yang penting untuk melakukan peningkatan kualitas tinggi dan latensi rendah. Untuk mengetahui informasi selengkapnya tentang OpenCL, lihat Implementasi OpenCL.
OpenGL ES menyediakan library grafis native yang diperlukan untuk rendering berperforma tinggi dari output peningkatan kualitas media. Mendeklarasikan pustaka ini dalam manifes Anda sangat penting untuk memastikan bahwa pipeline rendering dapat secara efektif menampilkan media yang diproses di platform dengan akselerasi hardware. Untuk mengetahui informasi tentang OpenGL, lihat Ringkasan dokumentasi OpenGL API.
Pipeline rendering Android harus diakselerasi hardware untuk mencegah
keterbatasan. Meskipun diaktifkan secara default untuk aplikasi yang menargetkan API 14+, tetapkan
android:hardwareAccelerated="true" secara eksplisit dalam tag <activity> Anda.
Kompatibilitas perangkat dan penyiapan modul
Layanan Google Play mengirimkan model machine learning secara dinamis untuk menghemat ruang penyimpanan APK awal Anda. Sebelum melakukan peningkatan, aplikasi
harus menggunakan EnhancementClient untuk memverifikasi dukungan hardware dan memastikan
bobot model yang diperlukan didownload dan di-cache secara lokal. Proses ini hanya dilakukan satu kali per perangkat.
Dengan suspendCancellableCoroutine, Anda dapat membungkus callback klien berbasis tugas dalam fungsi penangguhan Kotlin standar untuk eksekusi berurutan yang lebih bersih:
// Verifies if host hardware supports NPU/GPU acceleration
suspend fun EnhancementClient.isDeviceSupportedAsync(): Boolean = suspendCancellableCoroutine { continuation ->
this.isDeviceSupported()
.addOnSuccessListener { result -> continuation.resume(result) }
.addOnFailureListener { exception -> continuation.resumeWithException(exception) }
}
// Verifies the presence of required neural network models
suspend fun EnhancementClient.isModuleInstalledAsync(): Boolean = suspendCancellableCoroutine { continuation ->
this.isModuleInstalled()
.addOnSuccessListener { result -> continuation.resume(result) }
.addOnFailureListener { exception -> continuation.resumeWithException(exception) }
}