Die Media Enhancement API ist ein leistungsstarkes Tool, das die On-Device-GPU-Beschleunigung nutzt, um Bildoptimierung in hoher Qualität und mit geringer Latenz durchzuführen. Dazu gehören Funktionen wie automatisches Tone-Mapping, Entschärfen von Unschärfe, Rauschunterdrückung und Upscaling.
Bevor Sie die API initialisieren, müssen Sie die Projektabhängigkeiten konfigurieren und die Anforderungen an die Hardwarebeschleunigung in Ihrem Manifest deklarieren. Das Überspringen dieser Konfigurationen ist die Hauptursache für GLOBAL_INIT_FAILED-Laufzeitfehler.
Gradle-Abhängigkeiten
Fügen Sie der Datei app/build.gradle.kts die folgenden Abhängigkeiten hinzu. Um die asynchrone, nicht blockierende Ausführung zu ermöglichen, sind Kotlin-Coroutinen und Jetpack Media3 für die Verarbeitung von Hardware-Surfaces enthalten.
dependencies {
// Google Play services Media Enhancement Library (Beta)
implementation("com.google.android.gms:play-services-media-effect-enhancement:16.0.0-beta04")
}
Weitere Informationen zum Paket play-services-media-effect-enhancement finden Sie im Maven-Repository von Google.
Wir empfehlen außerdem, Kotlin-Coroutinen für die asynchrone Verwaltung der Optimierungssitzungen zu verwenden.
// 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")
Anforderungen an das Android-Manifest
Fügen Sie die folgenden Elemente in das <application>-Tag Ihrer AndroidManifest.xml-Datei ein:
<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 bietet die nativen Compute-Bibliotheken, die für die neuronale Beschleunigung von Media Enhancement-Aufgaben auf NPU und GPU erforderlich sind. Die Deklaration dieser Bibliotheken in Ihrem Manifest ist eine Voraussetzung dafür, dass die API die Hardwarebeschleunigung nutzen kann. Dies ist für die Durchführung hochwertiger Verbesserungen mit niedriger Latenz unerlässlich. Weitere Informationen zu OpenCL finden Sie unter OpenCL-Implementierungen.
OpenGL ES bietet die nativen Grafikbibliotheken, die für das leistungsstarke Rendern von Media Enhancement-Ausgaben erforderlich sind. Die Deklaration dieser Bibliotheken in Ihrem Manifest ist unerlässlich, damit die Rendering-Pipeline verarbeitete Medien auf hardwarebeschleunigten Oberflächen effektiv darstellen kann. Informationen zu OpenGL finden Sie in der Übersicht über die OpenGL-API-Dokumentation.
Die Android-Rendering-Pipeline muss hardwarebeschleunigt sein, um Engpässe zu vermeiden. Die Funktion ist standardmäßig für Apps aktiviert, die auf API 14 oder höher ausgerichtet sind. Sie müssen android:hardwareAccelerated="true" jedoch explizit in Ihren <activity>-Tags festlegen.
Gerätekompatibilität und Modulkonfiguration
Die Google Play-Dienste stellen Modelle für maschinelles Lernen dynamisch bereit, um den ursprünglichen Speicherplatz Ihres APKs zu schonen. Bevor die Anwendung Verbesserungen vornimmt, muss sie EnhancementClient verwenden, um die Hardwareunterstützung zu prüfen und dafür zu sorgen, dass die erforderlichen Modellgewichte heruntergeladen und lokal im Cache gespeichert werden. Das ist ein einmaliger Vorgang pro Gerät.
Mit suspendCancellableCoroutine können Sie die aufgabenbasierten Client-Callbacks in standardmäßige Kotlin-Funktionen einbetten, um eine übersichtlichere, sequenzielle Ausführung zu ermöglichen:
// 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) }
}