Начните работу с API для улучшения качества мультимедиа.

API улучшения медиафайлов — это мощный инструмент, использующий ускорение графического процессора на устройстве для высококачественного улучшения изображений с низкой задержкой. Он включает в себя такие функции, как автоматическое тональное отображение, устранение размытия, шумоподавление и масштабирование.

Перед инициализацией API необходимо настроить зависимости проекта и указать требования к аппаратному ускорению в манифесте. Пропуск этих настроек является основной причиной ошибок выполнения GLOBAL_INIT_FAILED .

Зависимости Gradle

Добавьте следующие зависимости в файл app/build.gradle.kts . Для обеспечения асинхронного, неблокирующего выполнения включите корутины Kotlin и Jetpack Media3 для обработки аппаратных поверхностей.

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

Подробную информацию о пакете play-services-media-effect-enhancement можно найти в репозитории Maven компании Google.

Мы также рекомендуем использовать сопрограммы Kotlin для асинхронного управления сессиями расширения.

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

Добавьте следующие элементы внутрь тега <application> в файле 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 предоставляет необходимые вычислительные библиотеки для включения нейронного ускорения на NPU и GPU для задач улучшения медиаконтента. Указание этих библиотек в манифесте является обязательным условием для использования аппаратного ускорения API, что крайне важно для высококачественного улучшения с низкой задержкой. Для получения дополнительной информации об OpenCL см. раздел «Реализации OpenCL» .

OpenGL ES предоставляет необходимые нативные графические библиотеки для высокопроизводительного рендеринга результатов обработки мультимедиа. Указание этих библиотек в манифесте необходимо для обеспечения эффективного отображения обработанного мультимедиа на поверхностях с аппаратным ускорением. Для получения дополнительной информации об OpenGL см. обзор документации по API OpenGL .

Для предотвращения узких мест в конвейере рендеринга Android необходимо аппаратное ускорение. Хотя оно включено по умолчанию для приложений, ориентированных на API 14 и выше, явно установите android:hardwareAccelerated="true" внутри тегов <activity> .

Совместимость устройства и настройка модуля

Сервисы Google Play динамически предоставляют модели машинного обучения для экономии места, занимаемого APK-файлом изначально. Перед внесением улучшений приложение должно использовать EnhancementClient для проверки поддержки оборудования и обеспечения загрузки и кэширования необходимых весов модели локально. Это одноразовая процедура для каждого устройства.

Используя suspendCancellableCoroutine , вы можете обернуть клиентские коллбэки, основанные на задачах, в стандартные функции приостановки Kotlin для более чистого и последовательного выполнения:

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