Làm quen với Media Enhancement API

Media Enhancement API là một công cụ mạnh mẽ sử dụng tính năng tăng tốc GPU trên thiết bị để thực hiện các hoạt động cải thiện hình ảnh chất lượng cao và có độ trễ thấp. Trong đó có các tính năng như ánh xạ tông màu tự động, giảm mờ, giảm nhiễu và tăng độ phân giải.

Trước khi khởi chạy API, bạn phải định cấu hình các phần phụ thuộc của dự án và khai báo các yêu cầu về tính năng tăng tốc phần cứng trong tệp kê khai. Bỏ qua các cấu hình này là nguyên nhân chính gây ra lỗi thời gian chạy GLOBAL_INIT_FAILED.

Phần phụ thuộc Gradle

Thêm các phần phụ thuộc sau vào tệp app/build.gradle.kts. Để tạo điều kiện cho việc thực thi không đồng bộ, không chặn, hãy thêm các coroutine Kotlin và Jetpack Media3 để xử lý giao diện phần cứng.

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

Xem thông tin chi tiết về gói play-services-media-effect-enhancement trong kho lưu trữ Maven của Google.

Bạn cũng nên sử dụng coroutine của Kotlin để quản lý các phiên nâng cao không đồng bộ.

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

Yêu cầu đối với tệp kê khai Android

Thêm các phần tử sau vào bên trong thẻ <application> của tệp 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 cung cấp các thư viện điện toán gốc cần thiết để bật tính năng tăng tốc mạng nơ-ron NPU và GPU cho các tác vụ Nâng cao nội dung nghe nhìn. Việc khai báo các thư viện này trong tệp kê khai là điều kiện tiên quyết để API tận dụng tính năng tăng tốc phần cứng. Đây là điều cần thiết để thực hiện các hoạt động nâng cao chất lượng cao với độ trễ thấp. Để biết thêm thông tin về OpenCL, hãy xem phần Các cách triển khai OpenCL.

OpenGL ES cung cấp các thư viện đồ hoạ gốc cần thiết để kết xuất hiệu suất cao của các đầu ra nâng cao nội dung nghe nhìn. Việc khai báo các thư viện này trong tệp kê khai là điều cần thiết để đảm bảo rằng quy trình kết xuất có thể hiển thị hiệu quả nội dung nghe nhìn đã xử lý trên các bề mặt được tăng tốc phần cứng. Để biết thông tin về OpenGL, hãy xem Tổng quan về tài liệu API OpenGL.

Quy trình kết xuất Android phải được tăng tốc phần cứng để tránh tình trạng tắc nghẽn. Mặc dù được bật theo mặc định cho các ứng dụng nhắm đến API 14 trở lên, nhưng hãy đặt android:hardwareAccelerated="true" một cách rõ ràng trong thẻ <activity>.

Khả năng tương thích với thiết bị và chế độ thiết lập mô-đun

Dịch vụ Google Play phân phối các mô hình học máy một cách linh hoạt để tiết kiệm không gian lưu trữ APK ban đầu của bạn. Trước khi thực hiện các hoạt động nâng cao, ứng dụng phải sử dụng EnhancementClient để xác minh khả năng hỗ trợ phần cứng và đảm bảo các trọng số mô hình cần thiết được tải xuống và lưu vào bộ nhớ đệm cục bộ. Đây là quy trình chỉ cần thực hiện một lần cho mỗi thiết bị.

Khi sử dụng suspendCancellableCoroutine, bạn có thể bao bọc các lệnh gọi lại của ứng dụng dựa trên tác vụ trong các hàm tạm ngưng Kotlin tiêu chuẩn để thực thi tuần tự và rõ ràng hơn:

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