เริ่มต้นใช้งาน Media Enhancement API

Media Enhancement API เป็นเครื่องมือที่มีประสิทธิภาพซึ่งใช้การเร่งความเร็ว GPU ในอุปกรณ์ เพื่อปรับปรุงรูปภาพคุณภาพสูงที่มีเวลาในการตอบสนองต่ำ ซึ่งรวมถึงฟีเจอร์ต่างๆ เช่น การแมปโทนสีอัตโนมัติ การปรับให้คมชัด การลดสัญญาณรบกวน และ การเพิ่มความละเอียด

ก่อนเริ่มต้น API คุณต้องกำหนดค่าการอ้างอิงของโปรเจ็กต์และ ประกาศข้อกำหนดการเร่งฮาร์ดแวร์ในไฟล์ Manifest การข้ามการกำหนดค่าเหล่านี้ เป็นสาเหตุหลักของGLOBAL_INIT_FAILEDข้อผิดพลาดขณะรันไทม์

ทรัพยากร Dependency ของ Gradle

เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ 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 Coroutines เพื่อจัดการเซสชันการเพิ่มประสิทธิภาพแบบอะซิงโครนัส

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

ข้อกำหนดของไฟล์ Manifest ของ 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 สำหรับงานการปรับปรุงสื่อ การประกาศไลบรารีเหล่านี้ในไฟล์ Manifest เป็นข้อกำหนดเบื้องต้นสำหรับ API ในการใช้ประโยชน์จากการเร่งด้วยฮาร์ดแวร์ ซึ่งจำเป็นต่อการปรับปรุงคุณภาพสูงที่มีเวลาในการตอบสนองต่ำ ดูข้อมูลเพิ่มเติมเกี่ยวกับ OpenCL ได้ที่การใช้งาน OpenCL

OpenGL ES มีไลบรารีกราฟิกแบบเนทีฟที่จำเป็นสำหรับการแสดงผลเอาต์พุตการปรับปรุงสื่อที่มีประสิทธิภาพสูง การประกาศไลบรารีเหล่านี้ในไฟล์ Manifest เป็นสิ่งจำเป็นเพื่อให้มั่นใจว่าไปป์ไลน์การแสดงผลจะแสดงสื่อที่ประมวลผลแล้วบนพื้นผิวที่เร่งด้วยฮาร์ดแวร์ได้อย่างมีประสิทธิภาพ ดูข้อมูลเกี่ยวกับ OpenGL ได้ที่ภาพรวมเอกสารประกอบเกี่ยวกับ OpenGL API

ไปป์ไลน์การแสดงผลของ 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) }
}