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

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

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

มันทำงานอย่างไร

คุณสมบัติการแปลงรหัสสื่อที่เข้ากันได้ประกอบด้วยสองส่วนหลัก:

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

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

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

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

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

คุณสมบัติการแปลงรหัสสื่อที่รองรับรองรับการแปลงรูปแบบต่อไปนี้:

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

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

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

แอพเข้าถึงไฟล์ตามเส้นทางไฟล์ต่างๆ ข้อมูลต่อไปนี้จะอธิบายเส้นทางของไฟล์ที่เปิดใช้งานหรือข้ามการแปลงรหัส:

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

    • การเข้าถึงแอปผ่าน MediaStore API
    • การเข้าถึงแอปผ่าน API เส้นทางไฟล์โดยตรง รวมถึง Java และโค้ดเนทีฟ
    • การเข้าถึงแอปผ่าน Storage Access Framework (SAF)
    • การเข้าถึงแอปผ่าน Intent ของแผ่นแบ่งปัน OS (URI ของ MediaStore เท่านั้น)
    • ถ่ายโอนไฟล์ MTP/PTP จากโทรศัพท์ไปยังพีซี
  • ข้ามการแปลงรหัส:

    • การถ่ายโอนไฟล์ออกจากอุปกรณ์โดยการนำการ์ด 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 สถาปัตยกรรมการแปลงรหัสสื่อ

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

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

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

การเข้าถึงไฟล์

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

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

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

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

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

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

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

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

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

ข้อจำกัดในการขอไฟล์ที่แปลงรหัส

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

  • 10 ครั้งติดต่อกัน
  • ระยะเวลาดำเนินการทั้งหมดสามนาที

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

ข้อกำหนดของอุปกรณ์

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

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

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

การตรวจสอบ

หากต้องการตรวจสอบคุณสมบัติการแปลงรหัสสื่อที่เข้ากันได้ ให้รันการทดสอบ CTS ต่อไปนี้:

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

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

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

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

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

adb shell dumpsys media.transcoding

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

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

adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>

แหล่งที่มา AOSP และข้อมูลอ้างอิง

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

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

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

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

มันทำงานอย่างไร

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

พื้นหลัง

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

ภาพรวม

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

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

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

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

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

  • std::shared_ptr<C2ComponentStore>getComponentStore()

    ส่งกลับวัตถุ C2ComponentStore ที่มีตัวกรอง สิ่งนี้แยกจากสิ่งที่การใช้งาน Codec 2.0 ของผู้จำหน่ายเปิดเผย โดยทั่วไปแล้ว ร้านค้านี้จะมีเพียงตัวกรองที่ใช้โดยคลาส te 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. แบบสอบถามและการกำหนดค่า

เริ่ม

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

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

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

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

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

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

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

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

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

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

  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