วิดีโอ 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 บน SurfaceViews โดยใช้บัฟเฟอร์วิดีโอแบบทึบแสง กล่าวคือ
- ไม่มี Android API มาตรฐานสำหรับตรวจสอบว่ารองรับการเล่น HDR หรือไม่โดยใช้โปรแกรมถอดรหัสที่ไม่ได้ใช้อุโมงค์
- ตัวถอดรหัสวิดีโอแบบ Tunneled ที่โฆษณาความสามารถในการเล่น HDR จะต้องรองรับการเล่น HDR เมื่อเชื่อมต่อกับจอแสดงผลที่รองรับ HDR
- AOSP รุ่น Android 7.0 ไม่รองรับการจัดองค์ประกอบ GL ของเนื้อหา HDR
Discovery
การเล่นแบบ HDR ต้องใช้ตัวถอดรหัสที่รองรับ HDR และเชื่อมต่อกับจอแสดงผลที่รองรับ HDR บางเทคโนโลยีอาจต้องใช้เครื่องมือแยกเฉพาะ (ไม่บังคับ)
จอแสดงผล
แอปพลิเคชันต้องใช้ Display.getHdrCapabilities
API ใหม่เพื่อค้นหาเทคโนโลยี HDR ที่จอแสดงผลที่ระบุรองรับ โดยพื้นฐานแล้วก็คือข้อมูลใน EDID Static Metadata Data Block ตามที่ระบุไว้ใน 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
การรองรับ Log-Gamma แบบไฮบริดfloat 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
:
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 Luminance Range: ไม่ได้แมปกับ HDR ประเภทใดๆ
- ET_1 แกมมาแบบดั้งเดิม - ช่วงความสว่าง HDR: ไม่ได้แมปกับประเภท HDR
- ET_2 SMPTE ST 2084 - แมปกับ HDR ประเภท HDR10
- การส่งสัญญาณการรองรับ Dolby Vision หรือ HLG ผ่าน HDMI จะดำเนินการตามที่องค์กรที่เกี่ยวข้องกำหนด
- โปรดทราบว่า HWC2 API ใช้ค่าความสว่างที่ต้องการแบบลอย ดังนั้นค่า EDID 8 บิตต้องแปลในลักษณะที่เหมาะสม
ตัวถอดรหัส
แพลตฟอร์มต้องเพิ่มตัวถอดรหัสแบบอุโมงค์ข้อมูลที่รองรับ HDR และโฆษณาการรองรับ HDR โดยทั่วไปแล้วโปรแกรมถอดรหัสที่รองรับ HDR จะต้องมีคุณสมบัติดังนี้
- รองรับการถอดรหัส Tunnel (
FEATURE_TunneledPlayback
) - รองรับข้อมูลเมตา HDR แบบคงที่
(
OMX.google.android.index.describeHDRColorInfo
) และ การเผยแพร่ไปยังองค์ประกอบของจอแสดงผล/ฮาร์ดแวร์ สำหรับ HLG คุณต้องส่งข้อมูลเมตาที่เหมาะสม ไปยังจอแสดงผล - รองรับคำอธิบายสี
(
OMX.google.android.index.describeColorAspects
) และ การเผยแพร่ไปยังองค์ประกอบของจอแสดงผล/ฮาร์ดแวร์ - รองรับข้อมูลเมตาที่ฝังของ HDR ตามที่มาตรฐานที่เกี่ยวข้องกำหนด
การรองรับโปรแกรมถอดรหัส Dolby Vision
แพลตฟอร์มต่างๆ ต้องเพิ่มตัวถอดรหัส HDR OMX ที่รองรับ Dolby-Vision จากความจำเพาะของ Dolby Vision โดยปกตินี่จึงเป็นตัวถอดรหัส Wrapper ที่ใช้ตัวถอดรหัส AVC และ/หรือ HEVC อย่างน้อย 1 ตัว รวมถึงคอมโพสิต โดยตัวถอดรหัสดังกล่าวต้องมีลักษณะดังนี้
- รองรับประเภท 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 แบบ Tunnel ที่รองรับการแยกวิเคราะห์และการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) ต้องมีดังนี้
- รองรับประเภท mime "video/hevc"
- HEVCMain10HDR10 ที่รองรับการโฆษณา การรองรับโปรไฟล์ HEVCMain10HRD10 ยังต้องรองรับโปรไฟล์ HEVCMain10 ด้วย ซึ่งต้องรองรับโปรไฟล์ HEVCMain10 ในระดับเดียวกันด้วย
- รองรับการแยกวิเคราะห์บล็อก SEI การมาสเตอร์ริ่ง รวมถึงข้อมูลอื่นๆ เกี่ยวกับ HDR ที่มีอยู่ใน SPS
การรองรับโปรแกรมถอดรหัส VP9
หากต้องการรองรับ VP9 HDR แพลตฟอร์มจะต้องเพิ่มโปรแกรมถอดรหัส OMX HDR ที่รองรับ VP9 โปรไฟล์ 2 ซึ่งโดยปกติแล้วจะเป็นตัวถอดรหัส VP9 แบบ Tunnel ซึ่งรองรับการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) จะต้องมีคุณสมบัติดังนี้
- รองรับประเภท mime "video/x-vnd.on2.vp9"
- แสดงโฆษณา VP9Profile2HDR ที่รองรับ การรองรับโปรไฟล์ VP9Profile2HDR ยังกำหนดให้ต้องรองรับโปรไฟล์ VP9Profile2 ที่ระดับเดียวกันด้วย
เครื่องมือแยกข้อมูล
การรองรับเครื่องมือแยกไฟล์ Dolby Vision
แพลตฟอร์มที่รองรับตัวถอดรหัส Dolby Vision ต้องเพิ่มการรองรับตัวแยกสัญญาณ Dolby (เรียกว่า Dolby Extractor) สำหรับเนื้อหาวิดีโอ Dolby
- เครื่องมือแยก MP4 ปกติจะดึงเลเยอร์ฐานจากไฟล์ได้เท่านั้น แต่จะดึงเลเยอร์การเพิ่มประสิทธิภาพหรือเลเยอร์ข้อมูลเมตาไม่ได้ จึงต้องใช้เครื่องมือแยกข้อมูล Dolby แบบพิเศษเพื่อดึงข้อมูลจากไฟล์
- เครื่องมือแยกสัญญาณ Dolby ต้องแสดงแทร็กวิดีโอ Dolby 1 ต่อ 2 แทร็ก
(กลุ่ม):
- แทร็ก HDR ของ Dolby Vision ประเภท "วิดีโอ/dolby-vision" สำหรับสตรีม Dolby แบบ 2/3 ชั้นแบบรวม Dolby จะเป็นผู้กำหนดรูปแบบหน่วยเข้าถึงของแทร็ก HDR ซึ่งจะกำหนดวิธีจัดแพ็กเกจหน่วยเข้าถึงจากเลเยอร์ฐาน/การเพิ่มประสิทธิภาพ/ข้อมูลเมตาให้เป็นบัฟเฟอร์เดียวเพื่อถอดรหัสเป็นเฟรม HDR เฟรมเดียว
- หากแทร็กวิดีโอ Dolby Vision มีเลเยอร์ฐาน (BL) แบบย้อนหลัง (เข้ากันได้แบบย้อนหลัง) ตัวแยกจะต้องแสดงแทร็กนี้เป็นแทร็ก "วิดีโอ/avc" หรือ "วิดีโอ/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 สำหรับแทร็ก HDR ของ DV
รายละเอียดการใช้งานเฉพาะเทคโนโลยี
ไปป์ไลน์ตัวถอดรหัส HDR10
บิตสตรีม HDR10 จะรวมอยู่ในคอนเทนเนอร์ MP4 แอปพลิเคชันใช้โปรแกรมแยก MP4 ปกติเพื่อดึงข้อมูลเฟรมและส่งไปยังโปรแกรมถอดรหัส
- เครื่องมือแยก MPEG4
เครื่องมือแยก MPEG4 จะจดจำบิตสตรีม 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
' - ใช้การรองรับดัชนี:
"
OMX.google.android.index.describeColorAspects
" - รองรับการแยกวิเคราะห์ SEI ของข้อมูลเมตาสำหรับมาสเตอร์
ไปป์ไลน์ตัวถอดรหัส Dolby Vision
Dolby-bitstreams อยู่ในแพ็กเกจที่บรรจุ MP4 ตามที่กำหนดโดย Dolby ในทางทฤษฎี แอปพลิเคชันอาจใช้ตัวแยก MP4 ปกติเพื่อดึงเลเยอร์ฐาน เลเยอร์การเพิ่มประสิทธิภาพ และเลเยอร์ข้อมูลเมตาแยกกัน แต่วิธีนี้ไม่เหมาะกับโมเดล Android MediaExtractor/MediaCodec ในปัจจุบัน
- DolbyExtractor ดังนี้
- DolbyExtractor จะจดจำบิตสตรีม Dolby ซึ่งจะแสดงเลเยอร์ต่างๆ เป็น 1-2 แทร็กสำหรับแต่ละแทร็กวิดีโอ Dolby (กลุ่ม) ดังนี้
- แทร็ก HDR ที่มีประเภทเป็น "วิดีโอ/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
บิตสตรีม VP9 มีการจัดแพ็กเกจในคอนเทนเนอร์ WebM ตามวิธีที่ทีม WebM กำหนด แอปพลิเคชันต้องใช้เครื่องมือแยก WebM เพื่อดึงข้อมูลเมตา HDR จากบิตสตรีมก่อนที่จะส่งเฟรมไปยังโปรแกรมถอดรหัส
- เครื่องมือแยกไฟล์ WebM:
- WebM Extractor จะแยกข้อมูลเมตาและเฟรม HDR จาก คอนเทนเนอร์
- ตัวถอดรหัส VP9:
- ตัวถอดรหัสจะรับบิตสตรีม Profile2 และถอดรหัสเป็นบิตสตรีม VP9 ปกติ
- ตัวถอดรหัสได้รับข้อมูลเมตา HDR แบบคงที่ทั้งหมดจากเฟรมเวิร์ก
- ตัวถอดรหัสจะรับข้อมูลเมตาแบบคงที่ผ่านหน่วยการเข้าถึงบิตสตรีมสำหรับสตรีม PQ แบบ VP9
- ตัวถอดรหัส VP9 ต้องเผยแพร่ข้อมูลเมตาแบบคงที่/ไดนามิกของ HDR ไปยังจอแสดงผลได้
การดำเนินการของผู้ให้บริการ
- นำการรองรับดัชนีมาใช้:
OMX.google.android.index.describeHDRColorInfo
- นำการรองรับดัชนีมาใช้:
OMX.google.android.index.describeColorAspects
- เผยแพร่ข้อมูลเมตา HDR แบบคงที่