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

วิดีโอ 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 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/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 แต่โดยทั่วไปกระบวนการจะเป็นไปตามขั้นตอนต่อไปนี้

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

การค้นพบ 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 ไว้ในรูปแบบเอาต์พุตของโปรแกรมถอดรหัส ซึ่งจะนำไปแสดงในแพลตฟอร์มในภายหลัง

การดำเนินการของผู้ให้บริการ

  1. แสดงโปรไฟล์โปรแกรมถอดรหัส HDR และประเภท OMX ระดับที่รองรับ ตัวอย่าง:
    OMX_VIDEO_HEVCProfileMain10HDR10 (และ Main10)
  2. ใช้การรองรับ index: 'OMX.google.android.index.describeHDRColorInfo'
  3. ใช้การรองรับ index: 'OMX.google.android.index.describeColorAspects'
  4. รองรับการแยกวิเคราะห์ 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
  • DolbyDecoder:
    • DolbyDecoder ได้รับหน่วยการเข้าถึงที่มีหน่วยการเข้าถึงที่จำเป็นสำหรับเลเยอร์ทั้งหมด (EL+BL+MD หรือ BL+MD)
    • ข้อมูล CSD (ข้อมูลเฉพาะของโค้ด เช่น SPS+PPS+VPS) สำหรับเลเยอร์แต่ละเลเยอร์สามารถบรรจุเป็นเฟรม CSD 1 เฟรมตามที่ 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. ประกาศโปรไฟล์และระดับ OMX ของโปรแกรมถอดรหัส HDR ตัวอย่างเช่น OMX_VIDEO_DOLBYPROFILETYPE และ OMX_VIDEO_DOLBYLEVELTYP
  4. ใช้การรองรับ index: '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