Memahami siklus proses peningkatan kualitas media dalam mode Surface

Media Enhancement API menyediakan solusi AI di perangkat yang hemat latensi, menjaga privasi, dan memanfaatkan akselerasi hardware untuk memberikan peningkatan kualitas media yang tinggi tanpa pembengkakan APK. Untuk mengetahui informasi selengkapnya, lihat Memahami kemampuan peningkatan kualitas media.

Diagram arsitektur berikut menunjukkan siklus proses eksekusi mode platform asinkron Media Enhancement API. Mode ini secara langsung menautkan buffer hardware untuk menghilangkan hambatan performa saat menyalin frame yang tidak dikompresi secara dua arah antara buffer memori CPU dan GPU.

Diagram yang menggambarkan siklus proses asinkron 7 langkah dari API Peningkatan Media dari permukaan ke permukaan.
Gambar 1. Siklus proses eksekusi mode permukaan asinkron dan tujuh langkah yang dapat ditindaklanjuti dalam pipeline peningkatan kualitas.

Pipeline peningkatan diimplementasikan melalui langkah-langkah berikut:

Tahap 1. Menyiapkan sesi peningkatan kualitas

1. Menyediakan platform input: Aplikasi Anda menyediakan framework peningkatan kualitas dengan handle platform input untuk mengakses frame yang akan diproses.

2. Setel permukaan output: Aplikasi Anda menyediakan dan mengikat target rendering (seperti SurfaceView atau TextureView) langsung ke framework.

Tahap 2. Menghasilkan frame input

3. Siapkan media dasar: Aplikasi Anda mengambil media dasar yang tidak dikompresi. Misalnya, dengan membaca file dari disk lokal.

4. Menyuntikkan data frame: Aplikasi Anda menulis payload gambar mentah langsung ke pipeline platform input terikat.

Tahap 3. Memproses dan meningkatkan kualitas

5. Menjalankan pemrosesan AI: Framework memproses frame di GPU atau NPU perangkat, menerapkan peningkatan machine learning seperti pemetaan warna, penghilangan blur, atau peningkatan kualitas.

6. Menayangkan frame yang ditingkatkan: Mesin menghasilkan frame yang ditingkatkan dan beresolusi penuh langsung ke permukaan output terikat.

Fase 4. Menampilkan atau menyimpan hasil

7. Menyelesaikan output: Aplikasi Anda menerima buffer aliran hardware yang diproses untuk merendernya di UI atau menyimpannya kembali ke penyimpanan.

EnhancementSession adalah objek konteks berat yang mempertahankan pipeline memori GPU atau NPU yang persisten. Fungsi ini mengalokasikan RAM video (VRAM) khusus dan menangani sistem native. Untuk mencegah kebocoran memori parah dan potensi error OutOfMemoryError, patuhi prinsip siklus proses berikut:

  • Instansiasi lambat: Jangan membuat sesi hingga pengguna memulai tindakan peningkatan.
  • Penggunaan ulang strategis: Pertahankan dan gunakan kembali satu instance sesi saat memproses aliran atau frame dengan konfigurasi yang identik (dimensi dan opsi yang diaktifkan).
  • Penghapusan perintah: Panggil session.release() segera saat tugas visual berakhir untuk membebaskan sumber daya hardware bersama.

Melakukan inisialisasi mesin peningkatan

Metode ini mengatur pemeriksaan dua langkah. Verifikasi apakah hardware perangkat mendukung akselerasi, lalu pastikan modul machine learning yang diperlukan ada.

Menjalankan ini sebagai langkah prasyarat mencegah kegagalan inisialisasi runtime dengan memvalidasi kemampuan sebelum aplikasi Anda mencoba memproses media.

class MediaSetupViewModel(application: Application) : AndroidViewModel(application) {
    private val enhancementClient = Enhancement.getClient(application)
    fun initializeEnhancementEngine() {
        viewModelScope.launch {
            try {
                // 1. Verify hardware capability
                val isSupported = enhancementClient.isDeviceSupportedAsync()
                if (!isSupported) {
                    notifyUiDeviceIncompatible()
                    return@launch
                }
                // 2. Verify and download the Google Play services ML modules
                val isInstalled = enhancementClient.isModuleInstalledAsync()
                if (!isInstalled) {
                    notifyUiDownloadingModels()
                    enhancementClient.installModule().await() 
                }
                notifyUiEngineReady()
            } catch (e: Exception) {
                // Handle potential errors during session creation or image
                // processing.
                handleInitializationError(e)
            }
        }
    }
}

Penerapan: Mode permukaan (masuk permukaan, keluar permukaan)

Mode eksekusi Surface (EnhancementMode.SURFACE) menghindari overhead performa pemindahan frame antara buffer memori CPU dan GPU. Sebagai gantinya, library peningkatan kualitas memetakan buffer hardware mentah secara langsung, membaca frame dari input Surface, memprosesnya secara native, dan menyalurkannya langsung ke output Surface.

Snapshot permukaan frame tunggal

Metode ini digunakan untuk menerapkan efek secara efisien ke frame gambar yang didekode hardware tunggal.

// Provisions input Surface (for example, ImageReader) and output Surface (for
// example, SurfaceView)
val inputSurface: Surface = imageReader.surface
val outputSurface: Surface = surfaceView.holder.surface
// 1. Configure parameters for SURFACE mode
val surfaceOptions = EnhancementOptions(
    imageReader.width,
    imageReader.height,
    EnhancementMode.SURFACE,
    enableTonemap = true,
    enableDeblurDenoise = true,
    enableFaceDetection = false
).also {
    // 2. Bind hardware surfaces
    it.setInputSurface(inputSurface)
    it.setOutputSurface(outputSurface)
}

// 3. Create the session to process the hardware frame
val singleFrameSession = enhancementClient.createSessionAsync(surfaceOptions, executor)
// The API processes the single frame. Upon completion, release the session.
singleFrameSession.release()