Inizia a utilizzare le API Media Enhancement

L'API Media Enhancement è un potente strumento che utilizza l'accelerazione GPU sul dispositivo per eseguire miglioramenti delle immagini di alta qualità e a bassa latenza. Sono incluse funzionalità come la mappatura automatica dei toni, la rimozione della sfocatura, la riduzione del rumore e l'upscaling.

Prima di inizializzare l'API, devi configurare le dipendenze del progetto e dichiarare i requisiti di accelerazione hardware nel manifest. L'omissione di queste configurazioni è la causa principale degli errori di runtime GLOBAL_INIT_FAILED.

Dipendenze Gradle

Aggiungi le seguenti dipendenze al file app/build.gradle.kts. Per facilitare l'esecuzione asincrona e non bloccante, includi le coroutine Kotlin e Jetpack Media3 per la gestione delle superfici hardware.

dependencies {
    // Google Play services Media Enhancement Library (Beta)
    implementation("com.google.android.gms:play-services-media-effect-enhancement:16.0.0-beta04")
}

Consulta i dettagli del pacchetto per play-services-media-effect-enhancement in nel repository Maven di Google.

Ti consigliamo inoltre di utilizzare le coroutine Kotlin per gestire in modo asincrono le sessioni di miglioramento.

// 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")

Requisiti del manifest Android

Aggiungi i seguenti elementi all'interno del tag <application> del file AndroidManifest.xml:

<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 fornisce le librerie di calcolo native necessarie per abilitare l'accelerazione neurale NPU e GPU per le attività di Media Enhancement. La dichiarazione di queste librerie nel manifest è un prerequisito per l'utilizzo dell'accelerazione hardware da parte dell'API, essenziale per eseguire miglioramenti di alta qualità e a bassa latenza. Per saperne di più su OpenCL, consulta Implementazioni OpenCL.

OpenGL ES fornisce le librerie grafiche native necessarie per il rendering ad alte prestazioni degli output di Media Enhancement. La dichiarazione di queste librerie nel manifest è essenziale per garantire che la pipeline di rendering possa visualizzare in modo efficace i contenuti multimediali elaborati sulle superfici con accelerazione hardware. Per informazioni su OpenGL, consulta la panoramica della documentazione dell'API OpenGL.

La pipeline di rendering di Android deve essere accelerata dall'hardware per evitare colli di bottiglia. Anche se è abilitata per impostazione predefinita per le app che utilizzano l'API di livello 14 o superiore, imposta esplicitamente android:hardwareAccelerated="true" all'interno dei <activity> tag.

Compatibilità dei dispositivi e configurazione dei moduli

Google Play Services fornisce dinamicamente i modelli di machine learning per conservare lo spazio di archiviazione iniziale dell'APK. Prima di eseguire i miglioramenti, l'applicazione deve utilizzare EnhancementClient per verificare il supporto hardware e assicurarsi che i pesi del modello necessari vengano scaricati e memorizzati nella cache in locale. Si tratta di un processo che viene eseguito una sola volta per dispositivo.

Utilizzando suspendCancellableCoroutine, puoi racchiudere i callback client basati su attività nelle funzioni di sospensione Kotlin standard per un'esecuzione sequenziale più pulita:

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