Mulai menggunakan Media Enhancement API

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) }
}