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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • การเข้าถึงแอปผ่าน MediaStore APIs
    • การเข้าถึงแอปผ่าน API ของไฟล์พาธโดยตรง รวมถึง Java และโค้ดเนทีฟ
    • การเข้าถึงแอปผ่าน Storage Access Framework (SAF)
    • การเข้าถึงแอพผ่านเจตนาของแผ่นแบ่งปัน OS (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 ตรวจสอบการทำงานของไฟล์ในพื้นที่ของผู้ใช้และเข้าถึงไฟล์ตามนโยบายเพื่ออนุญาต ปฏิเสธ หรือแก้ไขการเข้าถึง

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

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

คุณลักษณะการแปลงรหัสสื่อที่เข้ากันได้จะถูกปิดใช้งานโดยค่าเริ่มต้น หมายความว่าหากอุปกรณ์รองรับ HEVC นั้น Android จะไม่แปลงรหัสไฟล์ เว้นแต่จะมีการระบุไว้โดยแอปในไฟล์ 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 และอินเทอร์เฟซ HAL ของ android.hardware.media.c2 ที่ android::hardware::media::c2 สำหรับปลั๊กอินตัวกรอง AOSP มีกลไกห่อหุ้มที่รวมตัวถอดรหัสเข้ากับปลั๊กอินตัวกรอง 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 Params : พารามิเตอร์ที่ได้รับผลกระทบจากการดำเนินการกรอง ตัวอย่างเช่น สำหรับตัวแมปโทน 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