วิดีโอ High Dynamic Range (HDR) เป็นเทคโนโลยีขั้นถัดไปในการถอดรหัสวิดีโอคุณภาพสูง ซึ่งให้คุณภาพการจำลองฉากที่ไม่ซ้ำใคร โดยเพิ่มช่วงไดนามิกขององค์ประกอบความสว่างอย่างมาก (จาก 100 cd/m2 ในปัจจุบันเป็น 1,000 cd/m2) และใช้พื้นที่สีที่กว้างขึ้นมาก (BT 2020) ซึ่งตอนนี้ได้กลายเป็นองค์ประกอบหลักของการพัฒนา 4K UHD ในวงการทีวี
Android 10 รองรับวิดีโอ HDR ต่อไปนี้
- HDR10
- VP9
- HDR10+
ตั้งแต่ Android 9 ขึ้นไป MediaCodec จะรายงานข้อมูลเมตา HDR ไม่ว่าจะใช้โหมดการทําอุโมงค์หรือไม่ก็ตาม
คุณจะได้รับข้อมูลที่ถอดรหัสแล้วพร้อมกับข้อมูลเมตาแบบคงที่/แบบไดนามิกในโหมดที่ไม่ใช้อุโมงค์ สำหรับ 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 หรือไม่โดยใช้โปรแกรมถอดรหัสที่ไม่ได้ใช้อุโมงค์
- ตัวถอดรหัสวิดีโอแบบ Tunneled ที่โฆษณาความสามารถในการเล่น HDR จะต้องรองรับการเล่น HDR เมื่อเชื่อมต่อกับจอแสดงผลที่รองรับ HDR
- เวอร์ชัน AOSP Android 7.0 ไม่รองรับการคอมโพสิชัน GL ของเนื้อหา HDR
Discovery
การเล่น HDR ต้องใช้โปรแกรมถอดรหัสที่รองรับ HDR และการเชื่อมต่อกับจอแสดงผลที่รองรับ HDR บางเทคโนโลยีอาจต้องใช้เครื่องมือแยกเฉพาะ (ไม่บังคับ)
จอแสดงผล
แอปพลิเคชันจะใช้ 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
ตัวถอดรหัส
แอปพลิเคชันจะใช้
CodecCapabilities.profileLevels
API ที่มีอยู่เพื่อยืนยันการรองรับโปรไฟล์ 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
profile
ค่าคงที่:
int VP9Profile2HDR int VP9Profile2HDR10Plus int VP9Profile3HDR int VP9Profile3HDR10Plus
หากแพลตฟอร์มรองรับโปรแกรมถอดรหัสที่รองรับ HDR ก็จะรองรับโปรแกรมแยกที่รองรับ HDR ด้วย
มีเพียงโปรแกรมถอดรหัสแบบ Tunnel เท่านั้นที่รับประกันว่าจะเล่นเนื้อหา HDR ได้ การเล่นโดยโปรแกรมถอดรหัสที่ไม่ได้ใช้อุโมงค์อาจทำให้ข้อมูล 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 |
คอนเทนเนอร์ (Extractor) | 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
ไม่พิจารณาว่าจำเป็นต้องใช้ฟีเจอร์ตัวถอดรหัสแบบ Tunnel เพื่อรองรับโปรไฟล์ดังกล่าวหรือไม่
เปิดใช้การรองรับแพลตฟอร์ม HDR
ผู้ให้บริการ SoC และ OEM ต้องทำขั้นตอนเพิ่มเติมเพื่อเปิดใช้การรองรับแพลตฟอร์ม HDR สำหรับอุปกรณ์
การเปลี่ยนแปลงแพลตฟอร์มใน Android 7.0 สำหรับ HDR
การเปลี่ยนแปลงที่สำคัญบางอย่างในแพลตฟอร์ม (เลเยอร์แอป/เนทีฟ) ที่ OEM และ SOC ควรทราบมีดังนี้
จอแสดงผล
องค์ประกอบฮาร์ดแวร์
แพลตฟอร์มที่รองรับ 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 จะต้องมีคุณสมบัติดังนี้
- รองรับการถอดรหัสแบบ Tunnel (
FEATURE_TunneledPlayback
) - รองรับข้อมูลเมตาแบบคงที่ของ HDR (
OMX.google.android.index.describeHDRColorInfo
) และการนำไปใช้กับองค์ประกอบการแสดงผล/ฮาร์ดแวร์ สำหรับ HLG คุณต้องส่งข้อมูลเมตาที่เหมาะสมไปยังจอแสดงผล - รองรับคำอธิบายสี (
OMX.google.android.index.describeColorAspects
) และการนำไปใช้กับองค์ประกอบการแสดงผล/ฮาร์ดแวร์ - รองรับข้อมูลเมตาที่ฝัง HDR ตามที่มาตรฐานที่เกี่ยวข้องกำหนด
การรองรับโปรแกรมถอดรหัส Dolby Vision
หากต้องการรองรับ Dolby Vision แพลตฟอร์มต้องเพิ่มโปรแกรมถอดรหัส OMX HDR ที่รองรับ Dolby Vision โดยทั่วไปแล้ว รายการนี้จะเป็นตัวถอดรหัสไฟล์ Wrapper ที่มีการถอดรหัส AVC และ/หรือ HEVC อย่างน้อย 1 ตัว รวมถึงโปรแกรมประกอบ โดยโปรแกรมถอดรหัสดังกล่าวต้องมีคุณสมบัติดังนี้
- รองรับประเภท MIME "video/dolby-vision"
- แสดงโปรไฟล์/ระดับ Dolby Vision ที่รองรับ
- ยอมรับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงย่อยของเลเยอร์ทั้งหมดตามที่ Dolby กำหนด
- ยอมรับข้อมูลเฉพาะตัวแปลงรหัสที่ Dolby กำหนด เช่น ข้อมูลที่มีโปรไฟล์/ระดับ Dolby Vision และอาจเป็นข้อมูลเฉพาะตัวแปลงรหัสสําหรับโปรแกรมถอดรหัสภายใน
- รองรับการสลับแบบปรับอัตโนมัติระหว่างโปรไฟล์/ระดับ Dolby Vision ตามข้อกำหนดของ Dolby
เมื่อกำหนดค่าโปรแกรมถอดรหัส ระบบจะไม่สื่อสารโปรไฟล์ Dolby จริงกับตัวแปลงรหัส แต่จะดำเนินการผ่านข้อมูลเฉพาะตัวแปลงรหัสหลังจากเริ่มโปรแกรมถอดรหัสแล้วเท่านั้น แพลตฟอร์มอาจเลือกรองรับโปรแกรมถอดรหัส Dolby Vision หลายรายการ โดย 1 รายการสำหรับโปรไฟล์ AVC และอีกรายการสำหรับโปรไฟล์ HEVC เพื่อให้สามารถเริ่มต้นโค้ดที่ฝังอยู่ได้ในระหว่างการตั้งค่า หากตัวถอดรหัส Dolby Vision ตัวเดียวรองรับโปรไฟล์ทั้ง 2 ประเภท ตัวถอดรหัสนั้นต้องรองรับการสลับระหว่างโปรไฟล์เหล่านั้นแบบไดนามิกในลักษณะที่ปรับเปลี่ยนได้
หากแพลตฟอร์มมีโปรแกรมถอดรหัสที่รองรับ Dolby Vision นอกเหนือจากการรองรับโปรแกรมถอดรหัส HDR ทั่วไป แพลตฟอร์มจะต้องมีคุณสมบัติดังนี้
- ระบุโปรแกรมแยกไฟล์ที่รองรับ Dolby Vision แม้ว่าจะไม่รองรับการเล่น HDR ก็ตาม
- ระบุโปรแกรมถอดรหัสที่รองรับโปรไฟล์ Vision ตามที่กำหนดโดย Dolby
รองรับโปรแกรมถอดรหัส HDR10
หากต้องการรองรับ HDR10 แพลตฟอร์มต้องเพิ่มโปรแกรมถอดรหัส OMX ที่รองรับ HDR10 ซึ่งโดยปกติแล้วจะเป็นโปรแกรมถอดรหัส HEVC แบบ Tunnel ที่รองรับการแยกวิเคราะห์และการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) ต้องมีดังนี้
- รองรับประเภท MIME "video/hevc"
- โฆษณา HEVCMain10HDR10 ที่รองรับ การรองรับโปรไฟล์ HEVCMain10HRD10 จำเป็นต้องรองรับโปรไฟล์ HEVCMain10 ด้วย ซึ่งจำเป็นต้องรองรับโปรไฟล์ HEVCMain ที่ระดับเดียวกัน
- รองรับการแยกวิเคราะห์บล็อก SEI ข้อมูลเมตามาสเตอร์ริ่ง รวมถึงข้อมูลอื่นๆ ที่เกี่ยวข้องกับ HDR ที่มีอยู่ใน SPS
การรองรับโปรแกรมถอดรหัส VP9
หากต้องการรองรับ VP9 HDR แพลตฟอร์มจะต้องเพิ่มโปรแกรมถอดรหัส OMX HDR ที่รองรับ VP9 โปรไฟล์ 2 โดยปกติแล้วจะเป็นโปรแกรมถอดรหัส VP9 แบบใช้อุโมงค์ข้อมูลที่รองรับการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) จะต้องมีคุณสมบัติดังนี้
- รองรับประเภท mime "video/x-vnd.on2.vp9"
- แสดงโฆษณา VP9Profile2HDR ที่รองรับ การรองรับโปรไฟล์ VP9Profile2HDR ยังกำหนดให้ต้องรองรับโปรไฟล์ VP9Profile2 ที่ระดับเดียวกันด้วย
เครื่องมือดึงข้อมูล
การรองรับเครื่องมือแยกไฟล์ Dolby Vision
แพลตฟอร์มที่รองรับโปรแกรมถอดรหัส Dolby Vision ต้องเพิ่มการรองรับโปรแกรมแยกไฟล์ Dolby (เรียกว่า Dolby Extractor) สำหรับเนื้อหา Dolby Video
- เครื่องมือแยก MP4 ทั่วไปจะแยกได้เฉพาะเลเยอร์พื้นฐานจากไฟล์เท่านั้น แต่จะแยกเลเยอร์การเพิ่มประสิทธิภาพหรือข้อมูลเมตาไม่ได้ จึงต้องใช้เครื่องมือแยกข้อมูล Dolby แบบพิเศษเพื่อดึงข้อมูลจากไฟล์
- โปรแกรมแยก Dolby ต้องแสดงแทร็ก 1-2 แทร็กสำหรับแต่ละแทร็กวิดีโอ Dolby (กลุ่ม) ดังนี้
- แทร็ก Dolby Vision HDR ที่มีประเภท "video/dolby-vision" สำหรับสตรีม Dolby แบบ 2/3 ชั้นที่รวมกัน Dolby จะเป็นผู้กำหนดรูปแบบหน่วยเข้าถึงของแทร็ก HDR ซึ่งจะกำหนดวิธีจัดแพ็กเกจหน่วยเข้าถึงจากเลเยอร์ฐาน/การเพิ่มประสิทธิภาพ/ข้อมูลเมตาให้เป็นบัฟเฟอร์เดียวเพื่อถอดรหัสเป็นเฟรม HDR เฟรมเดียว
- หากแทร็กวิดีโอ Dolby Vision มีแทร็ก Base Layer (BL) แยกต่างหาก (เข้ากันได้แบบย้อนหลัง) เครื่องมือแยกข้อมูลจะต้องแสดงแทร็กนี้เป็นแทร็ก "video/avc" หรือ "video/hevc" แยกต่างหากด้วย โปรแกรมแยกต้องจัดหาหน่วยการเข้าถึง AVC/HEVC ปกติสำหรับแทร็กนี้
- แทร็ก BL ต้องมีรหัสที่ไม่ซ้ำกันของแทร็ก ("track-ID") เหมือนกับของแทร็ก HDR เพื่อให้แอปเข้าใจว่าวิดีโอเหล่านี้เป็นวิดีโอเดียวกันที่ผ่านการเข้ารหัส 2 ครั้ง
- แอปพลิเคชันจะเลือกแทร็กที่จะใช้ตามความสามารถของแพลตฟอร์มได้
- โปรไฟล์/ระดับ Dolby Vision ต้องแสดงในรูปแบบแทร็กของแทร็ก HDR
- หากแพลตฟอร์มมีโปรแกรมถอดรหัสที่รองรับ Dolby Vision แพลตฟอร์มนั้นจะต้องมีเครื่องมือแยกที่รองรับ Dolby Vision ด้วย แม้ว่าจะไม่รองรับการเล่น HDR ก็ตาม
รองรับโปรแกรมแยก HDR10 และ VP9
โปรแกรมแยกข้อมูลไม่จำเป็นต้องมีข้อกำหนดเพิ่มเติมเพื่อรองรับ 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
MPEG4Extractor จะจดจำบิตสตรีม HDR10 เป็นเพียงสตรีม HEVC ปกติ และระบบจะแยกแทร็ก HDR ที่มีประเภท "video/HEVC" เฟรมเวิร์กจะเลือกโปรแกรมถอดรหัสวิดีโอ HEVC ที่รองรับโปรไฟล์ Main10HDR10 เพื่อถอดรหัสแทร็กนั้น - โปรแกรมถอดรหัส HEVC
ข้อมูล HDR อยู่ใน SEI หรือ SPS ตัวถอดรหัส HEVC จะได้รับเฟรมที่มีข้อมูล HDR ก่อน จากนั้นโปรแกรมถอดรหัสจะดึงข้อมูล HDR และแจ้งให้แอปพลิเคชันทราบว่ากำลังถอดรหัสวิดีโอ HDR ระบบจะรวมข้อมูล HDR ไว้ในรูปแบบเอาต์พุตของโปรแกรมถอดรหัส ซึ่งจะนำไปแสดงในแพลตฟอร์มในภายหลัง
การดำเนินการของผู้ให้บริการ
- แสดงโปรไฟล์โปรแกรมถอดรหัส HDR และประเภท OMX ระดับที่รองรับ ตัวอย่าง:
OMX_VIDEO_HEVCProfileMain10HDR10
(และMain10
) - ใช้การรองรับ index:
'
OMX.google.android.index.describeHDRColorInfo
' - ใช้การรองรับ index:
'
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 ชั้นที่รวมกัน Dolby จะเป็นผู้กำหนดรูปแบบหน่วยการเข้าถึงของแทร็ก HDR ซึ่งจะกำหนดวิธีจัดแพ็กเกจหน่วยการเข้าถึงจากเลเยอร์ฐาน/การเพิ่มประสิทธิภาพ/ข้อมูลเมตาเป็นบัฟเฟอร์เดียวเพื่อถอดรหัสเป็นเฟรม HDR เฟรมเดียว
- (ไม่บังคับ เฉพาะในกรณีที่ BL เข้ากันได้แบบย้อนหลัง) แทร็ก BL มีเฉพาะเลเยอร์พื้นฐาน ซึ่งต้องถอดรหัสได้โดยโปรแกรมถอดรหัส MediaCodec ปกติ เช่น โปรแกรมถอดรหัส AVC/HEVC โปรแกรมแยกไฟล์ควรให้หน่วยการเข้าถึง AVC/HEVC ปกติสำหรับแทร็กนี้ แทร็ก BL นี้ต้องมีรหัสที่ไม่ซ้ำกันของแทร็ก ("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
- ประกาศโปรไฟล์และระดับ OMX ของโปรแกรมถอดรหัส HDR ตัวอย่างเช่น
OMX_VIDEO_DOLBYPROFILETYPE
และOMX_VIDEO_DOLBYLEVELTYP
- ใช้การรองรับ index:
'OMX.google.android.index.describeColorAspects
' - เผยแพร่ข้อมูลเมตา HDR แบบไดนามิกไปยังแอปและแพลตฟอร์มในแต่ละเฟรม โดยปกติแล้ว ข้อมูลนี้ต้องจัดแพ็กเกจไว้ในเฟรมที่ถอดรหัสแล้วตามที่ Dolby กำหนด เนื่องจากมาตรฐาน HDMI ไม่มีวิธีส่งข้อมูลนี้ไปยังจอแสดงผล
ไปป์ไลน์ตัวถอดรหัส VP9
รูปที่ 3 ไปป์ไลน์ VP9-PQ
บิตสตรีม VP9 จะได้รับการบรรจุในคอนเทนเนอร์ WebM ในลักษณะที่ทีม WebM กำหนด แอปพลิเคชันต้องใช้โปรแกรมแยก WebM เพื่อดึงข้อมูลเมตา HDR จากบิตสตรีมก่อนที่จะส่งเฟรมไปยังโปรแกรมถอดรหัส
- เครื่องมือแยกไฟล์ WebM:
- WebM Extractor จะดึงข้อมูลเมตาและเฟรม HDR จาก
- ตัวถอดรหัส VP9:
- ตัวถอดรหัสจะรับบิตสตรีม Profile2 และถอดรหัสเป็นบิตสตรีม VP9 ปกติ
- ตัวถอดรหัสจะได้รับข้อมูลเมตาแบบคงที่ HDR จากเฟรมเวิร์ก
- ตัวถอดรหัสจะได้รับข้อมูลเมตาแบบคงที่ผ่านหน่วยการเข้าถึงบิตสตรีมสำหรับสตรีม VP9 PQ
- ตัวถอดรหัส VP9 ต้องสามารถส่งต่อข้อมูลเมตา HDR แบบคงที่/แบบไดนามิกไปยังจอแสดงผล
การดำเนินการของผู้ให้บริการ
- ติดตั้งใช้งานการรองรับดัชนีต่อไปนี้
OMX.google.android.index.describeHDRColorInfo
- ติดตั้งใช้งานการรองรับดัชนีต่อไปนี้
OMX.google.android.index.describeColorAspects
- เผยแพร่ข้อมูลเมตาแบบคงที่ของ HDR