การแปลงสื่อที่เข้ากันได้

การแปลงสื่อที่เข้ากันได้ซึ่งเปิดตัวใน Android 12 เป็นฟีเจอร์ที่ช่วยให้อุปกรณ์ใช้รูปแบบสื่อที่ทันสมัยและประหยัดพื้นที่เก็บข้อมูลมากขึ้นสำหรับการจับภาพวิดีโอ เช่น HEVC โดยยังคงเข้ากันได้กับแอป ฟีเจอร์นี้ช่วยให้ผู้ผลิตอุปกรณ์ใช้ HEVC แทน AVC ได้โดยค่าเริ่มต้น เพื่อปรับปรุงคุณภาพวิดีโอในขณะที่ลดข้อกำหนดด้านพื้นที่เก็บข้อมูลและแบนด์วิดท์ สำหรับอุปกรณ์ที่เปิดใช้การแปลงสื่อที่เข้ากันได้ Android สามารถแปลงวิดีโอโดยอัตโนมัติ (ความยาวไม่เกิน 1 นาที) ที่บันทึกในรูปแบบต่างๆ เช่น HEVC หรือ HDR เมื่อวิดีโอเปิดโดยแอปที่ไม่รองรับรูปแบบนี้ ซึ่งช่วยให้แอปทำงานได้แม้ว่าจะมีการบันทึกวิดีโอในรูปแบบใหม่บนอุปกรณ์ก็ตาม

ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะปิดอยู่โดยค่าเริ่มต้น หากต้องการขอการแปลงสื่อ แอปต้องประกาศความสามารถของสื่อ ดูข้อมูลเพิ่มเติมเกี่ยวกับการประกาศความสามารถของสื่อได้ที่การแปลงสื่อที่เข้ากันได้ในเว็บไซต์ของนักพัฒนาแอป Android

วิธีการทำงาน

ฟีเจอร์การแปลงสื่อที่เข้ากันได้ประกอบด้วย 2 ส่วนหลักดังนี้

  • บริการแปลงรหัสในเฟรมเวิร์กสื่อ: บริการเหล่านี้แปลงไฟล์จากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่งโดยใช้ฮาร์ดแวร์โดยมีเวลาในการตอบสนองต่ำและ Conversion คุณภาพสูง ซึ่งรวมถึง API การแปลง, บริการแปลง, ปลั๊กอิน OEM สำหรับตัวกรองที่กำหนดเอง และฮาร์ดแวร์ โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อภาพรวมสถาปัตยกรรม
  • ฟีเจอร์การแปลงสื่อที่เข้ากันได้ในผู้ให้บริการสื่อ: คอมโพเนนต์นี้ที่พบในผู้ให้บริการสื่อจะสกัดกั้นแอปที่เข้าถึงไฟล์สื่อและแสดงไฟล์ต้นฉบับหรือไฟล์ที่แปลงตามความสามารถที่ประกาศไว้ของแอป หากแอปรองรับรูปแบบไฟล์สื่อ คุณก็ไม่ต้องทำอะไรเป็นพิเศษ หากแอปไม่รองรับรูปแบบนี้ เฟรมเวิร์กจะแปลงไฟล์เป็นรูปแบบเก่า เช่น AVC เมื่อแอปเข้าถึงไฟล์

รูปที่ 1 แสดงภาพรวมของกระบวนการแปลงสื่อ

กระบวนการแปลงสื่อที่เข้ากันได้

รูปที่ 1 ภาพรวมของการแปลงสื่อที่เข้ากันได้

รูปแบบที่รองรับ

ฟีเจอร์การแปลงสื่อที่เข้ากันได้รองรับ Conversion รูปแบบต่อไปนี้

  • HEVC (8 บิต) เป็น AVC: การแปลงตัวแปลงรหัสเกิดขึ้นผ่านการเชื่อมต่อตัวถอดรหัสสื่อ 1 ตัวและโปรแกรมเปลี่ยนไฟล์ Mediacode 1 ตัว
  • HDR10+ (10 บิต) เป็น AVC (SDR): การแปลง HDR เป็น SDR ดำเนินการโดยใช้อินสแตนซ์ Mediacodec และปลั๊กอินของผู้ให้บริการเชื่อมต่อกับอินสแตนซ์ตัวถอดรหัส สำหรับข้อมูลเพิ่มเติม โปรดดูการเข้ารหัส HDR เป็น SDR

แหล่งที่มาของเนื้อหาที่รองรับ

ฟีเจอร์การแปลงสื่อที่เข้ากันได้รองรับสื่อในอุปกรณ์ที่สร้างโดยแอปกล้อง OEM ดั้งเดิมที่จัดเก็บในโฟลเดอร์ DCIM/Camera/ ในระดับเสียงหลักภายนอก ฟีเจอร์นี้ไม่รองรับสื่อในพื้นที่เก็บข้อมูลรอง ระบบไม่รองรับเนื้อหาที่ส่งไปยังอุปกรณ์ผ่านอีเมลหรือการ์ด SD

แอปเข้าถึงไฟล์ตามเส้นทางไฟล์ที่หลากหลาย ต่อไปนี้เป็นคำอธิบายเส้นทางไฟล์ที่เปิดใช้หรือข้ามการแปลง

  • เปิดใช้การแปลงแล้ว:

    • การเข้าถึงแอปผ่าน MediaStore API
    • การเข้าถึงแอปผ่าน Filepath API โดยตรง ซึ่งรวมถึง Java และโค้ดแบบเนทีฟ
    • การเข้าถึงแอปผ่านเฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล (SAF)
    • การเข้าถึงแอปผ่าน Intent ของชีตการแชร์ระบบปฏิบัติการ (เฉพาะ URI ของ MediaStore)
    • การโอนไฟล์ MTP/PTP จากโทรศัพท์ไปยัง PC
  • ข้ามการแปลง:

    • การโอนไฟล์ออกจากอุปกรณ์โดยการดีดการ์ด SD ออก
    • โอนไฟล์จากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่งโดยใช้ตัวเลือก เช่น การแชร์ใกล้เคียงหรือการโอนด้วยบลูทูธ

เพิ่มเส้นทางไฟล์ที่กำหนดเองสำหรับการแปลง

ผู้ผลิตอุปกรณ์อาจเพิ่มเส้นทางไฟล์สำหรับการแปลงสื่อภายใต้ไดเรกทอรี DCIM/ หรือไม่ก็ได้ เส้นทางภายนอกไดเรกทอรี DCIM/ จะถูกปฏิเสธ คุณอาจต้องเพิ่มเส้นทางไฟล์ดังกล่าวเพื่อให้เป็นไปตามข้อกำหนดของผู้ให้บริการหรือกฎระเบียบท้องถิ่น

หากต้องการเพิ่มเส้นทางไฟล์ ให้ใช้เส้นทางการแปลงการวางซ้อนทรัพยากรรันไทม์ (RRO), config_supported_transcoding_relative_paths ตัวอย่างวิธีการเพิ่มเส้นทางไฟล์มีดังนี้

<string-array name="config_supported_transcoding_relative_paths" translatable="false">
    <item>DCIM/JCF/</item>
</string-array>

หากต้องการยืนยันเส้นทางไฟล์ที่กำหนดค่าไว้ ให้ใช้ค่าต่อไปนี้

adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20

ภาพรวมสถาปัตยกรรม

ส่วนนี้อธิบายสถาปัตยกรรมของฟีเจอร์การแปลงสื่อ

สถาปัตยกรรมการแปลงสื่อ

รูปที่ 2 สถาปัตยกรรมการแปลงสื่อ

สถาปัตยกรรมการแปลงสื่อประกอบด้วยองค์ประกอบต่อไปนี้

  • MediaTranscodingManager System API: อินเทอร์เฟซที่ช่วยให้ไคลเอ็นต์สื่อสารกับบริการ MediaTranscoding ได้ โมดูล MediaProvider ใช้ API นี้
  • MediaTranscodingService: บริการแบบเนทีฟที่จัดการการเชื่อมต่อของไคลเอ็นต์ กำหนดเวลาคำขอแปลง และจัดการการทำบัญชีสำหรับ TranscodingSessions
  • MediaTranscoder: ไลบรารีเนทีฟที่ดำเนินการแปลง ไลบรารีนี้สร้างขึ้นจากเฟรมเวิร์กสื่อ NDK เพื่อให้เข้ากันได้กับโมดูล

ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะบันทึกเมตริกการแปลงทั้งในบริการและโปรแกรมแปลงสื่อ ส่วนโค้ดฝั่งไคลเอ็นต์และฝั่งบริการจะอยู่ในโมดูล MediaProvider เพื่อให้แก้ไขข้อบกพร่องและอัปเดตได้อย่างทันท่วงที

สิทธิ์เข้าถึงไฟล์

การแปลงสื่อที่เข้ากันได้จะสร้างขึ้นจากระบบไฟล์ในระบบไฟล์ Userspace (FUSE) ซึ่งใช้สำหรับพื้นที่เก็บข้อมูลที่กำหนดขอบเขต FUSE ช่วยให้โมดูล MediaProvider ตรวจสอบการทำงานของไฟล์ในพื้นที่ของผู้ใช้และป้องกันการเข้าถึงไฟล์ตามนโยบายเพื่ออนุญาต ปฏิเสธ หรือปกปิดการเข้าถึงได้

เมื่อแอปพยายามเข้าถึงไฟล์ Daemon ของ FUSE จะสกัดกั้นสิทธิ์การอ่านไฟล์จากแอป หากแอปรองรับรูปแบบที่ใหม่กว่า (เช่น HEVC) ระบบจะส่งไฟล์ต้นฉบับกลับมา หากแอปไม่รองรับรูปแบบนี้ ระบบจะแปลงไฟล์เป็นรูปแบบที่เก่ากว่า (เช่น AVC) หรือแสดงผลจากแคชหากมีเวอร์ชันที่แปลงแล้ว

ขอไฟล์ที่แปลง

ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะปิดใช้อยู่โดยค่าเริ่มต้น ซึ่งหมายความว่าหากอุปกรณ์รองรับ HEVC แล้ว Android จะไม่แปลงไฟล์เว้นแต่แอปจะระบุอยู่ในไฟล์ Manifest หรือในรายการบังคับแปลง

แอปขอเนื้อหาที่แปลงได้โดยใช้ตัวเลือกต่อไปนี้

  • ประกาศรูปแบบที่ไม่รองรับในไฟล์ Manifest โปรดดูรายละเอียดที่หัวข้อประกาศความสามารถในทรัพยากรและประกาศความสามารถในโค้ด
  • เพิ่มแอปลงใน รายการบังคับแปลง ที่รวมอยู่ในโมดูล MediaProvider การดำเนินการนี้จะเปิดใช้การแปลงสำหรับแอปที่ยังไม่ได้อัปเดต ไฟล์ Manifest เมื่อแอปอัปเดตไฟล์ Manifest ด้วยรูปแบบที่ไม่รองรับ จะต้องนำไฟล์ดังกล่าวออกจากรายการบังคับแปลง ผู้ผลิตอุปกรณ์สามารถเสนอชื่อแอปที่จะเพิ่มหรือนำออกจากรายการบังคับแปลงได้โดยส่งแพตช์หรือการรายงานข้อบกพร่อง ทีม Android จะตรวจสอบรายการเป็นระยะและอาจนำแอปออกจากรายการ
  • ปิดใช้รูปแบบที่รองรับด้วยเฟรมเวิร์กความเข้ากันได้ของแอปในเวลาที่รันไทม์ (ผู้ใช้ปิดใช้ตัวเลือกนี้สำหรับแต่ละแอปได้ในการตั้งค่า)
  • เปิดไฟล์ด้วย MediaStore พร้อมระบุรูปแบบที่ไม่รองรับอย่างชัดเจนด้วย API ของ openTypedAssetFileDescriptor

สำหรับการโอนผ่าน USB (อุปกรณ์ไปยัง PC) การแปลงจะปิดใช้งานโดยค่าเริ่มต้น แต่ผู้ใช้สามารถเลือกที่จะเปิดใช้งานการแปลงโดยใช้ปุ่มสลับแปลงวิดีโอเป็น AVC ในหน้าจอการตั้งค่าค่ากำหนด USB ดังที่แสดงในรูปที่ 3

สลับเพื่อเปิดใช้การแปลงสื่อ

รูปที่ 3 สลับเพื่อเปิดใช้การแปลงสื่อในหน้าจอค่ากำหนด USB

ข้อจำกัดเกี่ยวกับการขอไฟล์ที่แปลง

เพื่อป้องกันไม่ให้คำขอการแปลงล็อกทรัพยากรของระบบเป็นเวลานาน แอปที่ขอเซสชันการแปลงจะจำกัดไว้ที่

  • 10 เซสชันติดต่อกัน
  • รวมเวลาทั้งหมด 3 นาที

หากแอปเกินขีดจำกัดทั้งหมดเหล่านี้ เฟรมเวิร์กจะแสดงข้อบ่งชี้ไฟล์ต้นฉบับ

ความต้องการของอุปกรณ์

หากต้องการรองรับฟีเจอร์การแปลงสื่อที่เข้ากันได้ อุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้

  • อุปกรณ์เปิดใช้การเข้ารหัส HEVC ในแอปกล้องที่มาพร้อมเครื่องโดยค่าเริ่มต้น
  • (อุปกรณ์ที่รองรับการแปลง HDR เป็น SDR) อุปกรณ์รองรับการจับภาพวิดีโอ HDR

ต้องเพิ่มประสิทธิภาพฮาร์ดแวร์วิดีโอและสิทธิ์เข้าถึงแบบอ่าน/เขียนของพื้นที่เก็บข้อมูลเพื่อให้การแปลงสื่อมีประสิทธิภาพ เมื่อตัวแปลงรหัสสื่อได้รับการกำหนดค่าลำดับความสำคัญเท่ากับ 1 ตัวแปลงรหัสต้องทำงานที่อัตราการส่งข้อมูลสูงสุดที่เป็นไปได้ เราขอแนะนำว่าประสิทธิภาพการแปลงจะต้องไม่ต่ำกว่า 200 FPS หากต้องการทดสอบประสิทธิภาพของฮาร์ดแวร์ ให้เรียกใช้การเปรียบเทียบเครื่องมือแปลงรหัสสื่อที่ frameworks/av/media/libmediatranscoding/transcoder/benchmark

การตรวจสอบความถูกต้อง

หากต้องการตรวจสอบฟีเจอร์การแปลงสื่อที่เข้ากันได้ ให้เรียกใช้การทดสอบ CTS ต่อไปนี้

  • android.media.mediatranscoding.cts
  • android.mediaprovidertranscode.cts

เปิดใช้การแปลงสื่อทั่วโลก

หากต้องการทดสอบเฟรมเวิร์กการแปลงสื่อหรือลักษณะการทำงานของแอปที่มีการแปลง คุณเปิดหรือปิดใช้ฟีเจอร์การแปลงสื่อที่เข้ากันได้ทั่วโลกได้ ในหน้าตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ การตั้งค่า > ระบบ > นักพัฒนาซอฟต์แวร์ > การแปลงสื่อ ให้สลับปุ่มลบล้างค่าเริ่มต้นการแปลงเป็นเปิด จากนั้นตัวสลับเปิดใช้การแปลงเป็นเปิดหรือ ปิด หากเปิดใช้การตั้งค่านี้ การแปลงสื่ออาจเกิดขึ้นในพื้นหลังสำหรับแอปอื่นนอกเหนือจากแอปที่คุณกำลังพัฒนา

ตรวจสอบสถานะการแปลง

ระหว่างการทดสอบ คุณใช้คำสั่ง Shell ADB ต่อไปนี้เพื่อตรวจสอบสถานะการแปลงได้ รวมถึงเซสชันการแปลงทั้งปัจจุบันและในอดีต

adb shell dumpsys media.transcoding

ขยายการจำกัดความยาววิดีโอ

สำหรับการทดสอบ คุณสามารถขยายขีดจำกัดความยาววิดีโอ 1 นาทีสำหรับการแปลงได้โดยใช้คำสั่งต่อไปนี้ คุณอาจต้องรีบูต หลังจากเรียกใช้คำสั่งนี้

adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>

แหล่งที่มาและการอ้างอิง AOSP

ต่อไปนี้เป็นซอร์สโค้ด AOSP ที่เกี่ยวข้องกับการแปลงสื่อที่เข้ากันได้

การเข้ารหัส HDR เป็น SDR

หากต้องการรองรับการเข้ารหัส HDR เป็น SDR ผู้ผลิตอุปกรณ์จะใช้ปลั๊กอินตัวกรอง AOSP 2.0 ตัวอย่างใน /platform/frameworks/av/media/codec2/hidl/plugin/ ได้ หัวข้อนี้จะอธิบายวิธีการทำงานของปลั๊กอินตัวกรอง วิธีใช้งานปลั๊กอิน และวิธีทดสอบปลั๊กอิน

หากอุปกรณ์ไม่มีปลั๊กอินที่รองรับการเข้ารหัส HDR เป็น SDR แอปที่เข้าถึงวิดีโอ HDR จะได้รับคำอธิบายไฟล์ต้นฉบับ โดยไม่คำนึงถึงความสามารถของสื่อของแอปที่ประกาศไว้ในไฟล์ Manifest

วิธีการทำงาน

ส่วนนี้จะอธิบายลักษณะการใช้งานทั่วไปของปลั๊กอินตัวกรองตัวแปลงรหัส 2.0

ฉากหลัง

Android ติดตั้งใช้งานเลเยอร์การปรับตัวระหว่างอินเทอร์เฟซ Codec 2.0 และอินเทอร์เฟซ HAL ของ android.hardware.media.c2 ที่ android::hardware::media::c2 สำหรับปลั๊กอินตัวกรอง AOSP จะมีกลไก Wrapper ที่รวมตัวถอดรหัสเข้ากับปลั๊กอินตัวกรอง MediaCodec รับรู้ว่าคอมโพเนนต์ที่รวมไว้เหล่านี้เป็นตัวถอดรหัสด้วยฟีเจอร์การกรอง

ภาพรวม

คลาส FilterWrapper จะนำตัวแปลงรหัสของผู้ให้บริการและแสดงผลตัวแปลงรหัสที่ตัดไว้กลับไปยังเลเยอร์การปรับตัว media.c2 คลาส FilterWrapper จะโหลด libc2filterplugin.so ผ่าน API ของ FilterWrapper::Plugin และบันทึกตัวกรองที่พร้อมใช้งานจากปลั๊กอิน ขณะสร้าง FilterWrapper จะยืนยันตัวกรองที่ใช้ได้ทั้งหมด เวลาเริ่มต้นเฉพาะกับตัวกรองที่เปลี่ยนแปลงบัฟเฟอร์เท่านั้น

กรองสถาปัตยกรรมปลั๊กอิน

รูปที่ 1 กรองสถาปัตยกรรมปลั๊กอิน

กรองอินเทอร์เฟซปลั๊กอิน

อินเทอร์เฟซ FilterPlugin.h จะกำหนด API ต่อไปนี้เพื่อแสดงตัวกรอง

  • std::shared_ptr<C2ComponentStore>getComponentStore()

    แสดงผลออบเจ็กต์ C2ComponentStore ที่มีตัวกรอง ซึ่งจะแยกออกจากข้อมูลที่การใช้งานตัวแปลงรหัส 2.0 ของผู้ให้บริการแสดง โดยปกติแล้ว สโตร์นี้จะมีเฉพาะตัวกรองที่ใช้โดยคลาส FilterWrapper

  • bool describe(C2String name, Descriptor *desc)

    อธิบายตัวกรองนอกเหนือจากตัวกรองที่มีจาก C2ComponentStore คำอธิบายมีคำจำกัดความดังต่อไปนี้

    • controlParam: พารามิเตอร์ที่ควบคุมลักษณะการทำงานของตัวกรอง ตัวอย่างเช่น พารามิเตอร์การควบคุมคือฟังก์ชันการโอนเป้าหมายสำหรับ HDR เป็น SDR
    • affectedParams: พารามิเตอร์ที่ได้รับผลกระทบจากการดำเนินการกรอง ตัวอย่างเช่น สำหรับเครื่องมือแมปโทนสี HDR เป็น SDR พารามิเตอร์ที่ได้รับผลกระทบคือด้านของสี
  • bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)

    แสดงผล true หากคอมโพเนนต์ตัวกรองเปลี่ยนแปลงบัฟเฟอร์ ตัวอย่างเช่น ตัวกรองการแมปโทนจะแสดงผล true หากฟังก์ชันการโอนเป้าหมายเป็น SDR และฟังก์ชันการโอนอินพุตเป็น HDR (HLG หรือ PQ)

รายละเอียดFilterWrapper

ส่วนนี้จะอธิบายรายละเอียดของชั้นเรียน FilterWrapper

การสร้างวิดีโอ

คอมโพเนนต์ที่รวมไว้จะสร้างตัวถอดรหัสที่สำคัญและตัวกรองที่กำหนดไว้ทั้งหมดขณะสร้าง

ข้อความค้นหาและการกำหนดค่า

คอมโพเนนต์ที่ผูกไว้จะแยกพารามิเตอร์ขาเข้าออกจากคำค้นหาหรือคำขอการกำหนดค่าตามคำอธิบายตัวกรอง ตัวอย่างเช่น ระบบจะกำหนดเส้นทางการกำหนดค่าพารามิเตอร์การควบคุมตัวกรองไปยังตัวกรองที่เกี่ยวข้อง และจะมีพารามิเตอร์ที่ได้รับผลกระทบจากตัวกรองในคำค้นหา (แทนที่จะอ่านจากตัวถอดรหัสที่มีพารามิเตอร์ที่ไม่ได้รับผลกระทบ)

ข้อความค้นหาและการกำหนดค่า

รูปที่ 2 การค้นหาและการกำหนดค่า

เริ่ม

เมื่อเริ่มต้น คอมโพเนนต์ที่รวมไว้จะเริ่มตัวถอดรหัสและตัวกรองทั้งหมดที่เปลี่ยนแปลงบัฟเฟอร์ หากไม่มีการเปิดใช้ตัวกรอง คอมโพเนนต์ที่รวมไว้จะเริ่มตัวถอดรหัสและบัฟเฟอร์ส่งผ่าน (Pass Through) และส่งคำสั่งไปยังตัวถอดรหัสเอง

การจัดการบัฟเฟอร์

การจัดการบัฟเฟอร์

รูปที่ 3 การจัดการบัฟเฟอร์

บัฟเฟอร์ที่อยู่ในคิวตัวถอดรหัสที่ปกปิดไว้จะไปยังตัวถอดรหัสที่เกี่ยวข้อง คอมโพเนนต์ที่รวมไว้จะจับบัฟเฟอร์เอาต์พุตจากตัวถอดรหัสผ่านการเรียกกลับ onWorkDone_nb() จากนั้นจึงจัดคิวให้กับตัวกรอง ระบบจะรายงานบัฟเฟอร์เอาต์พุตสุดท้ายจากตัวกรองสุดท้ายไปยังไคลเอ็นต์

เพื่อให้การจัดการบัฟเฟอร์นี้ทำงานได้ คอมโพเนนต์ที่รวมไว้ต้องกำหนดค่า C2PortBlockPoolsTuning ไปยังตัวกรองล่าสุดเพื่อให้เอาต์พุตของเฟรมเวิร์กบัฟเฟอร์จาก Block Pool ที่คาดไว้

หยุด รีเซ็ต และปล่อย

เมื่อหยุดดำเนินการ คอมโพเนนต์ที่รวมไว้จะหยุดตัวถอดรหัสและตัวกรองที่เปิดใช้ทั้งหมดซึ่งเริ่มทำงานแล้ว เมื่อรีเซ็ตและปล่อยแล้ว ระบบจะรีเซ็ตหรือปล่อยคอมโพเนนต์ทั้งหมดไม่ว่าจะเปิดใช้ไว้หรือไม่ก็ตาม

ใช้งานปลั๊กอินตัวกรองตัวอย่าง

หากต้องการเปิดใช้ปลั๊กอิน ให้ทำดังนี้

  1. ใช้อินเทอร์เฟซ FilterPlugin ในคลังแล้ววางไว้ที่ /vendor/lib[64]/libc2filterplugin.so.
  2. เพิ่มสิทธิ์ให้กับ mediacodec.te หากจำเป็น
  3. อัปเดตเลเยอร์การปรับตัวเป็น Android 12 และสร้างบริการ media.c2 ใหม่

ทดสอบปลั๊กอิน

ในการทดสอบปลั๊กอินตัวอย่าง ให้ทำดังนี้

  1. สร้างใหม่และแฟลชอุปกรณ์
  2. สร้างปลั๊กอินตัวอย่างโดยใช้คำสั่งต่อไปนี้

    m sample-codec2-filter-plugin
    
  3. ต่อเชื่อมอุปกรณ์อีกครั้งและเปลี่ยนชื่อปลั๊กอินของผู้ให้บริการเพื่อให้บริการตัวแปลงรหัสจดจำอุปกรณ์ได้

    adb root
    adb remount
    adb reboot
    adb wait-for-device
    adb root
    adb remount
    adb
    push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \
    
    /vendor/lib64/libc2filterplugin.so
    adb push
    /out/target/<...>/lib/sample-codec2-filter-plugin.so \
    
    /vendor/lib/libc2filterplugin.so
    adb reboot