Tìm hiểu vòng đời của tính năng nâng cao nội dung nghe nhìn ở chế độ Surface

Media Enhancement API cung cấp một giải pháp AI có độ trễ thấp, bảo đảm quyền riêng tư và trên thiết bị, tận dụng tính năng tăng tốc phần cứng để mang lại những cải tiến chất lượng cao cho nội dung nghe nhìn mà không làm tăng kích thước APK. Để biết thêm thông tin, hãy xem bài viết Tìm hiểu các tính năng nâng cao nội dung nghe nhìn.

Sơ đồ cấu trúc sau đây cho thấy vòng đời thực thi chế độ bề mặt không đồng bộ của Media Enhancement API. Chế độ này liên kết trực tiếp các vùng đệm phần cứng để loại bỏ tình trạng điểm tắc nghẽn hiệu suất khi sao chép các khung hình chưa nén qua lại giữa vùng đệm bộ nhớ CPU và GPU.

Sơ đồ minh hoạ vòng đời 7 bước không đồng bộ từ nền tảng này sang nền tảng khác của API Cải tiến nội dung nghe nhìn.
Hình 1. Vòng đời thực thi chế độ bề mặt không đồng bộ và 7 bước có thể thực hiện của quy trình nâng cao.

Quy trình nâng cao được triển khai thông qua các bước sau:

Giai đoạn 1. Thiết lập phiên cải tiến

1. Cung cấp giao diện đầu vào: Ứng dụng của bạn cung cấp cho khung tăng cường một tay cầm giao diện đầu vào để truy cập vào các khung hình để xử lý.

2. Đặt nền tảng đầu ra: Ứng dụng của bạn cung cấp và liên kết các mục tiêu kết xuất (chẳng hạn như SurfaceView hoặc TextureView) trực tiếp với khung.

Giai đoạn 2. Tạo một khung hình đầu vào

3. Chuẩn bị nội dung nghe nhìn cơ bản: Ứng dụng của bạn truy xuất nội dung nghe nhìn cơ bản chưa nén. Ví dụ: bằng cách đọc một tệp từ ổ đĩa cục bộ.

4. Chèn dữ liệu khung hình: Ứng dụng của bạn ghi tải trọng hình ảnh thô trực tiếp vào quy trình bề mặt đầu vào được liên kết.

Giai đoạn 3. Xử lý và cải thiện

5. Thực thi quy trình xử lý bằng AI: Khung này xử lý khung hình trên GPU hoặc NPU của thiết bị, áp dụng các tính năng nâng cao bằng công nghệ học máy như ánh xạ tông màu, khử mờ hoặc tăng tỷ lệ.

6. Phân phối khung hình nâng cao: Công cụ này xuất khung hình nâng cao có độ phân giải đầy đủ trực tiếp đến bề mặt đầu ra được liên kết.

Giai đoạn 4. Hiển thị hoặc lưu kết quả

7. Hoàn tất đầu ra: Ứng dụng của bạn nhận được vùng đệm luồng phần cứng đã xử lý để hiển thị trong giao diện người dùng hoặc lưu lại vào bộ nhớ.

EnhancementSession là một đối tượng bối cảnh có dung lượng lớn, duy trì một quy trình bộ nhớ GPU hoặc NPU liên tục. Nó phân bổ RAM video (VRAM) chuyên dụng và các trình xử lý hệ thống gốc. Để ngăn chặn tình trạng rò rỉ bộ nhớ nghiêm trọng và sự cố OutOfMemoryError tiềm ẩn, hãy tuân thủ các nguyên tắc sau về vòng đời:

  • Khởi tạo trễ: Không tạo phiên cho đến khi người dùng bắt đầu một thao tác nâng cao.
  • Sử dụng lại một cách chiến lược: Duy trì và sử dụng lại một phiên bản phiên duy nhất khi xử lý các luồng hoặc khung hình có cấu hình giống nhau (kích thước và các lựa chọn được bật/tắt).
  • Phân tích cú pháp câu lệnh: Gọi session.release() ngay khi các tác vụ trực quan kết thúc để giải phóng tài nguyên phần cứng dùng chung.

Khởi chạy công cụ nâng cao

Phương thức này điều phối quy trình kiểm tra gồm hai bước. Thư viện này xác minh xem phần cứng của thiết bị có hỗ trợ tính năng tăng tốc hay không, sau đó đảm bảo có các mô-đun học máy cần thiết.

Việc chạy bước này như một bước tiên quyết sẽ ngăn chặn lỗi khởi tạo thời gian chạy bằng cách xác thực các chức năng trước khi ứng dụng của bạn cố gắng xử lý nội dung nghe nhìn.

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

Triển khai: Chế độ bề mặt (bề mặt bên trong, bề mặt bên ngoài)

Chế độ thực thi Surface (EnhancementMode.SURFACE) giúp tránh được hiệu suất hao tổn khi di chuyển khung hình giữa vùng đệm bộ nhớ CPU và GPU. Thay vào đó, thư viện nâng cao sẽ ánh xạ trực tiếp các vùng đệm phần cứng thô, đọc các khung hình từ một Surface đầu vào, xử lý các khung hình đó một cách tự nhiên và truyền thẳng đến một Surface đầu ra.

Ảnh chụp nhanh bề mặt một khung hình

Phương thức này được dùng để áp dụng hiệu quả các hiệu ứng cho một khung hình ảnh được giải mã bằng phần cứng.

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