การเล่นวิดีโอ HDR

วิดีโอช่วงไดนามิกสูง (HDR) คือขอบเขตถัดไปของการถอดรหัสวิดีโอคุณภาพสูง ซึ่งนำเสนอคุณภาพการสร้างฉากที่ไม่มีใครเทียบได้ ซึ่งทำได้โดยการเพิ่มช่วงไดนามิกขององค์ประกอบความสว่างอย่างมีนัยสำคัญ (จากปัจจุบัน 100 cd/m 2 เป็น 1,000 วินาทีของ cd/m 2 ) และโดยการใช้ปริภูมิสีที่กว้างขึ้นมาก (BT 2020) นี่คือองค์ประกอบสำคัญของวิวัฒนาการ 4K UHD ในวงการทีวี

Android 10 รองรับวิดีโอ HDR ต่อไปนี้

  • HDR10
  • วีพี9
  • 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-วิสัยทัศน์ HDR10 VP9-HLG VP9-PQ
ตัวแปลงสัญญาณ เอวีซี/เฮวีซี เฮชวีซี วีพี9 วีพี9
ฟังก์ชั่นการถ่ายโอน ST-2084 ST-2084 เอชแอลจี ST-2084
ประเภทข้อมูลเมตา HDR พลวัต คงที่ ไม่มี คงที่

ใน Android 7.0 มีการกำหนดเฉพาะการเล่น HDR ผ่านโหมดทันเนล แต่อุปกรณ์อาจเพิ่มการรองรับสำหรับการเล่น HDR บน SurfaceViews โดยใช้บัฟเฟอร์วิดีโอทึบแสง กล่าวอีกนัยหนึ่ง:

  • ไม่มี Android API มาตรฐานในการตรวจสอบว่ารองรับการเล่น HDR โดยใช้ตัวถอดรหัสที่ไม่ใช่ช่องสัญญาณหรือไม่
  • ตัวถอดรหัสวิดีโอแบบทันเนลที่โฆษณาความสามารถในการเล่น HDR จะต้องรองรับการเล่น HDR เมื่อเชื่อมต่อกับจอแสดงผลที่รองรับ HDR
  • องค์ประกอบ GL ของเนื้อหา HDR ไม่ได้รับการสนับสนุนในรุ่น AOSP Android 7.0

การค้นพบ

การเล่น 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 Vision
  • int HDR_TYPE_HDR10
    รองรับ HDR10 / PQ
  • int HDR_TYPE_HDR10_PLUS
    รองรับ HDR10+
  • int HDR_TYPE_HLG
    รองรับ Hybrid Log-Gamma
  • float INVALID_LUMINANCE
    ค่าความสว่างไม่ถูกต้อง

วิธีการสาธารณะ:

  • float getDesiredMaxAverageLuminance()
    ส่งกลับข้อมูลความสว่างเฉลี่ยเฟรมสูงสุดของเนื้อหาที่ต้องการในหน่วย cd/cd/m 2 สำหรับจอแสดงผลนี้
  • float getDesiredMaxLuminance()
    ส่งกลับข้อมูลความสว่างสูงสุดของเนื้อหาที่ต้องการในหน่วย cd/cd/m 2 สำหรับจอแสดงผลนี้
  • float getDesiredMinLuminance()
    ส่งกลับข้อมูลความสว่างขั้นต่ำของเนื้อหาที่ต้องการในหน่วย cd/cd/m 2 สำหรับจอแสดงผลนี้
  • int[] getSupportedHdrTypes()
    รับประเภท HDR ที่รองรับของจอแสดงผลนี้ (ดูค่าคงที่) ส่งกลับอาร์เรย์ว่างหากจอแสดงผลไม่รองรับ HDR

เครื่องถอดรหัส

แอปพลิเคชันต้องใช้ CodecCapabilities.profileLevels API ที่มีอยู่เพื่อตรวจสอบการสนับสนุนโปรไฟล์ที่รองรับ HDR ใหม่:

Dolby-วิสัยทัศน์

ค่าคงที่ไมม์ 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 HDR10

ค่าคงที่โปรไฟล์ MediaCodecInfo.CodecProfileLevel :

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG & PQ

ค่าคงที่โปรไฟล์ MediaCodecInfo.CodecProfileLevel :

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

หากแพลตฟอร์มรองรับตัวถอดรหัสที่รองรับ HDR ก็จะต้องรองรับตัวแยกที่รองรับ HDR ด้วย

รับประกันว่ามีเพียงตัวถอดรหัสแบบทันเนลเท่านั้นที่จะเล่นเนื้อหา HDR ได้ การเล่นโดยตัวถอดรหัสที่ไม่ใช่ช่องสัญญาณอาจส่งผลให้ข้อมูล HDR สูญหายและเนื้อหาถูกทำให้เป็นระดับสี SDR

เครื่องสกัด

คอนเทนเนอร์ต่อไปนี้รองรับเทคโนโลยี HDR ต่างๆ บน Android 7.0:

เทคโนโลยี Dolby-วิสัยทัศน์ HDR10 VP9-HLG VP9-PQ
คอนเทนเนอร์ MP4 MP4 เว็บเอ็ม เว็บเอ็ม

แพลตฟอร์มไม่รองรับการค้นหาว่าแทร็ก (ของไฟล์) ต้องการการรองรับ HDR หรือไม่ แอปพลิเคชันอาจแยกวิเคราะห์ข้อมูลเฉพาะตัวแปลงสัญญาณเพื่อพิจารณาว่าแทร็กต้องใช้โปรไฟล์ HDR ที่เฉพาะเจาะจงหรือไม่

สรุป

ข้อกำหนดส่วนประกอบสำหรับเทคโนโลยี HDR แต่ละรายการแสดงอยู่ในตารางต่อไปนี้:

เทคโนโลยี Dolby-วิสัยทัศน์ HDR10 VP9-HLG VP9-PQ
ประเภท HDR ที่รองรับ (จอแสดงผล) HDR_TYPE_DOLBY_VISION HDR_TYPE_HDR10 HDR_TYPE_HLG HDR_TYPE_HDR10
คอนเทนเนอร์ (ตัวแยก) MP4 MP4 เว็บเอ็ม เว็บเอ็ม
เครื่องถอดรหัส MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
โปรไฟล์ (ถอดรหัส) หนึ่งในโปรไฟล์ Dolby โปรไฟล์ HEVCMain10HDR10 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 จำเป็นต้องทราบ

แสดง

องค์ประกอบของฮาร์ดแวร์

แพลตฟอร์มที่รองรับ HDR ต้องรองรับการผสมผสานเนื้อหา HDR กับเนื้อหาที่ไม่ใช่ HDR Android ไม่ได้กำหนดลักษณะการผสมและการดำเนินการที่แน่นอนตั้งแต่รุ่น 7.0 แต่โดยทั่วไปแล้วกระบวนการจะทำตามขั้นตอนเหล่านี้:

  1. กำหนดพื้นที่/ปริมาตรสีเชิงเส้นที่มีเลเยอร์ทั้งหมดที่จะนำมาประกอบ โดยพิจารณาจากสีของเลเยอร์ มาสเตอร์ริ่ง และข้อมูลเมตาไดนามิกที่เป็นไปได้
    หากประกอบเข้ากับจอแสดงผลโดยตรง นี่อาจเป็นพื้นที่เชิงเส้นที่ตรงกับปริมาตรสีของจอภาพ
  2. แปลงเลเยอร์ทั้งหมดให้เป็นปริภูมิสีทั่วไป
  3. ดำเนินการผสม
  4. หากแสดงผ่าน HDMI:
    1. กำหนดสี มาสเตอร์ริ่ง และข้อมูลเมตาไดนามิกที่เป็นไปได้สำหรับฉากแบบผสม
    2. แปลงฉากผสมที่ได้ให้เป็นพื้นที่/ปริมาตรสีที่ได้รับ
  5. หากแสดงบนจอแสดงผลโดยตรง ให้แปลงฉากผสมที่ได้ให้เป็นสัญญาณการแสดงผลที่ต้องการเพื่อสร้างฉากนั้น

แสดงการค้นพบ

การค้นพบการแสดงผล HDR รองรับผ่าน HWC2 เท่านั้น ผู้ใช้อุปกรณ์ต้องเลือกเปิดใช้งานอะแดปเตอร์ HWC2 ที่เปิดตัวพร้อมกับ Android 7.0 เพื่อให้ฟีเจอร์นี้ทำงานได้ ดังนั้น แพลตฟอร์มจะต้องเพิ่มการสนับสนุนสำหรับ HWC2 หรือขยายกรอบงาน AOSP เพื่อให้มีวิธีในการให้ข้อมูลนี้ HWC2 เปิดเผย API ใหม่เพื่อเผยแพร่ข้อมูล HDR Static ไปยังเฟรมเวิร์กและแอปพลิเคชัน

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 บิตจะต้องได้รับการแปลในรูปแบบที่เหมาะสม

เครื่องถอดรหัส

แพลตฟอร์มจะต้องเพิ่มตัวถอดรหัสแบบทันเนลที่รองรับ 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 อย่างน้อยหนึ่งตัวรวมถึงตัวแต่งเพลง ตัวถอดรหัสดังกล่าวจะต้อง:

  • รองรับประเภท mime "วิดีโอ/dolby-vision"
  • โฆษณาที่รองรับโปรไฟล์/ระดับ Dolby Vision
  • ยอมรับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงย่อยของทุกเลเยอร์ตามที่กำหนดโดย Dolby
  • ยอมรับข้อมูลเฉพาะตัวแปลงสัญญาณที่กำหนดโดย Dolby ตัวอย่างเช่น ข้อมูลที่มีโปรไฟล์/ระดับ Dolby Vision และอาจเป็นข้อมูลเฉพาะตัวแปลงสัญญาณสำหรับตัวถอดรหัสภายใน
  • รองรับการสลับแบบปรับได้ระหว่างโปรไฟล์/ระดับ Dolby Vision ตามที่ Dolby ต้องการ

เมื่อทำการกำหนดค่าตัวถอดรหัส โปรไฟล์ Dolby จริงจะไม่ถูกสื่อสารไปยังตัวแปลงสัญญาณ ซึ่งทำได้ผ่านข้อมูลเฉพาะของตัวแปลงสัญญาณหลังจากที่ตัวถอดรหัสเริ่มทำงานแล้วเท่านั้น แพลตฟอร์มสามารถเลือกที่จะสนับสนุนตัวถอดรหัส Dolby Vision หลายตัว: ตัวหนึ่งสำหรับโปรไฟล์ AVC และอีกตัวสำหรับโปรไฟล์ HEVC เพื่อให้สามารถเริ่มต้นตัวแปลงสัญญาณพื้นฐานในระหว่างเวลากำหนดค่า หากตัวถอดรหัส Dolby Vision ตัวเดียวรองรับโปรไฟล์ทั้งสองประเภท ก็จะต้องรองรับการสลับระหว่างโปรไฟล์แบบไดนามิกในรูปแบบที่ปรับเปลี่ยนได้เช่นกัน

หากแพลตฟอร์มมีตัวถอดรหัสที่รองรับ 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 Profile2 โดยปกติแล้ว นี่คือตัวถอดรหัส VP9 แบบทันเนลที่รองรับการจัดการข้อมูลเมตาที่เกี่ยวข้องกับ HDMI ด้วย ตัวถอดรหัสดังกล่าว (นอกเหนือจากการรองรับตัวถอดรหัส HDR ทั่วไป) จะต้อง:

  • รองรับประเภท mime "video/x-vnd.on2.vp9"
  • โฆษณาที่รองรับ VP9Profile2HDR การสนับสนุนโปรไฟล์ VP9Profile2HDR ยังต้องการการสนับสนุนโปรไฟล์ VP9Profile2 ในระดับเดียวกันด้วย

เครื่องสกัด

รองรับตัวแยก Dolby Vision

แพลตฟอร์มที่รองรับตัวถอดรหัส Dolby Vision จะต้องเพิ่มการรองรับ Dolby extractor (เรียกว่า Dolby Extractor) สำหรับเนื้อหา Dolby Video

  • โปรแกรมแยกไฟล์ MP4 ทั่วไปสามารถแยกชั้นฐานออกจากไฟล์ได้เท่านั้น แต่ไม่สามารถแยกชั้นการปรับปรุงหรือชั้นข้อมูลเมตาได้ ดังนั้นจึงจำเป็นต้องใช้ตัวแยก Dolby พิเศษเพื่อแยกข้อมูลจากไฟล์
  • ตัวแยก Dolby จะต้องแสดง 1 ถึง 2 แทร็กสำหรับแต่ละแทร็กวิดีโอ Dolby (กลุ่ม):
    • แทร็ก Dolby Vision HDR ที่มีประเภท "วิดีโอ/dolby-vision" สำหรับการสตรีม Dolby 2/3 เลเยอร์รวมกัน รูปแบบหน่วยการเข้าถึงของแทร็ก HDR ซึ่งกำหนดวิธีการจัดแพคเกจหน่วยการเข้าถึงจากชั้นฐาน/การปรับปรุง/ข้อมูลเมตาลงในบัฟเฟอร์เดียวเพื่อถอดรหัสลงในเฟรม HDR เดียว จะต้องถูกกำหนดโดย Dolby
    • หากแทร็กวิดีโอ Dolby Vision มีเลเยอร์ฐาน (BL) ที่แยกต่างหาก (เข้ากันได้แบบย้อนหลัง) ตัวแยกจะต้องเปิดเผยสิ่งนี้เป็นแทร็ก "วิดีโอ/avc" หรือ "วิดีโอ/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
    บิตสตรีม HDR10 ได้รับการยอมรับว่าเป็นเพียงสตรีม HEVC ปกติโดย MPEG4Extractor และแทร็ก HDR ที่มีประเภท "วิดีโอ/HEVC" จะถูกแยกออกมา เฟรมเวิร์กจะเลือกตัวถอดรหัสวิดีโอ HEVC ที่รองรับโปรไฟล์ Main10HDR10 เพื่อถอดรหัสแทร็กนั้น
  • ตัวถอดรหัส HEVC
    ข้อมูล HDR อยู่ใน SEI หรือ SPS ตัวถอดรหัส HEVC จะรับเฟรมที่มีข้อมูล HDR ก่อน จากนั้นตัวถอดรหัสจะแยกข้อมูล HDR และแจ้งให้แอปพลิเคชันทราบว่ากำลังถอดรหัสวิดีโอ HDR ข้อมูล HDR จะรวมอยู่ในรูปแบบเอาต์พุตตัวถอดรหัส ซึ่งจะเผยแพร่ไปยังพื้นผิวในภายหลัง

การกระทำของผู้ขาย

  1. โฆษณาที่รองรับโปรไฟล์ตัวถอดรหัส HDR และประเภท OMX ระดับ ตัวอย่าง:
    OMX_VIDEO_HEVCProfileMain10HDR10 (และ Main10 )
  2. ใช้การสนับสนุนสำหรับดัชนี: ' OMX.google.android.index.describeHDRColorInfo '
  3. ใช้การสนับสนุนสำหรับดัชนี: ' OMX.google.android.index.describeColorAspects '
  4. ใช้การสนับสนุนสำหรับการแยกวิเคราะห์ SEI ของข้อมูลเมตาการเรียนรู้

ไปป์ไลน์ตัวถอดรหัส Dolby Vision

รูปที่ 2 ไปป์ไลน์ Dolby Vision

Dolby-bitstreams ได้รับการบรรจุในคอนเทนเนอร์ MP4 ตามที่กำหนดโดย Dolby ตามทฤษฎีแล้ว แอปพลิเคชันสามารถใช้โปรแกรมแยก MP4 ทั่วไปเพื่อแยกชั้นฐาน ชั้นการปรับปรุง และชั้นข้อมูลเมตาโดยแยกจากกัน อย่างไรก็ตาม สิ่งนี้ไม่เหมาะกับรุ่น Android MediaExtractor/MediaCodec ในปัจจุบัน

  • DolbyExtractor:
    • Dolby-bitstreams ได้รับการยอมรับโดย DolbyExtractor ซึ่งเปิดเผยเลเยอร์ต่างๆ เป็น 1 ถึง 2 แทร็กสำหรับแต่ละแทร็กวิดีโอ Dolby (กลุ่ม):
      • แทร็ก HDR ที่มีประเภท "วิดีโอ/Dolby-Vision" สำหรับการสตรีม Dolby 2/3 เลเยอร์แบบรวม รูปแบบหน่วยการเข้าถึงของแทร็ก HDR ซึ่งกำหนดวิธีการจัดแพคเกจหน่วยการเข้าถึงจากชั้นฐาน/การปรับปรุง/ข้อมูลเมตาลงในบัฟเฟอร์เดียวเพื่อถอดรหัสลงในเฟรม HDR เดียว จะต้องถูกกำหนดโดย Dolby
      • (ไม่บังคับ เฉพาะในกรณีที่ BL เข้ากันได้แบบย้อนหลัง) แทร็ก BL มีเฉพาะเลเยอร์ฐาน ซึ่งจะต้องถอดรหัสได้โดยตัวถอดรหัส MediaCodec ทั่วไป เช่น ตัวถอดรหัส AVC/HEVC ตัวแยกข้อมูลควรมีหน่วยการเข้าถึง AVC/HEVC ปกติสำหรับแทร็กนี้ แทร็ก BL นี้ต้องมี track-unique-ID ("track-ID") เดียวกันกับแทร็ก Dolby เพื่อให้แอปพลิเคชันเข้าใจว่านี่คือการเข้ารหัสสองครั้งของวิดีโอเดียวกัน
    • แอปพลิเคชันสามารถตัดสินใจได้ว่าควรเลือกแทร็กใดตามความสามารถของแพลตฟอร์ม
    • เนื่องจากแทร็ก HDR มีประเภท HDR ที่เฉพาะเจาะจง เฟรมเวิร์กจะเลือกตัวถอดรหัสวิดีโอ Dolby เพื่อถอดรหัสแทร็กนั้น แทร็ก BL จะถูกถอดรหัสโดยตัวถอดรหัสวิดีโอ AVC/HEVC ทั่วไป
  • DolbyDecoder:
    • DolbyDecoder รับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงที่จำเป็นสำหรับทุกเลเยอร์ (EL+BL+MD หรือ BL+MD)
    • ข้อมูล CSD (ข้อมูลเฉพาะของตัวแปลงสัญญาณ เช่น SPS+PPS+VPS) สำหรับแต่ละเลเยอร์สามารถรวมเป็น 1 เฟรม CSD ที่ Dolby กำหนด จำเป็นต้องมีเฟรม CSD เฟรมเดียว

การกระทำของ Dolby

  1. กำหนดบรรจุภัณฑ์ของหน่วยการเข้าถึงสำหรับโครงร่างคอนเทนเนอร์ Dolby ต่างๆ (เช่น BL+EL+MD) สำหรับตัวถอดรหัส Dolby แบบนามธรรม (เช่น รูปแบบบัฟเฟอร์ที่คาดหวังโดยตัวถอดรหัส HDR)
  2. กำหนดบรรจุภัณฑ์ของ CSD สำหรับตัวถอดรหัส Dolby แบบนามธรรม

การกระทำของผู้ขาย

  1. ใช้ตัวแยก Dolby Dolby ก็สามารถทำได้เช่นกัน
  2. รวม DolbyExtractor เข้ากับเฟรมเวิร์ก จุดเริ่มต้นคือ frameworks/av/media/libstagefright/MediaExtractor.cpp
  3. ประกาศโปรไฟล์ตัวถอดรหัส HDR และประเภท OMX ระดับ ตัวอย่าง: OMX_VIDEO_DOLBYPROFILETYPE และ OMX_VIDEO_DOLBYLEVELTYP
  4. ใช้การสนับสนุนสำหรับดัชนี: 'OMX.google.android.index.describeColorAspects '
  5. เผยแพร่ข้อมูลเมตา HDR แบบไดนามิกไปยังแอปและแสดงในแต่ละเฟรม โดยทั่วไปข้อมูลนี้จะต้องบรรจุลงในเฟรมถอดรหัสตามที่กำหนดโดย Dolby เนื่องจากมาตรฐาน HDMI ไม่มีวิธีในการส่งข้อมูลนี้ไปยังจอแสดงผล

ไปป์ไลน์ตัวถอดรหัส VP9

รูปที่ 3 ไปป์ไลน์ VP9-PQ

บิตสตรีม VP9 ได้รับการบรรจุในคอนเทนเนอร์ WebM ในลักษณะที่กำหนดโดยทีมงาน WebM แอปพลิเคชันจำเป็นต้องใช้ตัวแยก WebM เพื่อแยกข้อมูลเมตา HDR จากบิตสตรีมก่อนที่จะส่งเฟรมไปยังตัวถอดรหัส

  • ตัวแยก WebM:
  • ตัวถอดรหัส VP9:
    • ตัวถอดรหัสรับบิตสตรีม Profile2 และถอดรหัสเป็นสตรีม VP9 ปกติ
    • ตัวถอดรหัสจะได้รับข้อมูลเมตาคงที่ของ HDR จากเฟรมเวิร์ก
    • ตัวถอดรหัสได้รับข้อมูลเมตาแบบคงที่ผ่านหน่วยการเข้าถึงบิตสตรีมสำหรับสตรีม VP9 PQ
    • ตัวถอดรหัส VP9 จะต้องสามารถเผยแพร่ข้อมูลเมตาแบบคงที่/ไดนามิก HDR ไปยังจอแสดงผลได้

การกระทำของผู้ขาย

  1. ใช้การสนับสนุนสำหรับดัชนี: OMX.google.android.index.describeHDRColorInfo
  2. ใช้การสนับสนุนสำหรับดัชนี: OMX.google.android.index.describeColorAspects
  3. เผยแพร่เมตาดาต้าแบบคงที่ของ HDR