การแปลงสื่อที่เข้ากันได้ซึ่งเปิดตัวใน Android 12 เป็นฟีเจอร์ที่ช่วยให้อุปกรณ์ใช้รูปแบบสื่อที่ทันสมัยและประหยัดพื้นที่เก็บข้อมูลมากขึ้นสำหรับการจับภาพวิดีโอ เช่น HEVC ในขณะเดียวกันก็ยังคงใช้งานร่วมกับแอปต่างๆ ได้ ฟีเจอร์นี้ช่วยให้ผู้ผลิตอุปกรณ์สามารถใช้ HEVC แทน AVC โดยค่าเริ่มต้นเพื่อปรับปรุงคุณภาพวิดีโอไปพร้อมกับลดข้อกำหนดด้านพื้นที่เก็บข้อมูลและแบนด์วิดท์ สำหรับอุปกรณ์ที่เปิดใช้การแปลงสื่อที่เข้ากันได้ Android จะแปลงวิดีโอ (ความยาวไม่เกิน 1 นาที) ที่บันทึกในรูปแบบต่างๆ เช่น HEVC หรือ HDR โดยอัตโนมัติเมื่อแอปที่ไม่รองรับรูปแบบดังกล่าวเปิดวิดีโอ ซึ่งจะช่วยให้แอปทำงานได้แม้ว่าวิดีโอจะบันทึกในรูปแบบที่ใหม่กว่าในอุปกรณ์ก็ตาม
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้จะปิดอยู่โดยค่าเริ่มต้น หากต้องการขอแปลงสื่อ แอปต้องประกาศความสามารถของสื่อ ดูข้อมูลเพิ่มเติมเกี่ยวกับการประกาศความสามารถของสื่อได้ที่การเปลี่ยนรูปแบบสื่อที่เข้ากันได้ในเว็บไซต์ของนักพัฒนาแอป Android
วิธีการทำงาน
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้ประกอบด้วย 2 ส่วนหลักๆ ดังนี้
- บริการเปลี่ยนรูปแบบในเฟรมเวิร์กสื่อ: บริการเหล่านี้จะเปลี่ยนไฟล์จากรูปแบบหนึ่งเป็นรูปแบบอื่นโดยใช้ฮาร์ดแวร์เพื่อให้เกิดความล่าช้าต่ำและการเปลี่ยนรูปแบบที่มีคุณภาพสูง ซึ่งรวมถึง API การแปลง บริการการแปลง ปลั๊กอิน OEM สำหรับฟิลเตอร์ที่กำหนดเอง และฮาร์ดแวร์ ดูรายละเอียดเพิ่มเติมได้ที่ภาพรวมสถาปัตยกรรม
- ฟีเจอร์การเปลี่ยนรูปแบบสื่อที่เข้ากันได้ในผู้ให้บริการสื่อ: คอมโพเนนต์นี้พบในผู้ให้บริการสื่อ ซึ่งจะขัดขวางแอปที่เข้าถึงไฟล์สื่อและแสดงไฟล์ต้นฉบับหรือไฟล์ที่เปลี่ยนรูปแบบตามความสามารถที่ประกาศของแอป หากแอปรองรับรูปแบบของไฟล์สื่อ ก็ไม่จำเป็นต้องมีการจัดการพิเศษ หากแอปไม่รองรับรูปแบบดังกล่าว เฟรมเวิร์กจะแปลงไฟล์เป็นรูปแบบเก่า เช่น AVC เมื่อแอปเข้าถึงไฟล์
รูปที่ 1 แสดงภาพรวมของกระบวนการแปลงสื่อ
รูปที่ 1 ภาพรวมของการแปลงสื่อเป็นรูปแบบที่เข้ากันได้
รูปแบบที่รองรับ
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้รองรับการเปลี่ยนรูปแบบต่อไปนี้
- HEVC (8 บิต) เป็น AVC: แปลงโค้ดผ่านการเชื่อมต่อโปรแกรมถอดรหัส MediaCodec 1 ตัวและโปรแกรมเข้ารหัส MediaCodec 1 ตัว
- HDR10+ (10 บิต) เป็น AVC (SDR): การดำเนินการแปลง HDR เป็น SDR จะใช้อินสแตนซ์ MediaCodec และปลั๊กอินของผู้ให้บริการที่เชื่อมต่อกับอินสแตนซ์โปรแกรมถอดรหัส ดูข้อมูลเพิ่มเติมได้ที่การเข้ารหัส HDR เป็น SDR
แหล่งที่มาของเนื้อหาที่รองรับ
ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะรองรับสื่อในอุปกรณ์ที่สร้างขึ้นโดยแอปกล้อง OEM ดั้งเดิมซึ่งจัดเก็บไว้ในโฟลเดอร์ DCIM/Camera/
ในวอลุ่มภายนอกหลัก ฟีเจอร์นี้ไม่รองรับสื่อในพื้นที่เก็บข้อมูลรอง
ทั้งนี้ไม่รองรับเนื้อหาที่ส่งไปยังอุปกรณ์ผ่านอีเมลหรือการ์ด SD
แอปเข้าถึงไฟล์ตามเส้นทางไฟล์ต่างๆ ต่อไปนี้คือคำอธิบายเส้นทางไฟล์ที่เปิดใช้หรือข้ามการแปลง
เปิดใช้การแปลงแล้ว
- การเข้าถึงแอปผ่าน MediaStore API
- สิทธิ์เข้าถึงแอปผ่าน API เส้นทางไฟล์โดยตรง รวมถึง Java และโค้ดเนทีฟ
- การเข้าถึงของแอปผ่านเฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล (SAF)
- การเข้าถึงแอปผ่าน Intent ของชีตที่แชร์ของระบบปฏิบัติการ (MediaStore URI เท่านั้น)
- การโอนไฟล์ 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 จะขัดขวางการอ่านไฟล์จากแอป หากแอปรองรับรูปแบบที่ใหม่กว่า (เช่น HEVC) ระบบจะแสดงไฟล์ต้นฉบับ หากแอปไม่รองรับรูปแบบดังกล่าว ระบบจะเปลี่ยนรูปแบบไฟล์เป็นรูปแบบเก่า (เช่น AVC) หรือแสดงผลจากแคชหากมีเวอร์ชันที่เปลี่ยนรูปแบบแล้ว
ขอไฟล์ที่แปลงแล้ว
ระบบจะปิดใช้ฟีเจอร์การแปลงไฟล์สื่อที่เข้ากันได้โดยค่าเริ่มต้น ซึ่งหมายความว่าหากอุปกรณ์รองรับ HEVC ทาง Android จะไม่แปลงไฟล์ เว้นแต่แอปจะระบุไว้ในไฟล์ Manifest หรือในรายการการบังคับแปลงไฟล์
แอปขอเนื้อหาที่แปลงแล้วได้โดยใช้ตัวเลือกต่อไปนี้
- ประกาศรูปแบบที่ไม่รองรับในไฟล์ Manifest โปรดดูรายละเอียดที่หัวข้อประกาศความสามารถในทรัพยากร และประกาศความสามารถในโค้ด
- เพิ่มแอปลงในรายการบังคับเปลี่ยนรูปแบบที่รวมอยู่ในข้อบังคับของMediaProvider ซึ่งจะเปิดใช้การแปลงสตรีมสำหรับแอปที่ไม่ได้อัปเดตไฟล์ Manifest เมื่อแอปอัปเดตไฟล์ Manifest ด้วยรูปแบบที่ไม่รองรับ จะต้องนำแอปออกจากรายการการบังคับเปลี่ยนรูปแบบ ผู้ผลิตอุปกรณ์สามารถเสนอชื่อแอปของตนให้เพิ่มหรือนำออกจากรายการการแปลงไฟล์แบบบังคับได้โดยส่งแพตช์หรือรายงานข้อบกพร่อง ทีม Android จะตรวจสอบรายการเป็นระยะๆ และอาจนำแอปออกจากรายการ
- ปิดใช้รูปแบบที่รองรับด้วยเฟรมเวิร์กความเข้ากันได้ของแอปขณะรันไทม์ (ผู้ใช้สามารถปิดใช้รูปแบบนี้สำหรับแต่ละแอปในการตั้งค่าได้ด้วย)
- เปิดไฟล์ด้วย
MediaStore
ขณะระบุรูปแบบที่ไม่รองรับอย่างชัดเจนด้วยopenTypedAssetFileDescriptor
API
สำหรับการโอนผ่าน 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
เปิดใช้การแปลงสื่อทั่วโลก
หากต้องการทดสอบเฟรมเวิร์กการแปลงสื่อเป็นรูปแบบหรือลักษณะการทํางานของแอปด้วยการแปลง คุณสามารถเปิดหรือปิดใช้ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้ทั่วโลก ในหน้าตัวเลือกสำหรับนักพัฒนาแอป การตั้งค่า > ระบบ > นักพัฒนาแอป > การแปลงสื่อ ให้ตั้งค่าปุ่มสลับลบล้างค่าเริ่มต้นของการแปลงเป็นเปิด แล้วตั้งค่าปุ่มสลับเปิดใช้การแปลงเป็นเปิดหรือปิด หากเปิดใช้การตั้งค่านี้ การแปลงสื่ออาจเกิดขึ้นในเบื้องหลังสำหรับแอปอื่นที่ไม่ใช่แอปที่คุณพัฒนา
ตรวจสอบสถานะการแปลง
ในระหว่างการทดสอบ คุณสามารถใช้คำสั่งเชลล์ 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 เท่านั้น)
ApplicationMediaCapabilities API
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
บริการ MediaTranscoding
frameworks/av/services/mediatranscoding/
frameworks/av/media/libmediatranscoding/
Native 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 ผู้ผลิตอุปกรณ์สามารถใช้ปลั๊กอินตัวกรอง 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
จะสร้างอินสแตนซ์ของตัวกรองทั้งหมดที่มี ระบบจะเริ่มเฉพาะตัวกรองที่เปลี่ยนแปลงบัฟเฟอร์เท่านั้น
รูปที่ 4 สถาปัตยกรรมปลั๊กอินตัวกรอง
อินเทอร์เฟซปลั๊กอินตัวกรอง
อินเทอร์เฟซ FilterPlugin.h
กำหนด API ต่อไปนี้เพื่อแสดงตัวกรอง
std::shared_ptr<C2ComponentStore>getComponentStore()
แสดงผลออบเจ็กต์
C2ComponentStore
ที่มีตัวกรอง ซึ่งแยกต่างหากจากสิ่งที่การใช้งาน Codec 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
การสร้างวิดีโอ
คอมโพเนนต์ที่รวมจะสร้างอินสแตนซ์ของโปรแกรมถอดรหัสพื้นฐานและตัวกรองที่กําหนดไว้ทั้งหมดเมื่อสร้าง
การค้นหาและการกําหนดค่า
คอมโพเนนต์ที่รวมไว้จะแยกพารามิเตอร์ขาเข้าออกจากคําค้นหาหรือคําขอการกําหนดค่าตามคําอธิบายตัวกรอง ตัวอย่างเช่น การกำหนดค่าพารามิเตอร์การควบคุมตัวกรองจะส่งไปยังตัวกรองที่เกี่ยวข้อง และพารามิเตอร์ที่ได้รับผลกระทบจากตัวกรองจะแสดงในการค้นหา (แทนที่จะอ่านจากตัวถอดรหัสซึ่งมีพารามิเตอร์ที่ไม่ได้รับผลกระทบ)
รูปที่ 5 การค้นหาและการกําหนดค่า
เริ่ม
ในช่วงเริ่มต้น คอมโพเนนต์ที่รวมไว้จะเริ่มต้นโปรแกรมถอดรหัสและตัวกรองทั้งหมดที่เปลี่ยนแปลงบัฟเฟอร์ หากไม่ได้เปิดใช้ตัวกรอง ส่วนประกอบที่รวมไว้จะเริ่มโปรแกรมถอดรหัสและบัฟเฟอร์การส่งผ่าน และส่งคําสั่งไปยังโปรแกรมถอดรหัส
การจัดการบัฟเฟอร์
รูปที่ 6 การจัดการบัฟเฟอร์
บัฟเฟอร์ที่จัดคิวไว้สำหรับตัวถอดรหัสที่รวมไว้จะไปที่ตัวถอดรหัสพื้นฐาน คอมโพเนนต์ที่รวมไว้จะดึงบัฟเฟอร์เอาต์พุตจากโปรแกรมถอดรหัสผ่านonWorkDone_nb()
callback แล้วจัดคิวไปยังตัวกรอง ระบบจะรายงานบัฟเฟอร์เอาต์พุตสุดท้ายจากตัวกรองสุดท้ายไปยังไคลเอ็นต์
เพื่อให้การจัดการบัฟเฟอร์นี้ทำงานได้ คอมโพเนนต์ที่รวมไว้ต้องกำหนดค่า C2PortBlockPoolsTuning
เป็นฟิลเตอร์สุดท้ายเพื่อให้เฟรมเวิร์กเอาต์พุตบัฟเฟอร์จากพูลบล็อกที่คาดไว้
หยุด รีเซ็ต และปล่อย
เมื่อหยุด คอมโพเนนต์ที่รวมไว้จะหยุดตัวถอดรหัสและตัวกรองที่เปิดใช้ทั้งหมดที่เริ่มไว้ เมื่อรีเซ็ตและเผยแพร่ ระบบจะรีเซ็ตหรือเผยแพร่คอมโพเนนต์ทั้งหมดไม่ว่าจะเปิดใช้งานหรือไม่ก็ตาม
ใช้ปลั๊กอินตัวกรองตัวอย่าง
หากต้องการเปิดใช้ปลั๊กอิน ให้ทําดังนี้
- ใช้อินเทอร์เฟซ
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