एचडीआर वीडियो चलाना

हाई डाइनैमिक रेंज (एचडीआर) वीडियो, अच्छी क्वालिटी वाले वीडियो को डिकोड करने की नई तकनीक है. इससे, बेहतरीन क्वालिटी में सीन दिखाए जा सकते हैं. ऐसा करने के लिए, यह ल्यूमिनेंस कॉम्पोनेंट की डाइनैमिक रेंज (मौजूदा 100 cd/m2 से 1,000 सेकंड cd/m2 तक) को बहुत ज़्यादा बढ़ाता है और ज़्यादा चौड़े कलर स्पेस (BT 2020) का इस्तेमाल करता है. अब यह टीवी के क्षेत्र में 4K यूएचडी के विकास का मुख्य एलिमेंट है.

Android 10 पर, ये एचडीआर वीडियो काम करते हैं.

  • HDR10
  • VP9
  • HDR10+

Android 9 और उसके बाद वाले वर्शन से, MediaCodec एचडीआर मेटाडेटा की रिपोर्ट भेजता है. भले ही, टनल किया गया मोड कोई भी हो. बिना ट्यून किए गए मोड में, स्टैटिक/डाइनैमिक मेटाडेटा के साथ डिकोड किया जा सकता है. स्टैटिक मेटाडेटा का इस्तेमाल करने वाले HDR10 और VP9Profile2 के लिए, इन्हें आउटपुट फ़ॉर्मैट में, बटन KEY_HDR_STATIC_INFO के साथ रिपोर्ट किया जाता है. डाइनैमिक मेटाडेटा का इस्तेमाल करने वाले HDR10+ के लिए, इसे आउटपुट फ़ॉर्मैट में KEY_HDR10_PLUS_INFO कुंजी के साथ रिपोर्ट किया जाता है. यह हर आउटपुट फ़्रेम के लिए बदल भी सकता है. ज़्यादा जानकारी के लिए मल्टीमीडिया टनलिंग देखें.

Android 7.0 के बाद, एचडीआर की शुरुआती सुविधा में एचडीआर वीडियो पाइपलाइनों को खोजने और सेट अप करने के लिए सही कॉन्स्टेंट बनाना शामिल है. इसका मतलब है कि कोडेक के टाइप और डिसप्ले मोड तय करना. साथ ही, यह बताना कि MediaCodec को एचडीआर डेटा कैसे पास करना चाहिए और उसे एचडीआर डिकोडर को कैसे देना चाहिए.

इस दस्तावेज़ का मकसद, एप्लिकेशन डेवलपर को एचडीआर स्ट्रीम के साथ वीडियो चलाने की सुविधा देने में मदद करना है. साथ ही, OEM और SOC को एचडीआर की सुविधाएं चालू करने में मदद करना है.

काम करने वाली एचडीआर टेक्नोलॉजी

Android 7.0 और उसके बाद के वर्शन पर, ये एचडीआर टेक्नोलॉजी काम करती हैं.

टेक्नोलॉजी Dolby-विज़न एचडीआर10 VP9-HLG VP9-PQ
कोडेक एवीसी/एचईवीसी एचईवीसी वीपी9 VP9
ट्रांसफ़र फ़ंक्शन ST-2084 ST-2084 HLG ST-2084
एचडीआर मेटाडेटा का टाइप डाइनैमिक स्थिर कोई नहीं स्थिर

Android 7.0 में, सिर्फ़ टनल मोड के ज़रिए एचडीआर प्लेबैक की सुविधा तय की गई है. हालांकि, डिवाइसों में एओपैक वीडियो बफ़र का इस्तेमाल करके, SurfaceView पर एचडीआर प्लेबैक की सुविधा जोड़ी जा सकती है. दूसरे शब्दों में:

  • यह देखने के लिए कोई स्टैंडर्ड Android API नहीं है कि बिना टनल किए गए डिकोडर का इस्तेमाल करके, एचडीआर प्लेबैक की सुविधा काम करती है या नहीं.
  • एचडीआर प्लेबैक की सुविधा का विज्ञापन करने वाले टनल किए गए वीडियो डिकोडर, एचडीआर की सुविधा वाले डिसप्ले से कनेक्ट होने पर, एचडीआर प्लेबैक की सुविधा के साथ काम करने चाहिए.
  • एचडीआर कॉन्टेंट की जीएलएल कंपोज़िशन, एओएसपी Android 7.0 रिलीज़ के साथ काम नहीं करती है.

डिस्कवरी

एचडीआर प्लेबैक की सुविधा चालू करने के लिए, एचडीआर की सुविधा वाले डिकोडर और एचडीआर क्वालिटी के डिसप्ले से कनेक्ट होना ज़रूरी है. इसके अलावा, कुछ टेक्नोलॉजी के लिए, किसी खास एक्सट्रैक्टर की ज़रूरत होती है.

डिसप्ले

ऐप्लिकेशन, बताए गए डिसप्ले पर काम करने वाली HDR टेक्नोलॉजी के बारे में क्वेरी करने के लिए, नए Display.getHdrCapabilities एपीआई का इस्तेमाल करेंगे. यह जानकारी, मुख्य रूप से CTA-861.3 में बताए गए ईडीआईडी स्टैटिक मेटाडेटा डेटा ब्लॉक में होती है:

  • public Display.HdrCapabilities getHdrCapabilities()
    यह डिसप्ले की एचडीआर क्षमताओं की जानकारी दिखाता है.
  • Display.HdrCapabilities
    यह किसी डिसप्ले की एचडीआर क्षमताओं को एन्कैप्सुलेट करता है. उदाहरण के लिए, यह किस तरह के एचडीआर के साथ काम करता है और लुमिनेंस डेटा के बारे में जानकारी.

कंस्टेंट:

  • int HDR_TYPE_DOLBY_VISION
    Dolby Vision की सुविधा.
  • int HDR_TYPE_HDR10
    HDR10 / PQ.
  • int HDR_TYPE_HDR10_PLUS
    HDR10+ की सुविधा.
  • int HDR_TYPE_HLG
    हाइब्रिड लॉग-गामा का इस्तेमाल करने की सुविधा.
  • float INVALID_LUMINANCE
    ल्यूमिनेंस की अमान्य वैल्यू.

सार्वजनिक तरीके:

  • float getDesiredMaxAverageLuminance()
    इस डिसप्ले के लिए, कॉन्टेंट के ज़्यादा से ज़्यादा फ़्रेम-औसत ल्यूमिनेंस डेटा को cd/cd/m2 में दिखाता है.
  • float getDesiredMaxLuminance()
    इस डिसप्ले के लिए, cd/cd/m2 में मनचाहे कॉन्टेंट की रोशनी से जुड़े डेटा को दिखाता है.
  • float getDesiredMinLuminance()
    इस डिसप्ले के लिए, कॉन्टेंट के कम से कम ल्यूमिनेंस का डेटा cd/cd/m2 में दिखाता है.
  • int[] getSupportedHdrTypes()
    इस डिसप्ले पर काम करने वाले एचडीआर टाइप की जानकारी पाता है (कंसटेंट देखें). अगर डिसप्ले पर एचडीआर काम नहीं करता है, तो खाली अरे (कलेक्शन) दिखाता है.

डिकोडर

ऐप्लिकेशन, एचडीआर की सुविधा वाली नई प्रोफ़ाइलों के साथ काम करने की पुष्टि करने के लिए, मौजूदा CodecCapabilities.profileLevels एपीआई का इस्तेमाल करेंगे:

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 वीडियो लेयर और मेटाडेटा को हर फ़्रेम के लिए एक ही बफ़र में जोड़ना होगा. यह कामDolby-Vision सक्षम MediaExtractor की मदद से अपने-आप किया जाता है.

HEVC HDR 10

MediaCodecInfo.CodecProfileLevel प्रोफ़ाइल के लिए कॉन्स्टेंट:

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

VP9 HLG और PQ

MediaCodecInfo.CodecProfileLevel प्रोफ़ाइल के लिए कंस्टेंट:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

अगर किसी प्लैटफ़ॉर्म पर एचडीआर क्वालिटी के वीडियो बनाने वाले डिकोडर काम करते हैं, तो उस पर एचडीआर क्वालिटी के वीडियो बनाने वाले एक्सट्रैक्टर की भी सुविधा होगी.

सिर्फ़ टनल किए गए डिकोडर से एचडीआर वीडियो चलाया जा सकता है. बिना टनल किए गए डिकोडर से वीडियो चलाने पर, HDR की जानकारी मिट सकती है और वीडियो को SDR कलर वॉल्यूम में बदला जा सकता है.

एक्सट्रैक्टर

नीचे दिए गए कंटेनर, Android 7.0 पर अलग-अलग तरह की एचडीआर टेक्नोलॉजी के साथ काम करते हैं:

टेक्नोलॉजी Dolby-विज़न एचडीआर10 VP9-HLG VP9-PQ
कंटेनर MP4 MP4 WebM WebM

इस प्लैटफ़ॉर्म पर यह पता नहीं लगाया जा सकता कि किसी फ़ाइल के ट्रैक को एचडीआर की ज़रूरत है या नहीं. ऐप्लिकेशन, कोडेक के हिसाब से डेटा को पार्स कर सकते हैं, ताकि यह पता लगाया जा सके कि किसी ट्रैक के लिए किसी खास HDR प्रोफ़ाइल की ज़रूरत है या नहीं.

खास जानकारी

हर एचडीआर टेक्नोलॉजी के कॉम्पोनेंट से जुड़ी ज़रूरी शर्तों के बारे में नीचे दी गई टेबल में बताया गया है:

टेक्नोलॉजी Dolby-विज़न एचडीआर10 VP9-HLG VP9-PQ
काम करने वाला एचडीआर टाइप (डिसप्ले) HDR_TYPE_DOLBY_VISION HDR_TYPE_HDR10 एचडीआर_TYPE_एचएलजी HDR_TYPE_HDR10
कंटेनर (एक्सट्रैकर) MP4 MP4 WebM WebM
डिकोडर MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
प्रोफ़ाइल (डीकोडर) Dolby की कोई प्रोफ़ाइल HEVCProfileMain10एचडीआर10 VP9Profile2HDR या VP9Profile3HDR VP9Profile2HDR या VP9Profile3HDR

ध्यान दें:

  • Dolby-Vision बिटस्ट्रीम को MP4 कंटेनर में, Dolby से तय तरीके से पैकेज किया जाता है. ऐप्लिकेशन तब तक अपने Dolby-चालू डेटा एक्सट्रैक्ट करने वाले डेटा इकट्ठा कर सकते हैं, जब तक कि वे इससे जुड़ी लेयर की ऐक्सेस इकाइयों को Dolby के ज़रिए डिकोडर के लिए सिंगल ऐक्सेस यूनिट में पैकेज कर देते हैं.
  • ऐसा हो सकता है कि प्लैटफ़ॉर्म पर एचडीआर की सुविधा वाला एक एक्सट्रैक्टर काम करे, लेकिन उसके लिए एचडीआर-सुविधा वाला डीकोडर काम न करे.

वीडियो चलाएं

किसी ऐप्लिकेशन से एचडीआर प्लेबैक की पुष्टि हो जाने के बाद, वह एचडीआर कॉन्टेंट को करीब-करीब उसी तरह चला सकता है जिस तरह वह बिना एचडीआर वाले कॉन्टेंट को चलाता है. इसके लिए, यहां दी गई कुछ चेतावनियों को ध्यान में रखा जाता है:

  • Dolby-Vision के लिए, तुरंत उपलब्ध नहीं होता है. भले ही, किसी खास मीडिया फ़ाइल/ट्रैक के लिए एचडीआर क्वालिटी की सुविधा वाले डिकोडर की ज़रूरत हो या नहीं. ऐप्लिकेशन के पास यह जानकारी पहले से मौजूद होनी चाहिए या वह MediaFormat के कोडेक-खास डेटा सेक्शन को पार्स करके यह जानकारी पा सकता है.
  • CodecCapabilities.isFormatSupported इस बात पर ध्यान नहीं देता कि ऐसी प्रोफ़ाइल के लिए टनल किए गए डिकोडर की सुविधा की ज़रूरत है या नहीं.

एचडीआर प्लैटफ़ॉर्म की सुविधा चालू करें

किसी डिवाइस के लिए एचडीआर प्लैटफ़ॉर्म के साथ काम करने के लिए, SoC वेंडर और OEM को कुछ और काम करना होगा.

एचडीआर के लिए, Android 7.0 में प्लैटफ़ॉर्म में हुए बदलाव

यहां प्लैटफ़ॉर्म (ऐप्लिकेशन/नेटिव लेयर) में हुए कुछ अहम बदलावों के बारे में बताया गया है. इन बदलावों के बारे में OEM और SOC को पता होना चाहिए.

डिसप्ले

हार्डवेयर का कंपोज़िशन

एचडीआर की सुविधा वाले प्लैटफ़ॉर्म पर, एचडीआर कॉन्टेंट को बिना एचडीआर वाले कॉन्टेंट के साथ ब्लेंड करने की सुविधा होनी चाहिए. Android के रिलीज़ 7.0 के बाद से, ब्लेंड करने की सटीक विशेषताओं और कार्रवाइयों के बारे में नहीं बताया जाता. हालांकि, आम तौर पर यह प्रोसेस इस तरह से होती है:

  1. एक लीनियर कलर स्पेस/वॉल्यूम तय करें, जिसमें लेयर के रंग, मास्टरिंग, और संभावित डाइनैमिक मेटाडेटा के आधार पर, सभी लेयर को कंपोज़ किया जा सके.
    अगर सीधे डिसप्ले में कंपोज़िट किया जा रहा है, तो यह डिसप्ले के कलर वॉल्यूम से मेल खाने वाला लीनियर स्पेस हो सकता है.
  2. सभी लेयर को सामान्य कलर स्पेस में बदलें.
  3. ब्लेंडिंग करें.
  4. अगर एचडीएमआई के ज़रिए दिखाया जा रहा है, तो:
    1. ब्लेंड किए गए सीन के लिए रंग, मास्टरिंग, और संभावित डाइनैमिक मेटाडेटा तय करें.
    2. ब्लेंड किए गए सीन को, डेरिव्ड कलर स्पेस/वॉल्यूम में बदलें.
  5. अगर सीधे डिसप्ले पर दिखाया जा रहा है, तो ब्लेंड किए गए सीन को ज़रूरी डिसप्ले सिग्नल में बदलें, ताकि वह सीन बनाया जा सके.

डिसप्ले डिस्कवरी

एचडीआर डिसप्ले डिस्कवरी की सुविधा सिर्फ़ HW2 पर काम करती है. डिवाइस में इस सुविधा को लागू करने वाले लोगों को, चुनिंदा तौर पर HWC2 अडैप्टर को चालू करना होगा. यह अडैप्टर, Android 7.0 के साथ रिलीज़ किया गया है. इसलिए, प्लैटफ़ॉर्म को HWC2 के लिए सहायता जोड़नी होगी या इस जानकारी को उपलब्ध कराने के लिए, AOSP फ़्रेमवर्क को बड़ा करना होगा. एचडब्ल्यूसी2, फ़्रेमवर्क और ऐप्लिकेशन में एचडीआर स्टैटिक डेटा को प्रोपेगेट करने के लिए, एक नया एपीआई उपलब्ध कराता है.

HDMI

  • कनेक्ट किया गया एचडीएमआई डिसप्ले, एचडीएमआई ईडीआईडी की मदद से इसकी एचडीआर क्वालिटी दिखाता है. इसके बारे में सीटीए-861.3 सेक्शन 4.2 में बताया गया है.
  • इस ईओटीएफ़ मैपिंग का इस्तेमाल किया जाएगा:
    • ET_0 ट्रेडिशनल गामा - एसडीआर ल्यूमिनेंस रेंज: किसी भी एचडीआर टाइप से मैप नहीं किया गया है
    • ET_1 पारंपरिक गामा - एचडीआर ल्यूमिनेंस रेंज: किसी भी एचडीआर टाइप पर मैप नहीं किया गया
    • ET_2 SMPTE ST 2084 - एचडीआर टाइप HDR10 में मैप किया गया है
  • एचडीएमआई की मदद से Dolby Vision या HLG टेक्नोलॉजी का सिग्नल, एचडीएमआई की मदद से दिया जाता है.
  • ध्यान दें कि HWM2 एपीआई, फ़्लोट मनचाहे ल्यूमिनेंस वैल्यू का इस्तेमाल करता है, इसलिए 8-बिट ईडीआईडी वैल्यू का अनुवाद सही तरीके से किया जाना चाहिए.

डिकोडर

प्लैटफ़ॉर्म को एचडीआर क्वालिटी में वीडियो चलाने की सुविधा देने वाले टनल किए गए डिकोडर जोड़ने होंगे. साथ ही, एचडीआर क्वालिटी में वीडियो चलाने की सुविधा के बारे में जानकारी देनी होगी. आम तौर पर, एचडीआर क्वालिटी में वीडियो चलाने वाले डिकोडर के लिए ये ज़रूरी हैं:

  • टनल डीकोडिंग के लिए सहायता (FEATURE_TunneledPlayback).
  • एचडीआर स्टैटिक मेटाडेटा (OMX.google.android.index.describeHDRColorInfo) के साथ काम करता है. साथ ही, यह डिसप्ले/हार्डवेयर कंपोज़िशन पर भी काम करता है. HLG के लिए, डिसप्ले में सही मेटाडेटा सबमिट करना ज़रूरी है.
  • सपोर्ट कलर की जानकारी (OMX.google.android.index.describeColorAspects) और इसका डिसप्ले/हार्डवेयर कंपोज़िशन पर लागू होना.
  • एचडीआर एम्बेड किए गए मेटाडेटा के साथ काम करता हो, जैसा कि इसके मानक के हिसाब से बनाया गया है.

Dolby Vision डिकोडर सुविधा

Dolby Vision के साथ काम करने के लिए, प्लैटफ़ॉर्म को Dolby-Vision की सुविधा वाला एचडीआर ओएमएक्स डिकोडर जोड़ना होगा. Dolby Vision की खासियत को देखते हुए, आम तौर पर यह एक या एक से ज़्यादा एवीसी और/या एचईवीसी डिकोडर के साथ-साथ कंपोज़िटर के आस-पास एक रैपर डिकोडर होता है. ऐसे डिकोडर के लिए ये ज़रूरी हैं:

  • MIME टाइप "video/dolby-vision" के साथ काम करता हो.
  • इस ऐप्लिकेशन के साथ काम करने वाली Dolby Vision प्रोफ़ाइलों या लेवल का विज्ञापन किया जा सकता है.
  • उन ऐक्सेस यूनिट को स्वीकार करें जिनमें Dolby के तय किए गए सभी लेयर की सब-ऐक्सेस-यूनिट मौजूद हों.
  • Dolby के तय किए गए कोडेक से जुड़ा डेटा स्वीकार करना. उदाहरण के लिए, ऐसा डेटा जिसमें Dolby Vision प्रोफ़ाइल/लेवल का डेटा हो सकता है. साथ ही, इंटरनल डिकोडर के लिए कोडेक से जुड़ा खास डेटा हो सकता है.
  • Dolby की ज़रूरी शर्तों के मुताबिक, Dolby Vision की प्रोफ़ाइलों/लेवल के बीच अडैप्टिव स्विचिंग की सुविधा.

डिकोडर को कॉन्फ़िगर करते समय, कोडेक को असल Dolby प्रोफ़ाइल की जानकारी नहीं दी जाती. यह जानकारी, डिकोडर शुरू होने के बाद ही कोडेक के हिसाब से डेटा के ज़रिए दी जाती है. प्लैटफ़ॉर्म पर एक से ज़्यादा Dolby Vision डिकोडर काम कर सकते हैं: एक एवीसी प्रोफ़ाइल के लिए और दूसरा एचईवीसी प्रोफ़ाइल के लिए. इससे कॉन्फ़िगर करने के दौरान बुनियादी कोडेक को शुरू किया जा सकता है. अगर कोई एक Dolby Vision डिकोडर, दोनों तरह की प्रोफ़ाइलों के साथ काम करता है, तो यह ज़रूरी है कि वह डाइनैमिक तरीके से, इन प्रोफ़ाइलों के बीच स्विच करने की सुविधा भी देता हो.

अगर कोई प्लैटफ़ॉर्म, एचडीआर डिकोडर की सामान्य सुविधा के साथ-साथ Dolby-Vision की सुविधा वाला डिकोडर उपलब्ध कराता है, तो उसे:

  • Dolby-Vision का पता लगाने वाला एक्सट्रैक्टर उपलब्ध कराएं, भले ही वह एचडीआर प्लेबैक की सुविधा न देता हो.
  • ऐसा डिकोडर उपलब्ध कराएं जो Dolby की तय की गई विज़न प्रोफ़ाइल के साथ काम करता हो.

HDR10 डिकोडर की सुविधा

HDR10 की सुविधा देने के लिए, प्लैटफ़ॉर्म को HDR10 के साथ काम करने वाला OMX डिकोडर जोड़ना होगा. आम तौर पर, यह टनल किया गया एचईवीसी डिकोडर होता है. यह एचडीएमआई से जुड़े मेटाडेटा को पार्स और हैंडल करने की सुविधा भी देता है. इस तरह के डिकोडर (एचडीआर डिकोडर के साथ-साथ) को:

  • "video/hevc" MIME टाइप के साथ काम करना.
  • विज्ञापन देने वाले HEVCMain10HDR10. HEVCMain10HRD10 प्रोफ़ाइल से जुड़ी सहायता भी HEVCMain10 प्रोफ़ाइल के लिए ज़रूरी है. इसके लिए, HEVCMain
  • मास्टरिंग मेटाडेटा एसईआई ब्लॉक के साथ-साथ, एसपीएस में मौजूद एचडीआर से जुड़ी अन्य जानकारी को पार्स करने में मदद करता है.

VP9 डीकोडर की सुविधा

VP9 HDR के साथ काम करने के लिए, प्लैटफ़ॉर्म को VP9 Profile2-सुविधा वाला एचडीआर ओएमएक्स डिकोडर जोड़ना होगा. आम तौर पर, यह टनल किया गया VP9 डिकोडर होता है. यह एचडीएमआई से जुड़े मेटाडेटा को हैंडल करने की सुविधा देता है. ऐसे डिकोडर (सामान्य एचडीआर डिकोडर के साथ) के लिए ज़रूरी है कि:

  • mime टाइप "video/x-vnd.on2.vp9" के साथ काम करता है.
  • VP9Profile2HDR के साथ काम करने वाले विज्ञापन दिखाएं. VP9Profile2HDR प्रोफ़ाइल से जुड़ी सहायता के लिए भी उसी लेवल पर VP9Profile2 प्रोफ़ाइल की सुविधा ज़रूरी है.

एक्सट्रैक्टर

Dolby Vision एक्सट्रैक्टर सपोर्ट

Dolby Vision डिकोडर के साथ काम करने वाले प्लैटफ़ॉर्म को, Dolby वीडियो कॉन्टेंट के लिए Dolby एक्सट्रैक्टर (जिसे Dolby Extractor कहा जाता है) की सुविधा जोड़नी होगी.

  • सामान्य तौर पर, MP4 फ़ाइल से सिर्फ़ बेस लेयर को निकाला जा सकता है, न कि बेहतर बनाने या मेटाडेटा वाली लेयर को. इसलिए फ़ाइल से डेटा निकालने के लिए एक विशेष Dolby एक्सट्रैक्टर की ज़रूरत होती है.
  • Dolby एक्सट्रैक्टर को हर Dolby वीडियो ट्रैक (ग्रुप) के लिए एक से दो ट्रैक दिखाने चाहिए:
    • "वीडियो/dolby-vision" टाइप वाला Dolby Vision एचडीआर ट्रैक, यह 2/3-लेयर Dolby स्ट्रीम के लिए है. एचडीआर ट्रैक के ऐक्सेस-यूनिट फ़ॉर्मैट को Dolby से तय किया जाता है. इस फ़ॉर्मैट में, बेस/बेहतर बनाने/मेटाडेटा लेयर से ऐक्सेस यूनिट को एक बफ़र में पैकेज करने का तरीका बताया जाता है. ऐसा करने से, इसे एक एचडीआर फ़्रेम में डिकोड किया जा सकता है.
    • अगर Dolby Vision वीडियो ट्रैक में एक अलग (बैकवर्ड में काम करने वाला) बेस-लेयर (बीएल) है, तो एक्सट्रैक्टर को इसे एक अलग "वीडियो/एवीसी" या "वीडियो/हेवसी" ट्रैक के तौर पर भी दिखाना चाहिए. एक्सट्रैक्टर को इस ट्रैक के लिए, सामान्य एवीसी/एचईवीसी ऐक्सेस यूनिट देने होंगे.
    • ब्लैक एंड व्हाइट ट्रैक का ट्रैक-यूनीक-आईडी ("ट्रैक-आईडी"), एचडीआर ट्रैक के ट्रैक-यूनीक-आईडी से मेल खाना चाहिए, ताकि ऐप्लिकेशन यह समझ सके कि ये एक ही वीडियो के दो एन्कोडिंग हैं.
    • ऐप्लिकेशन, प्लैटफ़ॉर्म की सुविधाओं के आधार पर यह तय कर सकता है कि कौनसा ट्रैक चुनना है.
  • Dolby Vision प्रोफ़ाइल/लेवल, एचडीआर ट्रैक के ट्रैक फ़ॉर्मैट में दिखना चाहिए.
  • अगर कोई प्लैटफ़ॉर्म Dolby-Vision की सुविधा वाला डिकोडर उपलब्ध कराता है, तो उसे Dolby-Vision की जानकारी देने वाला एक्सट्रैक्टर भी उपलब्ध कराना होगा. भले ही, इसमें एचडीआर प्लेबैक की सुविधा न हो.

HDR10 और VP9 एचडीआर डेटा एक्सट्रैक्ट करने की सुविधा

HDR10 या VP9 एचएलजी के साथ काम करने के लिए, डेटा इकट्ठा करने वाले टूल की कोई और ज़रूरत नहीं है. प्लैटफ़ॉर्म को MP4 एक्सट्रैक्टर को बढ़ाना होगा, ताकि MP4 में VP9 PQ काम कर सके. एचडीआर स्टैटिक मेटाडेटा को VP9 PQ बिटस्ट्रीम में भेजा जाना चाहिए, ताकि यह मेटाडेटा VP9 PQ डिकोडर और डिसप्ले पर सामान्य MediaExtractor => MediaCodec पाइपलाइन के ज़रिए भेजा जा सके.

Dolby Vision की सुविधा के लिए Stagefright एक्सटेंशन

प्लैटफ़ॉर्म को Stagefright में Dolby Vision फ़ॉर्मैट की सुविधा जोड़नी होगी:

  • कंप्रेस किए गए पोर्ट के पोर्ट डेफ़िनिशन क्वेरी के लिए सहायता.
  • DV डिकोडर के लिए, सहायता प्रोफ़ाइल/लेवल की गिनती.
  • DV एचडीआर ट्रैक के लिए DV प्रोफ़ाइल/लेवल को सार्वजनिक करने में मदद करता है.

टेक्नोलॉजी के हिसाब से लागू करने की जानकारी

HDR10 डिकोडर पाइपलाइन

पहला डायग्राम. HDR10 पाइपलाइन

HDR10 बिटस्ट्रीम को एमपी4 कंटेनर में पैकेज किया जाता है. ऐप्लिकेशन, फ़्रेम का डेटा निकालने और उसे डिकोडर को भेजने के लिए, सामान्य MP4 एक्सट्रैक्टर का इस्तेमाल करते हैं.

  • MPEG4 एक्सट्रैक्टर
    HDR10 बिटस्ट्रीम को MPEG4एक्सट्रैकर की मदद से, सामान्य HEVC स्ट्रीम के तौर पर पहचाना जाता है. साथ ही, "वीडियो/HEVC" टाइप वाले एचडीआर ट्रैक को एक्सट्रैक्ट किया जाएगा. फ़्रेमवर्क, उस ट्रैक को डिकोड करने के लिए, HEVC वीडियो डिकोडर चुनता है जो Main10HDR10 प्रोफ़ाइल के साथ काम करता है.
  • एचईवीसी डिकोडर
    एचडीआर की जानकारी, एसईआई या एसपीएस में मौजूद होती है. HEVC डिकोडर को सबसे पहले ऐसे फ़्रेम मिलते हैं जिनमें एचडीआर की जानकारी होती है. इसके बाद, डिकोडर एचडीआर की जानकारी निकालता है और ऐप्लिकेशन को सूचना देता है कि वह एचडीआर वीडियो को डिकोड कर रहा है. एचडीआर की जानकारी को डिकोडर आउटपुट फ़ॉर्मैट में बंडल किया जाता है. इसे बाद में डिसप्ले पर दिखाया जाता है.

वेंडर की कार्रवाइयां

  1. एचडीआर डीकोडर प्रोफ़ाइल और लेवल OMX टाइप के बारे में बताएं. उदाहरण:
    OMX_VIDEO_HEVCProfileMain10HDR10 (और Main10)
  2. इस इंडेक्स के लिए सहायता लागू करें: 'OMX.google.android.index.describeHDRColorInfo'
  3. इस इंडेक्स के लिए सहायता लागू करें: 'OMX.google.android.index.describeColorAspects'
  4. मास्टरिंग मेटाडेटा को एसईआई से पार्स करने की सुविधा लागू करें.

Dolby Vision डिकोडर पाइपलाइन

दूसरी इमेज. Dolby Vision की पाइपलाइन

Dolby-bitstream को एमपी4 कंटेनर में पैकेज किया जाता है, जैसा कि Dolby ने बताया है. सिद्धांत रूप से, ऐप्लिकेशन में, बेस लेयर, बेहतर बनाने वाली लेयर, और मेटाडेटा लेयर को अलग-अलग निकालने के लिए, सामान्य MP4 एक्सट्रैक्टर का इस्तेमाल किया जा सकता है. हालांकि, यह मौजूदा Android MediaExtractor/MediaCodec मॉडल के साथ काम नहीं करता.

  • DolbyExtractor:
    • Dolby-bitstream को DolbyExtractor की मदद से पहचाना जाता है. यह हर Dolby वीडियो ट्रैक (ग्रुप) के लिए, अलग-अलग लेयर को एक से दो ट्रैक के तौर पर दिखाता है:
      • दो/तीन लेयर वाली डॉल्बी स्ट्रीम के लिए "वीडियो/डॉल्बी-विज़न" वाला एचडीआर ट्रैक. एचडीआर ट्रैक के ऐक्सेस-यूनिट फ़ॉर्मैट के बारे में बताएं कि बेस/बेहतर/मेटाडेटा लेयर से ऐक्सेस यूनिट को एक बफ़र में पैकेज के तौर पर कैसे पैकेज किया जाए, ताकि इसे एक एचडीआर फ़्रेम में डिकोड किया जा सके.
      • (ज़रूरी नहीं, सिर्फ़ तब जब बीएल पुराने सिस्टम के साथ काम करता हो) बीएल ट्रैक में सिर्फ़ बुनियादी लेयर होती है. इसे सामान्य MediaCodec डिकोडर से डिकोड किया जा सकता है. उदाहरण के लिए, AVC/एचईवीसी डिकोडर. एक्सट्रैक्टर को इस ट्रैक के लिए, नियमित AVC/एचईवीसी ऐक्सेस यूनिट उपलब्ध करानी चाहिए. इस बीएल ट्रैक का ट्रैक-यूनीक-आईडी ("track-ID"), डॉल्बी ट्रैक के ट्रैक-यूनीक-आईडी के बराबर होना चाहिए, ताकि ऐप्लिकेशन यह समझ सके कि ये एक ही वीडियो की दो एन्कोडिंग हैं.
    • ऐप्लिकेशन, प्लैटफ़ॉर्म की क्षमता के आधार पर यह तय कर सकता है कि कौनसा ट्रैक चुनना है.
    • एचडीआर ट्रैक का खास तरह का एचडीआर होता है. इसलिए, इस ट्रैक को डिकोड करने के लिए फ़्रेमवर्क, Dolby वीडियो डिकोडर चुनेगा. BL ट्रैक को किसी सामान्य एवीसी/एचईवीसी वीडियो डिकोडर से डिकोड किया जाएगा.
  • DolbyDecoder:
    • DolbyDecoder को ऐक्सेस यूनिट मिलती हैं. इनमें सभी लेयर (EL+BL+MD या BL+MD) के लिए ज़रूरी ऐक्सेस यूनिट होती हैं
    • अलग-अलग लेयर के लिए, सीएसडी (कोडेक से जुड़ा डेटा, जैसे कि एसपीएस+पीपीएस+वीपीएस) की जानकारी को एक सीएसडी फ़्रेम में पैकेज किया जा सकता है. इसे Dolby तय करता है. एक CSD फ़्रेम होना ज़रूरी है.

Dolby ऐक्शन

  1. ऐब्स्ट्रैक्ट Dolby डिकोडर (जैसे कि एचडीआर डिकोडर से उम्मीद किया गया बफ़र फ़ॉर्मैट) के लिए अलग-अलग Dolby कंटेनर स्कीम (जैसे, BL+EL+MD) के लिए ऐक्सेस यूनिट की पैकेजिंग तय करें.
  2. एब्स्ट्रैक्ट Dolby डिकोडर के लिए, सीएसडी की पैकेजिंग तय करें.

वेंडर की कार्रवाइयां

  1. Dolby एक्सट्रैक्टर लागू करें. Dolby भी ऐसा कर सकता है.
  2. DolbyExtractor को फ़्रेमवर्क में इंटिग्रेट करें. एंट्री पॉइंट frameworks/av/media/libstagefright/MediaExtractor.cpp है.
  3. एचडीआर डिकोडर प्रोफ़ाइल और लेवल OMX के टाइप की जानकारी दें. उदाहरण: OMX_VIDEO_DOLBYPROFILETYPE और OMX_VIDEO_DOLBYLEVELTYP.
  4. इंडेक्स के लिए सहायता लागू करें: 'OMX.google.android.index.describeColorAspects'
  5. हर फ़्रेम में, ऐप्लिकेशन और प्लैटफ़ॉर्म पर डाइनैमिक एचडीआर मेटाडेटा को प्रोपैगेट करें. आम तौर पर, इस जानकारी को डिकोड किए गए फ़्रेम में पैकेज किया जाना चाहिए, जैसा कि Dolby ने बताया है. इसकी वजह यह है कि एचडीएमआई स्टैंडर्ड में, इसे डिसप्ले पर भेजने का तरीका नहीं बताया गया है.

VP9 डिकोडर पाइपलाइन

तीसरी इमेज. VP9-PQ पाइपलाइन

VP9 बिट स्ट्रीम, WebM कंटेनर में WebM टीम के हिसाब से तय किए गए तरीके से पैकेज की जाती है. ऐप्लिकेशन को डिकोडर को फ़्रेम भेजने से पहले, बिटस्ट्रीम से एचडीआर मेटाडेटा निकालने के लिए, WebM एक्सट्रैक्टर का इस्तेमाल करना होगा.

  • WebM एक्सट्रैक्टर:
  • VP9 डिकोडर:
    • डिकोडर को Profile2 बिट स्ट्रीम मिलती है और वह उन्हें सामान्य VP9 स्ट्रीम की तरह डीकोड करता है.
    • डिकोडर को फ़्रेमवर्क से हर तरह का एचडीआर स्टैटिक मेटाडेटा मिलता है.
    • डिकोडर को VP9 PQ स्ट्रीम के लिए बिटस्ट्रीम ऐक्सेस यूनिट के ज़रिए स्टैटिक मेटाडेटा मिलता है.
    • VP9 डिकोडर, डिसप्ले पर एचडीआर स्टैटिक/डाइनैमिक मेटाडेटा को प्रोपेगेट कर सकता हो.

वेंडर की कार्रवाइयां

  1. इंडेक्स के लिए सहायता लागू करें: OMX.google.android.index.describeHDRColorInfo
  2. इंडेक्स के लिए सहायता लागू करें: OMX.google.android.index.describeColorAspects
  3. एचडीआर स्टैटिक मेटाडेटा को लागू करना