Media Enhancement API, yüksek kaliteli ve düşük gecikmeli görüntü iyileştirmeleri yapmak için cihaz üzerinde GPU hızlandırmayı kullanan güçlü bir araçtır. Otomatik ton eşleme, bulanıklık giderme, gürültü azaltma ve ölçek büyütme gibi özellikler bu modda yer alır.
API'yi başlatmadan önce proje bağımlılıklarınızı yapılandırmanız ve donanım hızlandırma gereksinimlerini manifestinizde belirtmeniz gerekir. Bu yapılandırmaların atlanması, GLOBAL_INIT_FAILED çalışma zamanı hatalarının temel nedenidir.
Gradle bağımlılıkları
app/build.gradle.kts dosyanıza aşağıdaki bağımlılıkları ekleyin. Eşzamansız ve engellemeyen yürütmeyi kolaylaştırmak için donanım yüzeyi işleme amacıyla Kotlin coroutines ve Jetpack Media3'ü ekleyin.
dependencies {
// Google Play services Media Enhancement Library (Beta)
implementation("com.google.android.gms:play-services-media-effect-enhancement:16.0.0-beta04")
}
Google'ın Maven deposunda play-services-media-effect-enhancement ile ilgili paket ayrıntılarını görün.
Geliştirme oturumlarını eşzamansız olarak yönetmek için Kotlin eş yordamlarını kullanmanızı da öneririz.
// 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")
Android manifest şartları
AndroidManifest.xml dosyanızın <application> etiketi içine aşağıdaki öğeleri ekleyin:
<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, NPU ve GPU sinirsel hızlandırmanın Medya Geliştirme görevlerinde etkinleştirilmesi için gereken yerel işlem kitaplıklarını sağlar. Bu kitaplıkları manifestinizde beyan etmek, API'nin donanım hızlandırmadan yararlanması için ön koşuldur. Donanım hızlandırma, yüksek kaliteli ve düşük gecikmeli geliştirmeler yapmak için gereklidir. OpenCL hakkında daha fazla bilgi için OpenCL uygulamaları bölümüne bakın.
OpenGL ES, medya geliştirme çıkışlarının yüksek performanslı şekilde oluşturulması için gereken yerel grafik kitaplıklarını sağlar. Bu kitaplıkları manifest dosyanızda belirtmek, oluşturma ardışık düzeninin işlenmiş medyayı donanım hızlandırmalı yüzeylerde etkili bir şekilde görüntüleyebilmesini sağlamak için gereklidir. OpenGL hakkında bilgi için OpenGL API belgelerine genel bakış başlıklı makaleyi inceleyin.
Performans sorunlarını önlemek için Android oluşturma ardışık düzeni donanım hızlandırmalı olmalıdır. API 14 ve üzeri sürümleri hedefleyen uygulamalarda varsayılan olarak etkin olsa da android:hardwareAccelerated="true" değerini <activity> etiketlerinizde açıkça ayarlayın.
Cihaz uyumluluğu ve modül kurulumu
Google Play Hizmetleri, makine öğrenimi modellerini dinamik olarak sunarak ilk APK depolama alanınızdan tasarruf etmenizi sağlar. Uygulama, iyileştirmeleri gerçekleştirmeden önce EnhancementClient kullanarak donanım desteğini doğrulamalı ve gerekli model ağırlıklarının indirilip yerel olarak önbelleğe alınmasını sağlamalıdır. Bu işlem, cihaz başına tek seferliktir.
suspendCancellableCoroutine kullanarak, daha temiz ve sıralı yürütme için göreve dayalı istemci geri çağırmalarını standart Kotlin askıya alma işlevlerine sarmalayabilirsiniz:
// 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) }
}