การแปลงสื่อที่เข้ากันได้ซึ่งเปิดตัวใน 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 ที่เกี่ยวข้องกับการแปลงสื่อที่เข้ากันได้
Transcoding System API (ใช้โดย MediaProvider เท่านั้น)
API ApplicationMediaCapabilities API
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
บริการแปลงสื่อ
frameworks/av/services/mediatranscoding/
frameworks/av/media/libmediatranscoding/
MediaTranscoder แบบเนทีฟ
frameworks/av/media/libmediatranscoding/transcoder
ปลั๊กอินตัวอย่าง HDR สำหรับ MediaTranscoder
โค้ดการสกัดกั้นและการแปลงไฟล์ MediaProvider
การเปรียบเทียบ MediaTranscoder
frameworks/av/media/libmediatranscoding/transcoder/benchmark
การทดสอบ CTS
cts/tests/tests/mediatranscoding/
การเข้ารหัส 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 เป็น SDRaffectedParams
: พารามิเตอร์ที่ได้รับผลกระทบจากการดำเนินการกรอง ตัวอย่างเช่น สำหรับเครื่องมือแมปโทนสี 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 ที่คาดไว้
หยุด รีเซ็ต และปล่อย
เมื่อหยุดดำเนินการ คอมโพเนนต์ที่รวมไว้จะหยุดตัวถอดรหัสและตัวกรองที่เปิดใช้ทั้งหมดซึ่งเริ่มทำงานแล้ว เมื่อรีเซ็ตและปล่อยแล้ว ระบบจะรีเซ็ตหรือปล่อยคอมโพเนนต์ทั้งหมดไม่ว่าจะเปิดใช้ไว้หรือไม่ก็ตาม
ใช้งานปลั๊กอินตัวกรองตัวอย่าง
หากต้องการเปิดใช้ปลั๊กอิน ให้ทำดังนี้
- ใช้อินเทอร์เฟซ
FilterPlugin
ในคลังแล้ววางไว้ที่/vendor/lib[64]/libc2filterplugin.so.
- เพิ่มสิทธิ์ให้กับ
mediacodec.te
หากจำเป็น - อัปเดตเลเยอร์การปรับตัวเป็น Android 12 และสร้างบริการ
media.c2
ใหม่
ทดสอบปลั๊กอิน
ในการทดสอบปลั๊กอินตัวอย่าง ให้ทำดังนี้
- สร้างใหม่และแฟลชอุปกรณ์
สร้างปลั๊กอินตัวอย่างโดยใช้คำสั่งต่อไปนี้
m sample-codec2-filter-plugin
ต่อเชื่อมอุปกรณ์อีกครั้งและเปลี่ยนชื่อปลั๊กอินของผู้ให้บริการเพื่อให้บริการตัวแปลงรหัสจดจำอุปกรณ์ได้
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