วิดีโอ High Dynamic Range (HDR) เป็นเทคโนโลยีขั้นต่อไปในการถอดรหัสวิดีโอคุณภาพสูง ซึ่งให้คุณภาพการสร้างฉากที่ไม่มีใครเทียบได้ โดยการเพิ่มช่วงไดนามิกของคอมโพเนนต์ความสว่างอย่างมาก (จากปัจจุบัน 100 cd/m2 เป็น 1000 cd/m2) และการใช้พื้นที่สีที่กว้างขึ้นมาก (BT 2020) ปัจจุบันนี้ HDR เป็นองค์ประกอบสำคัญของการพัฒนา 4K UHD ในวงการทีวี
Android 10 รองรับวิดีโอ HDR ต่อไปนี้
- HDR10
- VP9
- HDR10+
ตั้งแต่ Android 9 ขึ้นไป MediaCodec จะรายงานข้อมูลเมตา HDR โดยไม่คำนึงถึงโหมด Tunnel
คุณจะได้รับข้อมูลที่ถอดรหัสแล้วพร้อมกับข้อมูลเมตาแบบคงที่/แบบไดนามิกในโหมดที่ไม่ใช่การเชื่อมต่อผ่านอุโมงค์ สำหรับ HDR10
และ VP9Profile2 ที่ใช้ข้อมูลเมตาแบบคงที่ ระบบจะรายงานข้อมูลเหล่านี้ในรูปแบบเอาต์พุตที่มีคีย์
KEY_HDR_STATIC_INFO สำหรับ HDR10+ ที่ใช้ข้อมูลเมตาแบบไดนามิก ระบบจะรายงานข้อมูลนี้ด้วย
คีย์ KEY_HDR10_PLUS_INFO ในรูปแบบเอาต์พุต และอาจเปลี่ยนแปลงสำหรับแต่ละเฟรมเอาต์พุต
ดูข้อมูลเพิ่มเติมได้ที่การทำอุโมงค์มัลติมีเดีย
ตั้งแต่ Android 7.0 เป็นต้นมา การรองรับ HDR ในช่วงแรกจะรวมถึง การสร้างค่าคงที่ที่เหมาะสมสำหรับการค้นหาและการตั้งค่าไปป์ไลน์วิดีโอ HDR ซึ่งหมายถึงการกำหนดประเภทตัวแปลงรหัสและโหมดการแสดงผล รวมถึงการระบุ วิธีส่งข้อมูล HDR ไปยัง MediaCodec และส่งไปยังตัวถอดรหัส HDR
จุดประสงค์ของเอกสารนี้คือเพื่อช่วยให้นักพัฒนาแอปพลิเคชันรองรับการเล่นสตรีม HDR และช่วยให้ OEM และ SOC เปิดใช้ฟีเจอร์ HDR ได้
เทคโนโลยี HDR ที่รองรับ
ตั้งแต่ Android 7.0 ขึ้นไป ระบบจะรองรับเทคโนโลยี HDR ต่อไปนี้
| เทคโนโลยี | Dolby Vision | HDR10 | VP9-HLG | VP9-PQ |
|---|---|---|---|---|
| ตัวแปลงรหัส | AVC/HEVC | HEVC | VP9 | VP9 |
| ฟังก์ชันการโอน | ST-2084 | ST-2084 | HLG | ST-2084 |
| ประเภทข้อมูลเมตา HDR | ไดนามิก | คงที่ | ไม่มี | คงที่ |
ใน Android 7.0 มีการกำหนดเฉพาะการเล่น HDR ผ่านโหมด Tunnel แต่อุปกรณ์อาจเพิ่มการรองรับการเล่น HDR บน SurfaceView โดยใช้บัฟเฟอร์วิดีโอแบบทึบแสง กล่าวคือ
- ไม่มี Android API มาตรฐานสำหรับตรวจสอบว่ารองรับการเล่น HDR หรือไม่ โดยใช้ตัวถอดรหัสที่ไม่ใช่แบบ Tunnel
- ตัวถอดรหัสวิดีโอแบบ Tunnel ที่โฆษณาความสามารถในการเล่น HDR ต้อง รองรับการเล่น HDR เมื่อเชื่อมต่อกับจอแสดงผลที่รองรับ HDR
- AOSP Android เวอร์ชัน 7.0 ไม่รองรับการจัดองค์ประกอบ GL ของเนื้อหา HDR
Discovery
การเล่น HDR ต้องใช้ตัวถอดรหัสที่รองรับ HDR และเชื่อมต่อกับ จอแสดงผลที่รองรับ HDR เทคโนโลยีบางอย่างอาจต้องใช้ตัวแยกเฉพาะ (ไม่บังคับ)
Display
แอปพลิเคชันต้องใช้ Display.getHdrCapabilities
API ใหม่เพื่อค้นหาเทคโนโลยี HDR ที่จอแสดงผลที่ระบุรองรับ ซึ่งโดยพื้นฐานแล้วคือข้อมูลในบล็อกข้อมูลเมตาแบบคงที่ของ EDID ตามที่กำหนดไว้ใน CTA-861.3
public Display.HdrCapabilities getHdrCapabilities()
แสดงความสามารถ HDR ของจอแสดงผลDisplay.HdrCapabilities
แคปซูลความสามารถ HDR ของจอแสดงผลที่ระบุ เช่น ประเภท HDR ที่รองรับและรายละเอียดเกี่ยวกับข้อมูลความสว่างที่ต้องการ
ค่าคงที่:
int HDR_TYPE_DOLBY_VISION
รองรับ Dolby Visionint HDR_TYPE_HDR10
รองรับ HDR10 / PQint HDR_TYPE_HDR10_PLUS
รองรับ HDR10+int HDR_TYPE_HLG
รองรับ Hybrid Log-Gammafloat INVALID_LUMINANCE
ค่าความสว่างไม่ถูกต้อง
เมธอดสาธารณะ:
float getDesiredMaxAverageLuminance()
แสดงผลข้อมูลความสว่างโดยเฉลี่ยสูงสุดของเฟรมเนื้อหาที่ต้องการใน cd/cd/m2 สำหรับ จอแสดงผลนี้float getDesiredMaxLuminance()
แสดงผลข้อมูลความสว่างสูงสุดของเนื้อหาที่ต้องการใน cd/cd/m2 สำหรับจอแสดงผลนี้float getDesiredMinLuminance()
แสดงผลข้อมูลความส่องสว่างขั้นต่ำของเนื้อหาที่ต้องการในหน่วย cd/cd/m2 สำหรับจอแสดงผลนี้int[] getSupportedHdrTypes()
รับประเภท HDR ที่รองรับของจอแสดงผลนี้ (ดูค่าคงที่) แสดงอาร์เรย์ว่าง หากจอแสดงผลไม่รองรับ HDR
เครื่องมือถอดรหัส
แอปพลิเคชันต้องใช้ API
CodecCapabilities.profileLevels ที่มีอยู่เพื่อยืนยันการรองรับ
โปรไฟล์ใหม่ที่รองรับ HDR
Dolby Vision
MediaFormat ค่าคงที่ของ MIME:
String MIMETYPE_VIDEO_DOLBY_VISION
MediaCodecInfo.CodecProfileLevel ค่าคงที่ของโปรไฟล์
int DolbyVisionProfileDvavPen int DolbyVisionProfileDvavPer int DolbyVisionProfileDvheDen int DolbyVisionProfileDvheDer int DolbyVisionProfileDvheDtb int DolbyVisionProfileDvheDth int DolbyVisionProfileDvheDtr int DolbyVisionProfileDvheStn
แอปพลิเคชันวิดีโอต้องต่อเลเยอร์วิดีโอและข้อมูลเมตาของ Dolby Vision เข้าด้วยกันเป็นบัฟเฟอร์เดียวต่อเฟรม ซึ่ง MediaExtractor ที่รองรับ Dolby Vision จะดำเนินการนี้โดยอัตโนมัติ
HEVC HDR 10
MediaCodecInfo.CodecProfileLevel ค่าคงที่ของโปรไฟล์
int HEVCProfileMain10HDR10 int HEVCProfileMain10HDR10Plus
VP9 HLG และ PQ
MediaCodecInfo.CodecProfileLevel โปรไฟล์
ค่าคงที่:
int VP9Profile2HDR int VP9Profile2HDR10Plus int VP9Profile3HDR int VP9Profile3HDR10Plus
หากแพลตฟอร์มรองรับตัวถอดรหัสที่รองรับ HDR แพลตฟอร์มนั้นจะต้องรองรับตัวแยกที่รองรับ HDR ด้วย
เฉพาะดีโคดเดอร์ที่ผ่านการเชื่อมต่ออุโมงค์เท่านั้นที่รับประกันว่าจะเล่นเนื้อหา HDR ได้ การเล่นโดยตัวถอดรหัสที่ไม่ใช่แบบ Tunnel อาจทำให้ข้อมูล HDR สูญหายและ เนื้อหาถูกแปลงเป็นระดับสี SDR
เครื่องมือแยกข้อมูล
คอนเทนเนอร์ต่อไปนี้รองรับเทคโนโลยี HDR ต่างๆ ใน Android 7.0
| เทคโนโลยี | Dolby Vision | HDR10 | VP9-HLG | VP9-PQ |
|---|---|---|---|---|
| คอนเทนเนอร์ | MP4 | MP4 | WebM | WebM |
แพลตฟอร์มไม่รองรับการค้นหาว่าแทร็ก (ของไฟล์) ต้องรองรับ HDR หรือไม่ แอปพลิเคชันอาจแยกวิเคราะห์ข้อมูลเฉพาะของตัวแปลงรหัส เพื่อพิจารณาว่าแทร็กต้องใช้โปรไฟล์ HDR ที่เฉพาะเจาะจงหรือไม่
สรุป
ข้อกำหนดของคอมโพเนนต์สำหรับเทคโนโลยี HDR แต่ละรายการแสดงอยู่ในตารางต่อไปนี้
| เทคโนโลยี | Dolby Vision | HDR10 | VP9-HLG | VP9-PQ |
|---|---|---|---|---|
| ประเภท HDR ที่รองรับ (จอแสดงผล) | HDR_TYPE_DOLBY_VISION | HDR_TYPE_HDR10 | HDR_TYPE_HLG | HDR_TYPE_HDR10 |
| คอนเทนเนอร์ (ตัวแยก) | MP4 | MP4 | WebM | WebM |
| เครื่องมือถอดรหัส | MIMETYPE_VIDEO_DOLBY_VISION | MIMETYPE_VIDEO_HEVC | MIMETYPE_VIDEO_VP9 | MIMETYPE_VIDEO_VP9 |
| โปรไฟล์ (ตัวถอดรหัส) | โปรไฟล์ Dolby อย่างใดอย่างหนึ่ง | HEVCProfileMain10HDR10 | VP9Profile2HDR หรือ VP9Profile3HDR | VP9Profile2HDR หรือ VP9Profile3HDR |
หมายเหตุ:
- ระบบจะแพ็กบิตสตรีม Dolby Vision ในคอนเทนเนอร์ MP4 ตามวิธีที่ Dolby กำหนด แอปพลิเคชันอาจใช้ตัวแยกที่รองรับ Dolby ของตนเองได้ตราบใดที่จัดแพ็กเกจหน่วยการเข้าถึงจากเลเยอร์ที่เกี่ยวข้องเป็นหน่วยการเข้าถึงเดียวสำหรับตัวถอดรหัสตามที่ Dolby กำหนด
- แพลตฟอร์มอาจรองรับตัวแยกที่รองรับ HDR แต่ไม่มีตัวถอดรหัสที่รองรับ HDR ที่สอดคล้องกัน
การเล่น
หลังจากที่แอปพลิเคชันได้รับการยืนยันว่ารองรับการเล่น HDR แล้ว แอปจะเล่นเนื้อหา HDR ได้ในลักษณะเดียวกับการเล่นเนื้อหาที่ไม่ใช่ HDR โดยมีข้อควรระวังดังนี้
- สำหรับ Dolby Vision เรายังไม่สามารถระบุได้ในทันทีว่าไฟล์/แทร็กสื่อที่เฉพาะเจาะจงต้องใช้ตัวถอดรหัสที่รองรับ HDR หรือไม่ แอปพลิเคชันต้องมีข้อมูลนี้ล่วงหน้าหรือสามารถรับข้อมูลนี้ได้โดยการแยกวิเคราะห์ส่วนข้อมูลเฉพาะของตัวแปลงรหัสของ MediaFormat
CodecCapabilities.isFormatSupportedไม่ได้พิจารณาว่าจำเป็นต้องใช้ฟีเจอร์ตัวถอดรหัสแบบอุโมงค์เพื่อรองรับโปรไฟล์ดังกล่าวหรือไม่
เปิดใช้การรองรับแพลตฟอร์ม HDR
ผู้จำหน่าย SoC และ OEM ต้องดำเนินการเพิ่มเติมเพื่อเปิดใช้แพลตฟอร์ม HDR สำหรับอุปกรณ์
การเปลี่ยนแปลงแพลตฟอร์มใน Android 7.0 สำหรับ HDR
การเปลี่ยนแปลงที่สำคัญบางอย่างในแพลตฟอร์ม (แอป/เลเยอร์เนทีฟ) ที่ OEM และ SOC ควรทราบมีดังนี้
Display
องค์ประกอบของฮาร์ดแวร์
แพลตฟอร์มที่รองรับ HDR ต้องรองรับการผสมเนื้อหา HDR กับเนื้อหาที่ไม่ใช่ HDR Android ไม่ได้กำหนดลักษณะและการดำเนินการผสมที่แน่นอนไว้ตั้งแต่เวอร์ชัน 7.0 แต่โดยทั่วไปกระบวนการนี้จะทำตามขั้นตอนต่อไปนี้
- กำหนดพื้นที่/ปริมาณสีเชิงเส้นที่มีเลเยอร์ทั้งหมดที่จะ
คอมโพสิต โดยอิงตามสี การมาสเตอร์ และข้อมูลเมตาแบบไดนามิกที่อาจเกิดขึ้นของเลเยอร์
หากคอมโพสิตกับจอแสดงผลโดยตรง นี่อาจเป็นพื้นที่เชิงเส้น ที่ตรงกับปริมาณสีของจอแสดงผล - แปลงเลเยอร์ทั้งหมดเป็นพื้นที่สีทั่วไป
- ทำการผสม
- หากแสดงผ่าน HDMI ให้ทำดังนี้
- กำหนดสี การมาสเตอร์ และข้อมูลเมตาแบบไดนามิกที่อาจเกิดขึ้นสำหรับ ฉากที่ผสมผสาน
- แปลงฉากที่ผสมผสานแล้วเป็นพื้นที่/ปริมาตรสีที่ได้มา
- หากแสดงผลโดยตรงไปยังจอแสดงผล ให้แปลงฉากที่ผสมแล้ว เป็นสัญญาณจอแสดงผลที่ต้องการเพื่อสร้างฉากนั้น
การค้นพบ Display
การค้นหาจอแสดงผล HDR รองรับเฉพาะผ่าน HWC2 ผู้ติดตั้งใช้งานอุปกรณ์ต้อง เปิดใช้อะแดปเตอร์ HWC2 ที่เผยแพร่พร้อม Android 7.0 เป็นการเลือก เพื่อให้ฟีเจอร์นี้ทำงานได้ ดังนั้น แพลตฟอร์มจึงต้องเพิ่มการรองรับ HWC2 หรือขยาย เฟรมเวิร์ก AOSP เพื่อให้มีวิธีระบุข้อมูลนี้ HWC2 จะแสดง API ใหม่ เพื่อเผยแพร่ข้อมูลแบบคงที่ของ HDR ไปยังเฟรมเวิร์กและแอปพลิเคชัน
HDMI
- จอแสดงผล HDMI ที่เชื่อมต่อจะโฆษณา ความสามารถ HDR ผ่าน HDMI EDID ตามที่กำหนดไว้ใน CTA-861.3 ส่วนที่ 4.2
- ต้องใช้การแมป EOTF ต่อไปนี้
- ET_0 แกมมาแบบดั้งเดิม - ช่วงความสว่าง SDR: ไม่ได้แมปกับ HDR ประเภทใด
- ET_1 แกมมาแบบเดิม - ช่วงความสว่าง HDR: ไม่ได้แมปกับ HDR ประเภทใด
- ET_2 SMPTE ST 2084 - แมปกับ HDR ประเภท HDR10
- การส่งสัญญาณการรองรับ Dolby Vision หรือ HLG ผ่าน HDMI จะดำเนินการตามที่หน่วยงานที่เกี่ยวข้องกำหนด
- โปรดทราบว่า HWC2 API ใช้ค่าความสว่างที่ต้องการแบบลอย ดังนั้นจึงต้องแปลงค่า EDID แบบ 8 บิต ในลักษณะที่เหมาะสม
ตัวถอดรหัส
แพลตฟอร์มต้องเพิ่มตัวถอดรหัสแบบ Tunnel ที่รองรับ HDR และโฆษณาการรองรับ HDR โดยทั่วไปแล้ว ตัวถอดรหัสที่รองรับ HDR ต้องมีคุณสมบัติดังนี้
- รองรับการถอดรหัสแบบอุโมงค์ (
FEATURE_TunneledPlayback) - รองรับข้อมูลเมตาแบบคงที่ของ HDR
(
OMX.google.android.index.describeHDRColorInfo) และการ ส่งต่อข้อมูลไปยังการแสดงผล/องค์ประกอบฮาร์ดแวร์ สำหรับ HLG จะต้องส่งข้อมูลเมตาที่เหมาะสม ไปยังจอแสดงผล - รองรับคำอธิบายสี
(
OMX.google.android.index.describeColorAspects) และการ ส่งต่อไปยังองค์ประกอบการแสดงผล/ฮาร์ดแวร์ - รองรับข้อมูลเมตา HDR แบบฝังตามที่กำหนดโดยมาตรฐานที่เกี่ยวข้อง
รองรับตัวถอดรหัส Dolby Vision
หากต้องการรองรับ Dolby Vision แพลตฟอร์มต้องเพิ่มตัวถอดรหัส HDR OMX ที่รองรับ Dolby Vision เนื่องจากลักษณะเฉพาะของ Dolby Vision โดยปกติแล้วจะเป็นตัวถอดรหัส Wrapper รอบตัวถอดรหัส AVC และ/หรือ HEVC อย่างน้อย 1 ตัว รวมถึง Compositor โดยดีโคดเดอร์ดังกล่าวต้องมีคุณสมบัติดังนี้
- รองรับประเภท MIME "video/dolby-vision"
- โฆษณาโปรไฟล์/ระดับ Dolby Vision ที่รองรับ
- ยอมรับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงย่อยของทุกเลเยอร์ตามที่ Dolby กำหนด
- ยอมรับข้อมูลเฉพาะตัวแปลงรหัสที่กำหนดโดย Dolby เช่น ข้อมูลที่มี โปรไฟล์/ระดับ Dolby Vision และอาจมีข้อมูลเฉพาะตัวแปลงรหัสสำหรับ ตัวถอดรหัสภายใน
- รองรับการสลับแบบปรับอัตโนมัติระหว่างโปรไฟล์/ระดับ Dolby Vision ตามที่ Dolby กำหนด
เมื่อกำหนดค่าตัวถอดรหัส ระบบจะไม่สื่อสารโปรไฟล์ Dolby จริงกับตัวแปลงรหัส โดยจะดำเนินการผ่านข้อมูลเฉพาะตัวแปลงรหัสหลังจากเริ่มตัวถอดรหัสแล้วเท่านั้น แพลตฟอร์มอาจเลือกที่จะรองรับตัวถอดรหัส Dolby Vision หลายตัว ตัวหนึ่งสำหรับโปรไฟล์ AVC และอีกตัวสำหรับโปรไฟล์ HEVC เพื่อให้สามารถ เริ่มต้นตัวแปลงรหัสพื้นฐานในระหว่างการกำหนดค่า หากตัวถอดรหัส Dolby Vision ตัวเดียวรองรับทั้ง 2 ประเภทโปรไฟล์ ก็ต้องรองรับการสลับ ระหว่างโปรไฟล์เหล่านั้นแบบไดนามิกในลักษณะที่ปรับเปลี่ยนได้ด้วย
หากแพลตฟอร์มมีตัวถอดรหัสที่รองรับ Dolby Vision นอกเหนือจาก การรองรับตัวถอดรหัส HDR ทั่วไป แพลตฟอร์มนั้นจะต้องดำเนินการต่อไปนี้
- จัดเตรียมโปรแกรมแยกที่รองรับ Dolby Vision แม้ว่าจะไม่รองรับ การเล่น HDR ก็ตาม
- ระบุตัวถอดรหัสที่รองรับโปรไฟล์ภาพตามที่ Dolby กำหนด
รองรับตัวถอดรหัส HDR10
หากต้องการรองรับ HDR10 แพลตฟอร์มต้องเพิ่มตัวถอดรหัส OMX ที่รองรับ HDR10 โดยปกติแล้วจะเป็นตัวถอดรหัส HEVC ที่มีการเชื่อมต่อแบบอุโมงค์ซึ่งรองรับการแยกวิเคราะห์และการจัดการ ข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ดีโคดเดอร์ดังกล่าว (นอกเหนือจากการรองรับดีโคดเดอร์ HDR ทั่วไป) ต้องมีคุณสมบัติดังนี้
- รองรับประเภท MIME "video/hevc"
- โฆษณา HEVCMain10HDR10 ที่รองรับ การรองรับโปรไฟล์ HEVCMain10HRD10 ยังต้องรองรับโปรไฟล์ HEVCMain10 ซึ่งต้องรองรับ โปรไฟล์ HEVCMain ในระดับเดียวกันด้วย
- รองรับการแยกวิเคราะห์บล็อก SEI ของข้อมูลเมตามาสเตอร์ริ่ง รวมถึงข้อมูลอื่นๆ ที่เกี่ยวข้องกับ HDR ที่อยู่ใน SPS
รองรับตัวถอดรหัส VP9
หากต้องการรองรับ VP9 HDR แพลตฟอร์มต้องเพิ่มตัวถอดรหัส HDR OMX ที่รองรับ VP9 โปรไฟล์ 2 โดยปกติแล้วจะเป็นตัวถอดรหัส VP9 ที่มีการเชื่อมต่อแบบอุโมงค์ซึ่งรองรับการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) ต้องมีคุณสมบัติดังนี้
- รองรับประเภท MIME "video/x-vnd.on2.vp9"
- โฆษณา VP9Profile2HDR ที่รองรับ การรองรับโปรไฟล์ VP9Profile2HDR ยังต้องรองรับโปรไฟล์ VP9Profile2 ในระดับเดียวกันด้วย
เครื่องมือดึง
รองรับตัวแยก Dolby Vision
แพลตฟอร์มที่รองรับตัวถอดรหัส Dolby Vision ต้องเพิ่มการรองรับตัวแยก Dolby (เรียกว่าตัวแยก Dolby) สำหรับเนื้อหา Dolby Video
- โปรแกรมแยก MP4 ทั่วไปจะแยกได้เฉพาะเลเยอร์ฐานจากไฟล์ แต่จะแยกเลเยอร์การปรับปรุงหรือข้อมูลเมตาไม่ได้ ดังนั้นจึงต้องใช้โปรแกรมแยกข้อมูล Dolby พิเศษเพื่อแยกข้อมูลจากไฟล์
- โปรแกรมแยก Dolby ต้องแสดงแทร็ก 1-2 แทร็กสำหรับแทร็กวิดีโอ Dolby แต่ละแทร็ก
(กลุ่ม):
- แทร็ก Dolby Vision HDR ที่มีประเภทเป็น "video/dolby-vision" สำหรับ สตรีม Dolby แบบ 2/3 เลเยอร์ที่รวมกัน รูปแบบหน่วยการเข้าถึงของแทร็ก HDR ซึ่ง กำหนดวิธีแพ็กเกจหน่วยการเข้าถึงจากเลเยอร์ฐาน/การปรับปรุง/ข้อมูลเมตา ลงในบัฟเฟอร์เดียวเพื่อถอดรหัสเป็นเฟรม HDR เดียว จะต้อง กำหนดโดย Dolby
- หากแทร็กวิดีโอ Dolby Vision มีเลเยอร์ฐาน (BL) แยกต่างหาก (เข้ากันได้แบบย้อนหลัง) โปรแกรมแยกจะต้องแสดงเลเยอร์นี้เป็นแทร็ก "video/avc" หรือ "video/hevc" แยกต่างหากด้วย โปรแกรมแยกจะต้องให้สิทธิ์เข้าถึง AVC/HEVC หน่วยปกติสำหรับแทร็กนี้
- แทร็ก BL ต้องมี track-unique-ID ("track-ID") เดียวกับแทร็ก HDR เพื่อให้แอปเข้าใจว่าแทร็กทั้ง 2 เป็นการเข้ารหัสวิดีโอเดียวกัน
- แอปพลิเคชันสามารถเลือกแทร็กที่จะใช้โดยอิงตามความสามารถของแพลตฟอร์ม
- ต้องแสดงโปรไฟล์/ระดับ Dolby Vision ในรูปแบบแทร็กของ แทร็ก HDR
- หากแพลตฟอร์มมีตัวถอดรหัสที่รองรับ Dolby Vision ก็ต้องมีตัวแยกที่รองรับ Dolby Vision ด้วย แม้ว่าจะไม่รองรับการเล่น HDR ก็ตาม
รองรับตัวแยก HDR10 และ VP9 HDR
โดยไม่มีข้อกำหนดเพิ่มเติมสำหรับโปรแกรมแยกเพื่อรองรับ HDR10 หรือ VP9 HLG แพลตฟอร์มต้องขยายโปรแกรมแยก MP4 เพื่อรองรับ VP9 PQ ใน MP4 ระบบจะต้องเผยแพร่ข้อมูลเมตาแบบคงที่ของ HDR ในสตรีมบิต VP9 PQ เพื่อให้ ข้อมูลเมตานี้ส่งไปยังตัวถอดรหัส VP9 PQ และไปยังจอแสดงผลผ่าน ไปป์ไลน์ MediaExtractor => MediaCodec ปกติ
ส่วนขยาย Stagefright สำหรับการรองรับ Dolby Vision
แพลตฟอร์มต้องเพิ่มการรองรับรูปแบบ Dolby Vision ลงใน Stagefright ดังนี้
- รองรับการค้นหาคำจำกัดความของพอร์ตสำหรับพอร์ตที่บีบอัด
- รองรับการแจงนับโปรไฟล์/ระดับสำหรับตัวถอดรหัส DV
- รองรับการเปิดเผยโปรไฟล์/ระดับ DV สำหรับแทร็ก DV HDR
รายละเอียดการใช้งานเฉพาะเทคโนโลยี
ไปป์ไลน์ตัวถอดรหัส HDR10

รูปที่ 1 ไปป์ไลน์ HDR10
สตรีมบิต HDR10 จะอยู่ในคอนเทนเนอร์ MP4 แอปพลิเคชันใช้ตัวแยก MP4 ปกติ เพื่อแยกข้อมูลเฟรมและส่งไปยังตัวถอดรหัส
- MPEG4 Extractor
MPEG4Extractor จะจดจำสตรีมบิต HDR10 เป็นเพียงสตรีม HEVC ปกติ และจะดึงข้อมูลแทร็ก HDR ที่มีประเภท "video/HEVC" ออกมา เฟรมเวิร์กจะเลือกตัวแปลงรหัสวิดีโอ HEVC ที่รองรับ โปรไฟล์ Main10HDR10 เพื่อถอดรหัสแทร็กนั้น - ตัวถอดรหัส HEVC
ข้อมูล HDR อยู่ใน SEI หรือ SPS โดยตัวถอดรหัส HEVC จะได้รับเฟรมที่มีข้อมูล HDR ก่อน จากนั้นตัวถอดรหัสจะดึงข้อมูล HDR และแจ้งให้แอปพลิเคชันทราบว่ากำลังถอดรหัสวิดีโอ HDR ระบบจะรวมข้อมูล HDR ไว้ในรูปแบบเอาต์พุตของตัวถอดรหัส ซึ่งจะเผยแพร่ไปยัง พื้นผิวในภายหลัง
การดำเนินการของผู้ให้บริการ
- ประกาศโปรไฟล์และระดับตัวถอดรหัส HDR ที่รองรับประเภท OMX ตัวอย่าง:
OMX_VIDEO_HEVCProfileMain10HDR10(และMain10) - ใช้การรองรับดัชนี:
'
OMX.google.android.index.describeHDRColorInfo' - ใช้การรองรับดัชนี:
'
OMX.google.android.index.describeColorAspects' - ใช้การรองรับการแยกวิเคราะห์ SEI ของข้อมูลเมตาการมาสเตอร์
ไปป์ไลน์ตัวถอดรหัส Dolby Vision

รูปที่ 2 ไปป์ไลน์ Dolby Vision
ระบบจะแพ็กเกจบิตสตรีม Dolby ในคอนเทนเนอร์ MP4 ตามที่ Dolby กำหนด ในทางทฤษฎีแล้ว แอปพลิเคชันสามารถใช้โปรแกรมแยก MP4 ทั่วไปเพื่อแยก เลเยอร์ฐาน เลเยอร์การปรับปรุง และเลเยอร์ข้อมูลเมตาได้อย่างอิสระ อย่างไรก็ตาม วิธีนี้ไม่เหมาะกับโมเดล MediaExtractor/MediaCodec ของ Android ในปัจจุบัน
- DolbyExtractor:
- DolbyExtractor จะจดจำบิตสตรีม Dolby ซึ่งจะแสดงเลเยอร์ต่างๆ เป็น 1-2 แทร็กสำหรับแทร็กวิดีโอ Dolby (กลุ่ม) แต่ละแทร็ก ดังนี้
- แทร็ก HDR ที่มีประเภทเป็น "video/dolby-vision" สำหรับสตรีม Dolby แบบรวม 2/3 เลเยอร์ รูปแบบหน่วยการเข้าถึงของแทร็ก HDR ซึ่งกำหนด วิธีแพ็กเกจหน่วยการเข้าถึงจากเลเยอร์ฐาน/การปรับปรุง/ข้อมูลเมตา ลงในบัฟเฟอร์เดียวเพื่อถอดรหัสเป็นเฟรม HDR เดียว จะกำหนด โดย Dolby
- (ไม่บังคับ เฉพาะในกรณีที่ BL เข้ากันได้แบบย้อนหลัง) แทร็ก BL มีเฉพาะเลเยอร์พื้นฐาน ซึ่งต้องถอดรหัสได้ด้วยตัวถอดรหัส MediaCodec ปกติ เช่น ตัวถอดรหัส AVC/HEVC โปรแกรมแยกควรระบุหน่วยการเข้าถึง AVC/HEVC ปกติสำหรับแทร็กนี้ แทร็ก BL นี้ต้องมี track-unique-ID ("track-ID") เดียวกันกับแทร็ก Dolby เพื่อให้แอปพลิเคชันเข้าใจว่าแทร็กทั้ง 2 นี้ เป็นการเข้ารหัสวิดีโอเดียวกัน
- แอปพลิเคชันสามารถเลือกแทร็กที่จะใช้โดยอิงตามความสามารถของแพลตฟอร์ม
- เนื่องจากแทร็ก HDR มีประเภท HDR ที่เฉพาะเจาะจง เฟรมเวิร์กจึงเลือก ตัวถอดรหัสวิดีโอ Dolby เพื่อถอดรหัสแทร็กนั้น ตัวถอดรหัสวิดีโอ AVC/HEVC ปกติจะถอดรหัสแทร็ก BL
- DolbyExtractor จะจดจำบิตสตรีม Dolby ซึ่งจะแสดงเลเยอร์ต่างๆ เป็น 1-2 แทร็กสำหรับแทร็กวิดีโอ Dolby (กลุ่ม) แต่ละแทร็ก ดังนี้
- DolbyDecoder:
- DolbyDecoder จะได้รับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงที่จำเป็นสำหรับทุกเลเยอร์ (EL+BL+MD หรือ BL+MD)
- ระบบจะแพ็กเกจข้อมูล CSD (ข้อมูลเฉพาะของตัวแปลงรหัส เช่น SPS+PPS+VPS) สำหรับ แต่ละเลเยอร์ลงในเฟรม CSD 1 เฟรมตามที่ Dolby กำหนด ต้องมีเฟรม CSD เดียว
การดำเนินการของ Dolby
- กำหนดการแพ็กเกจหน่วยการเข้าถึงสำหรับรูปแบบคอนเทนเนอร์ Dolby ต่างๆ (เช่น BL+EL+MD) สำหรับตัวถอดรหัส Dolby แบบนามธรรม (เช่น รูปแบบบัฟเฟอร์ ที่ตัวถอดรหัส HDR คาดหวัง)
- กำหนดการแพ็กเกจ CSD สำหรับตัวถอดรหัส Dolby แบบนามธรรม
การดำเนินการของผู้ให้บริการ
- ใช้ตัวแยก Dolby Dolby ก็ทำได้เช่นกัน
- ผสานรวม DolbyExtractor เข้ากับเฟรมเวิร์ก จุดแรกเข้าคือ
frameworks/av/media/libstagefright/MediaExtractor.cpp - ประกาศโปรไฟล์และระดับตัวถอดรหัส HDR OMX
type ตัวอย่างเช่น
OMX_VIDEO_DOLBYPROFILETYPEและOMX_VIDEO_DOLBYLEVELTYP - ใช้การรองรับดัชนี:
'OMX.google.android.index.describeColorAspects' - ส่งต่อข้อมูลเมตา HDR แบบไดนามิกไปยังแอปและแพลตฟอร์มในแต่ละเฟรม โดยปกติแล้ว ข้อมูลนี้จะต้องรวมอยู่ในเฟรมที่ถอดรหัสแล้ว ตามที่ Dolby กำหนด เนื่องจากมาตรฐาน HDMI ไม่มีวิธี ส่งข้อมูลนี้ไปยังจอแสดงผล
ไปป์ไลน์ตัวถอดรหัส VP9

รูปที่ 3 ไปป์ไลน์ VP9-PQ
สตรีมบิต VP9 จะอยู่ในแพ็กเกจคอนเทนเนอร์ WebM ในลักษณะที่ทีม WebM กำหนด แอปพลิเคชันต้องใช้โปรแกรมแยก WebM เพื่อแยกข้อมูลเมตา HDR จาก บิตสตรีมก่อนส่งเฟรมไปยังตัวถอดรหัส
- WebM Extractor
- WebM Extractor จะดึงข้อมูลเมตา HDR และเฟรมจาก คอนเทนเนอร์
- ตัวถอดรหัส VP9
- ตัวถอดรหัสจะรับสตรีมบิต Profile2 และถอดรหัสเป็นสตรีม VP9 ตามปกติ
- ตัวถอดรหัสจะได้รับข้อมูลเมตาแบบคงที่ของ HDR จากเฟรมเวิร์ก
- ตัวถอดรหัสจะได้รับข้อมูลเมตาแบบคงที่ผ่านหน่วยการเข้าถึงบิตสตรีมสำหรับสตรีม VP9 PQ
- ตัวถอดรหัส VP9 ต้องสามารถเผยแพร่ข้อมูลเมตาแบบคงที่/แบบไดนามิกของ HDR ไปยังจอแสดงผลได้
การดำเนินการของผู้ให้บริการ
- ใช้การรองรับดัชนี:
OMX.google.android.index.describeHDRColorInfo - ใช้การรองรับดัชนี:
OMX.google.android.index.describeColorAspects - เผยแพร่ข้อมูลเมตาแบบคงที่ของ HDR