हाई डाइनैमिक रेंज (एचडीआर) वीडियो, अच्छी क्वालिटी वाले वीडियो को डिकोड करने की नई तकनीक है. इससे, बेहतरीन क्वालिटी में सीन दिखाए जा सकते हैं. ऐसा करने के लिए, चमक वाले कॉम्पोनेंट की डाइनैमिक रेंज को मौजूदा 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-Vision | HDR10 | VP9-HLG | VP9-PQ |
---|---|---|---|---|
कोडेक | AVC/HEVC | HEVC | VP9 | VP9 |
ट्रांसफ़र फ़ंक्शन | ST-2084 | ST-2084 | HLG | ST-2084 |
एचडीआर मेटाडेटा का टाइप | डाइनैमिक | स्थिर | कोई नहीं | स्थिर |
Android 7.0 में, सिर्फ़ टनल मोड के ज़रिए एचडीआर प्लेबैक की सुविधा तय की गई है. हालांकि, डिवाइसों में एओपैक वीडियो बफ़र का इस्तेमाल करके, SurfaceView पर एचडीआर प्लेबैक की सुविधा जोड़ी जा सकती है. दूसरे शब्दों में:
- यह देखने के लिए कोई स्टैंडर्ड Android API नहीं है कि बिना टनल किए गए डिकोडर का इस्तेमाल करके, एचडीआर प्लेबैक की सुविधा काम करती है या नहीं.
- एचडीआर प्लेबैक की सुविधा का विज्ञापन करने वाले टनल किए गए वीडियो डिकोडर, एचडीआर की सुविधा वाले डिसप्ले से कनेक्ट होने पर, एचडीआर प्लेबैक की सुविधा के साथ काम करने चाहिए.
- AOSP Android 7.0 रिलीज़ में, एचडीआर कॉन्टेंट का GL कंपज़िशन काम नहीं करता.
डिस्कवरी
एचडीआर प्लेबैक के लिए, एचडीआर डिकोडर और एचडीआर डिसप्ले से कनेक्ट करने की ज़रूरत होती है. इसके अलावा, कुछ टेक्नोलॉजी के लिए किसी खास एक्सट्रैक्टर की ज़रूरत होती है.
डिसप्ले
ऐप्लिकेशन, बताए गए डिसप्ले पर काम करने वाली 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
mime constant:
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-Vision | HDR10 | VP9-HLG | VP9-PQ |
---|---|---|---|---|
कंटेनर | MP4 | MP4 | WebM | WebM |
इस प्लैटफ़ॉर्म पर यह पता नहीं लगाया जा सकता कि किसी फ़ाइल के ट्रैक को एचडीआर की ज़रूरत है या नहीं. ऐप्लिकेशन, कोडेक के हिसाब से डेटा को पार्स कर सकते हैं, ताकि यह पता लगाया जा सके कि किसी ट्रैक के लिए किसी खास HDR प्रोफ़ाइल की ज़रूरत है या नहीं.
खास जानकारी
हर एचडीआर टेक्नोलॉजी के लिए कॉम्पोनेंट की ज़रूरी शर्तें, नीचे दी गई टेबल में दिखाई गई हैं:
टेक्नोलॉजी | Dolby-Vision | HDR10 | VP9-HLG | VP9-PQ |
---|---|---|---|---|
काम करने वाला एचडीआर टाइप (डिसप्ले) | HDR_TYPE_DOLBY_VISION | HDR_TYPE_HDR10 | HDR_TYPE_HLG | HDR_TYPE_HDR10 |
कंटेनर (एक्सट्रैक्टर) | 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-Vision के लिए, यह तुरंत पता नहीं चलता कि किसी मीडिया फ़ाइल/ट्रैक के लिए एचडीआर डिकोडर की ज़रूरत है या नहीं. ऐप्लिकेशन के पास यह जानकारी पहले से होनी चाहिए या वह MediaFormat के कोडेक से जुड़े डेटा सेक्शन को पार्स करके यह जानकारी हासिल कर सकता हो.
CodecCapabilities.isFormatSupported
इस बात पर ध्यान नहीं देता कि ऐसी प्रोफ़ाइल के साथ काम करने के लिए, टनल किए गए डिकोडर की सुविधा ज़रूरी है या नहीं.
एचडीआर प्लैटफ़ॉर्म के लिए सहायता चालू करना
किसी डिवाइस पर एचडीआर प्लैटफ़ॉर्म की सुविधा चालू करने के लिए, SoC वेंडर और OEM को कुछ और काम करने होंगे.
एचडीआर के लिए, Android 7.0 में प्लैटफ़ॉर्म में हुए बदलाव
यहां प्लैटफ़ॉर्म (ऐप्लिकेशन/नेटिव लेयर) में हुए कुछ अहम बदलावों के बारे में बताया गया है. OEM और SOC को इनके बारे में पता होना चाहिए.
डिसप्ले
हार्डवेयर का कंपोज़िशन
एचडीआर की सुविधा वाले प्लैटफ़ॉर्म पर, एचडीआर क्वालिटी वाले कॉन्टेंट को नॉन-एचडीआर क्वालिटी वाले कॉन्टेंट के साथ ब्लेंड किया जा सकता है. Android 7.0 रिलीज़ के बाद, ब्लेंड करने की सटीक विशेषताओं और कार्रवाइयों के बारे में जानकारी नहीं दी गई है. हालांकि, आम तौर पर यह प्रोसेस इन चरणों के हिसाब से होती है:
- एक लीनियर कलर स्पेस/वॉल्यूम तय करें, जिसमें लेयर के रंग, मास्टरी करने की प्रोसेस, और संभावित डाइनैमिक मेटाडेटा के आधार पर, सभी लेयर को कंपोज़ किया जा सके.
अगर सीधे किसी डिसप्ले पर कॉम्पोज़ किया जा रहा है, तो यह डिसप्ले के कलर वॉल्यूम से मैच करने वाला लीनियर स्पेस हो सकता है. - सभी लेयर को सामान्य कलर स्पेस में बदलें.
- ब्लेंडिंग करें.
- अगर एचडीएमआई के ज़रिए दिखाया जा रहा है, तो:
- ब्लेंड किए गए सीन के लिए कलर, मेस्ट्रिंग, और संभावित डाइनैमिक मेटाडेटा तय करें.
- ब्लेंड किए गए सीन को, डेरिव्ड कलर स्पेस/वॉल्यूम में बदलें.
- अगर सीधे डिसप्ले पर दिखाया जा रहा है, तो उस सीन को दिखाने के लिए, ब्लेंड किए गए सीन को ज़रूरी डिसप्ले सिग्नल में बदलें.
डिसप्ले डिस्कवरी
एचडीआर डिसप्ले डिस्कवरी की सुविधा सिर्फ़ HWC2 के ज़रिए काम करती है. डिवाइस लागू करने वाले लोगों को, इस सुविधा के काम करने के लिए, चुनिंदा तौर पर HWC2 अडैप्टर को चालू करना होगा. यह अडैप्टर, Android 7.0 के साथ रिलीज़ किया गया है. इसलिए, प्लैटफ़ॉर्म को HWC2 के लिए सहायता जोड़नी होगी या इस जानकारी को उपलब्ध कराने के लिए, AOSP फ़्रेमवर्क को बड़ा करना होगा. एचडब्ल्यूसी2, फ़्रेमवर्क और ऐप्लिकेशन में एचडीआर स्टैटिक डेटा को प्रोपेगेट करने के लिए, एक नया एपीआई उपलब्ध कराता है.
HDMI
- कनेक्ट किया गया एचडीएमआई डिसप्ले, एचडीएमआई ईडीआईडी के ज़रिए अपनी एचडीआर क्षमता का एलान करता है. इस बारे में CTA-861.3 के सेक्शन 4.2 में बताया गया है.
- इन ईओटीएफ़ मैपिंग का इस्तेमाल किया जाएगा:
- ET_0 पारंपरिक गामा - एसडीआर ल्यूमिनेंस रेंज: किसी भी एचडीआर टाइप पर मैप नहीं किया गया
- ET_1 पारंपरिक गामा - एचडीआर ल्यूमिनेंस रेंज: किसी भी एचडीआर टाइप पर मैप नहीं किया गया
- ET_2 SMPTE ST 2084 - एचडीआर टाइप HDR10 पर मैप किया गया
- एचडीएमआई के ज़रिए Dolby Vision या एचएलजी के साथ काम करने की सुविधा के सिग्नल को, संबंधित निकायों के तय किए गए तरीके के मुताबिक दिखाया जाता है.
- ध्यान दें कि HWC2 API, लुमिनेंस की मनमुताबिक वैल्यू का इस्तेमाल करता है. इसलिए, 8-बिट के ईडीआईडी की वैल्यू को सही तरीके से बदला जाना चाहिए.
डिकोडर
प्लैटफ़ॉर्म को एचडीआर क्वालिटी में वीडियो चलाने की सुविधा देने वाले टनल किए गए डिकोडर जोड़ने होंगे. साथ ही, एचडीआर क्वालिटी में वीडियो चलाने की सुविधा के बारे में जानकारी देनी होगी. आम तौर पर, एचडीआर क्वालिटी में वीडियो चलाने वाले डिकोडर के लिए ये ज़रूरी हैं:
- टनल किए गए डेटा को डिकोड करने की सुविधा (
FEATURE_TunneledPlayback
) का इस्तेमाल किया जा सकता है. - एचडीआर स्टैटिक मेटाडेटा (
OMX.google.android.index.describeHDRColorInfo
) और डिसप्ले/हार्डवेयर कॉम्पोज़िशन में इसके प्रॉपेगेशन के साथ काम करना. HLG के लिए, डिसप्ले पर सही मेटाडेटा सबमिट करना ज़रूरी है. - रंग की जानकारी (
OMX.google.android.index.describeColorAspects
) और डिसप्ले/हार्डवेयर कॉम्पोनेंट में इसके प्रॉपेगेशन के साथ काम करता है. - एचडीआर एम्बेड किए गए मेटाडेटा के साथ काम करना, जैसा कि संबंधित स्टैंडर्ड में बताया गया है.
Dolby Vision डिकोडर की सुविधा
Dolby Vision की सुविधा के साथ काम करने के लिए, प्लैटफ़ॉर्म को Dolby-Vision के साथ काम करने वाला एचडीआर OMX डिकोडर जोड़ना होगा. Dolby Vision की खास बातों को ध्यान में रखते हुए, आम तौर पर यह एक या एक से ज़्यादा AVC और/या HEVC डिकोडर के साथ-साथ एक कॉम्पोज़िटर के आस-पास का एक रैपर डिकोडर होता है. ऐसे डिकोडर के लिए ये ज़रूरी हैं:
- "video/dolby-vision" MIME टाइप के साथ काम करता हो.
- काम करने वाली Dolby Vision प्रोफ़ाइलों/लेवल का विज्ञापन दिखाएं.
- ऐसी ऐक्सेस यूनिट स्वीकार करें जिनमें Dolby के मुताबिक, सभी लेयर की सब-ऐक्सेस-यूनिट शामिल हों.
- Dolby के तय किए गए कोडेक से जुड़ा डेटा स्वीकार करना. उदाहरण के लिए, ऐसा डेटा जिसमें Dolby Vision प्रोफ़ाइल/लेवल और शायद इंटरनल डिकोडर के लिए कोडेक से जुड़ा डेटा शामिल हो.
- Dolby की ज़रूरी शर्तों के मुताबिक, Dolby Vision की प्रोफ़ाइलों/लेवल के बीच अडैप्टिव स्विचिंग की सुविधा.
डिकोडर को कॉन्फ़िगर करते समय, कोडेक को असल Dolby प्रोफ़ाइल की जानकारी नहीं दी जाती. यह जानकारी, डिकोडर शुरू होने के बाद ही कोडेक के हिसाब से डेटा के ज़रिए दी जाती है. कोई प्लैटफ़ॉर्म, एक से ज़्यादा Dolby Vision डिकोडर के साथ काम कर सकता है: एक AVC प्रोफ़ाइलों के लिए और दूसरा HEVC प्रोफ़ाइलों के लिए, ताकि कॉन्फ़िगरेशन के दौरान मौजूद कोडेक को शुरू किया जा सके. अगर कोई एक Dolby Vision डिकोडर, दोनों तरह की प्रोफ़ाइलों के साथ काम करता है, तो यह ज़रूरी है कि वह डाइनैमिक तरीके से, इन प्रोफ़ाइलों के बीच स्विच करने की सुविधा भी देता हो.
अगर कोई प्लैटफ़ॉर्म, सामान्य एचडीआर डीकोडर के साथ-साथ Dolby-Vision डीकोडर की सुविधा देता है, तो उसे ये काम करने होंगे:
- Dolby Vision के साथ काम करने वाला एक्सट्रैक्टर उपलब्ध कराएं. भले ही, उसमें एचडीआर प्लेबैक की सुविधा न हो.
- ऐसा डिकोडर उपलब्ध कराएं जो Dolby की तय की गई विज़न प्रोफ़ाइल के साथ काम करता हो.
HDR10 डिकोडर की सुविधा
HDR10 की सुविधा देने के लिए, प्लैटफ़ॉर्म को HDR10 के साथ काम करने वाला OMX डिकोडर जोड़ना होगा. आम तौर पर, यह एक टनल किया गया HEVC डिकोडर होता है. यह HDMI से जुड़े मेटाडेटा को पार्स और मैनेज करने की सुविधा भी देता है. सामान्य एचडीआर डिकोडर के साथ-साथ, इस तरह के डिकोडर में ये चीज़ें होनी चाहिए:
- "video/hevc" MIME टाइप के साथ काम करना.
- HEVCMain10HDR10 के साथ काम करने वाले डिवाइसों का विज्ञापन दिखाएं. HEVCMain10HRD10 प्रोफ़ाइल के साथ काम करने के लिए, HEVCMain10 प्रोफ़ाइल के साथ काम करना भी ज़रूरी है. इसके लिए, HEVCMain प्रोफ़ाइल के साथ भी उसी लेवल पर काम करना ज़रूरी है.
- मास्टरिंग मेटाडेटा एसईआई ब्लॉक के साथ-साथ, एसपीएस में मौजूद एचडीआर से जुड़ी अन्य जानकारी को पार्स करने में मदद करता है.
VP9 डीकोडर की सुविधा
VP9 एचडीआर की सुविधा इस्तेमाल करने के लिए, प्लैटफ़ॉर्म को VP9 Profile2 के साथ काम करने वाला एचडीआर OMX डिकोडर जोड़ना होगा. आम तौर पर, यह टनल किया गया VP9 डिकोडर होता है. यह HDMI से जुड़े मेटाडेटा को मैनेज करने की सुविधा भी देता है. ऐसे डिकोडर के लिए, सामान्य एचडीआर डिकोडर के साथ-साथ ये ज़रूरी हैं:
- mime टाइप "video/x-vnd.on2.vp9" के साथ काम करता है.
- VP9Profile2HDR के साथ काम करने वाले विज्ञापन दिखाएं. VP9Profile2HDR प्रोफ़ाइल के साथ काम करने के लिए, VP9Profile2 प्रोफ़ाइल के साथ भी काम करना ज़रूरी है.
एक्सट्रैक्टर
Dolby Vision एक्सट्रैक्टर की सुविधा
Dolby Vision डिकोडर के साथ काम करने वाले प्लैटफ़ॉर्म को, Dolby वीडियो कॉन्टेंट के लिए Dolby एक्सट्रैक्टर (जिसे Dolby Extractor कहा जाता है) की सुविधा जोड़नी होगी.
- सामान्य तौर पर, MP4 फ़ाइल से सिर्फ़ बेस लेयर को निकाला जा सकता है, न कि बेहतर बनाने या मेटाडेटा वाली लेयर को. इसलिए, फ़ाइल से डेटा निकालने के लिए, एक खास Dolby एक्सट्रैक्टर की ज़रूरत होती है.
- Dolby एक्सट्रैक्टर को हर Dolby वीडियो ट्रैक (ग्रुप) के लिए एक से दो ट्रैक दिखाने चाहिए:
- दो या तीन लेयर वाली डॉल्बी स्ट्रीम के लिए, "video/dolby-vision" टाइप वाला Dolby Vision HDR ट्रैक. एचडीआर ट्रैक का ऐक्सेस-यूनिट फ़ॉर्मैट, Dolby तय करता है. इससे यह तय होता है कि बेस/बेहतर बनाने/मेटाडेटा लेयर से ऐक्सेस यूनिट को एक बफ़र में कैसे पैकेज किया जाए, ताकि उसे एक एचडीआर फ़्रेम में डिकोड किया जा सके.
- अगर किसी Dolby Vision वीडियो ट्रैक में एक अलग (पिछले वर्शन के साथ काम करने वाला) आधार-लेयर (बीएल) है, तो एक्सट्रैक्टर को इसे "video/avc" या "video/hevc" ट्रैक के तौर पर भी अलग से दिखाना चाहिए. एक्सट्रैक्टर को इस ट्रैक के लिए, नियमित AVC/HEVC ऐक्सेस यूनिट उपलब्ध करानी होंगी.
- ब्लैक एंड व्हाइट ट्रैक का ट्रैक-यूनीक-आईडी ("ट्रैक-आईडी"), एचडीआर ट्रैक के ट्रैक-यूनीक-आईडी से मेल खाना चाहिए, ताकि ऐप्लिकेशन यह समझ सके कि ये एक ही वीडियो के दो एन्कोडिंग हैं.
- ऐप्लिकेशन, प्लैटफ़ॉर्म की सुविधाओं के आधार पर यह तय कर सकता है कि कौनसा ट्रैक चुनना है.
- Dolby Vision प्रोफ़ाइल/लेवल, एचडीआर ट्रैक के ट्रैक फ़ॉर्मैट में दिखना चाहिए.
- अगर कोई प्लैटफ़ॉर्म, Dolby Vision के साथ काम करने वाला डिकोडर उपलब्ध कराता है, तो उसे Dolby Vision के साथ काम करने वाला एक्सट्रैक्टर भी उपलब्ध कराना होगा. भले ही, उस पर एचडीआर प्लेबैक की सुविधा उपलब्ध न हो.
HDR10 और VP9 एचडीआर एक्सट्रैक्टर की सुविधा
HDR10 या VP9 HLG के साथ काम करने के लिए, एक्सट्रैक्टर की कोई और ज़रूरी शर्त नहीं है. प्लैटफ़ॉर्म को MP4 एक्सट्रैक्टर को बढ़ाना होगा, ताकि MP4 में VP9 PQ काम कर सके. एचडीआर स्टैटिक मेटाडेटा को VP9 PQ बिटरस्ट्रीम में भेजा जाना चाहिए, ताकि यह मेटाडेटा, सामान्य MediaExtractor => MediaCodec पाइपलाइन के ज़रिए VP9 PQ डिकोडर और डिसप्ले को भेजा जा सके.
Dolby Vision की सुविधा के लिए Stagefright एक्सटेंशन
प्लैटफ़ॉर्म को Stagefright में Dolby Vision फ़ॉर्मैट की सुविधा जोड़नी होगी:
- कंप्रेस किए गए पोर्ट के लिए, पोर्ट की परिभाषा से जुड़ी क्वेरी के लिए सहायता.
- डीवी डीकोडर के लिए प्रोफ़ाइल/लेवल की जानकारी देने की सुविधा.
- डीवी एचडीआर ट्रैक के लिए, डीवी प्रोफ़ाइल/लेवल को एक्सपोज़ करने की सुविधा.
अलग-अलग टेक्नोलॉजी के हिसाब से लागू करने की जानकारी
HDR10 डीकोडर पाइपलाइन
पहली इमेज. HDR10 पाइपलाइन
HDR10 बिटस्ट्रीम को एमपी4 कंटेनर में पैकेज किया जाता है. ऐप्लिकेशन, फ़्रेम डेटा को निकालने और उसे डिकोडर को भेजने के लिए, रेगुलर एमपी4 एक्सट्रैक्टर का इस्तेमाल करते हैं.
- MPEG4 Extractor
HDR10 बिटस्ट्रीम को MPEG4Extractor, सामान्य HEVC स्ट्रीम के तौर पर पहचानता है. साथ ही, "video/HEVC" टाइप वाला HDR ट्रैक निकाला जाएगा. फ़्रेमवर्क, उस ट्रैक को डिकोड करने के लिए, HEVC वीडियो डिकोडर चुनता है जो Main10HDR10 प्रोफ़ाइल के साथ काम करता है. - एचईवीसी डिकोडर
एचडीआर की जानकारी, एसईआई या एसपीएस में मौजूद होती है. HEVC डिकोडर को सबसे पहले ऐसे फ़्रेम मिलते हैं जिनमें एचडीआर की जानकारी होती है. इसके बाद, डिकोडर एचडीआर की जानकारी निकालता है और ऐप्लिकेशन को सूचना देता है कि वह एचडीआर वीडियो को डिकोड कर रहा है. एचडीआर की जानकारी को डिकोडर आउटपुट फ़ॉर्मैट में बंडल किया जाता है. इसे बाद में डिवाइस पर दिखाया जाता है.
वेंडर की कार्रवाइयां
- एचडीआर डीकोडर प्रोफ़ाइल और लेवल OMX टाइप के बारे में बताएं. उदाहरण:
OMX_VIDEO_HEVCProfileMain10HDR10
(औरMain10
) - इंडेक्स के लिए सहायता लागू करना:
'
OMX.google.android.index.describeHDRColorInfo
' - इंडेक्स के लिए सहायता लागू करना:
'
OMX.google.android.index.describeColorAspects
' - मास्टरी मेटाडेटा के लिए, एसईआई पार्सिंग की सुविधा लागू की गई.
Dolby Vision डिकोडर पाइपलाइन
दूसरी इमेज. Dolby Vision की पाइपलाइन
Dolby-bitstream को एमपी4 कंटेनर में पैकेज किया जाता है, जैसा कि Dolby ने बताया है. सिद्धांत रूप से, ऐप्लिकेशन में, बेस लेयर, बेहतर बनाने वाली लेयर, और मेटाडेटा लेयर को अलग-अलग निकालने के लिए, सामान्य MP4 एक्सट्रैक्टर का इस्तेमाल किया जा सकता है. हालांकि, यह Android के मौजूदा MediaExtractor/MediaCodec मॉडल के साथ काम नहीं करता.
- DolbyExtractor:
- Dolby-बिटस्ट्रीम को DolbyExtractor की मदद से पहचाना जाता है. यह हर Dolby वीडियो ट्रैक (ग्रुप) के लिए, अलग-अलग लेयर को एक से दो ट्रैक के तौर पर दिखाता है:
- एचडीआर ट्रैक, जिसका टाइप "video/dolby-vision" हो और जो दो/तीन लेयर वाली डॉल्बी स्ट्रीम के लिए हो. एचडीआर ट्रैक का ऐक्सेस-यूनिट फ़ॉर्मैट, Dolby तय करता है. इससे यह तय होता है कि बेस/बेहतर बनाने वाली/मेटाडेटा लेयर से ऐक्सेस यूनिट को एक बफ़र में कैसे पैकेज किया जाए, ताकि उसे एक एचडीआर फ़्रेम में डिकोड किया जा सके.
- (ज़रूरी नहीं, सिर्फ़ तब जब बीएल पुराने सिस्टम के साथ काम करता हो) बीएल ट्रैक में सिर्फ़ बुनियादी लेयर होती है. इसे सामान्य MediaCodec डिकोडर से डिकोड किया जा सकता है. उदाहरण के लिए, AVC/एचईवीसी डिकोडर. एक्सट्रैक्टर को इस ट्रैक के लिए, नियमित AVC/एचईवीसी ऐक्सेस यूनिट उपलब्ध करानी चाहिए. इस बीएल ट्रैक का ट्रैक-यूनीक-आईडी ("track-ID"), डॉल्बी ट्रैक के ट्रैक-यूनीक-आईडी के बराबर होना चाहिए, ताकि ऐप्लिकेशन यह समझ सके कि ये एक ही वीडियो की दो एन्कोडिंग हैं.
- ऐप्लिकेशन, प्लैटफ़ॉर्म की सुविधाओं के आधार पर यह तय कर सकता है कि कौनसा ट्रैक चुनना है.
- एचडीआर ट्रैक में एक खास एचडीआर टाइप होता है. इसलिए, फ़्रेमवर्क उस ट्रैक को डिकोड करने के लिए, Dolby वीडियो डिकोडर चुनेगा. BL ट्रैक को सामान्य AVC/HEVC वीडियो डिकोडर से डिकोड किया जाएगा.
- Dolby-बिटस्ट्रीम को DolbyExtractor की मदद से पहचाना जाता है. यह हर Dolby वीडियो ट्रैक (ग्रुप) के लिए, अलग-अलग लेयर को एक से दो ट्रैक के तौर पर दिखाता है:
- DolbyDecoder:
- DolbyDecoder को ऐक्सेस यूनिट मिलती हैं. इनमें सभी लेयर (EL+BL+MD या BL+MD) के लिए ज़रूरी ऐक्सेस यूनिट होती हैं
- अलग-अलग लेयर के लिए, सीएसडी (कोडेक से जुड़ा डेटा, जैसे कि एसपीएस+पीपीएस+वीपीएस) की जानकारी को एक सीएसडी फ़्रेम में पैकेज किया जा सकता है. इसे Dolby तय करता है. एक सीएसडी फ़्रेम होना ज़रूरी है.
Dolby ऐक्शन
- एब्स्ट्रैक्ट Dolby डिकोडर (यानी HDR डिकोडर के लिए उम्मीद के मुताबिक बफ़र फ़ॉर्मैट) के लिए, अलग-अलग Dolby कंटेनर स्कीम (जैसे, BL+EL+MD) के लिए ऐक्सेस यूनिट की पैकेजिंग तय करें.
- एब्स्ट्रैक्ट Dolby डिकोडर के लिए, सीएसडी की पैकेजिंग तय करें.
वेंडर की कार्रवाइयां
- Dolby एक्सट्रैक्टर लागू करें. Dolby भी ऐसा कर सकता है.
- DolbyExtractor को फ़्रेमवर्क में इंटिग्रेट करें. एंट्री पॉइंट
frameworks/av/media/libstagefright/MediaExtractor.cpp
है. - एचडीआर डिकोडर प्रोफ़ाइल और लेवल OMX के टाइप की जानकारी दें. उदाहरण:
OMX_VIDEO_DOLBYPROFILETYPE
औरOMX_VIDEO_DOLBYLEVELTYP
. - index:
'OMX.google.android.index.describeColorAspects
के लिए सहायता लागू करना' - हर फ़्रेम में, ऐप्लिकेशन और प्लैटफ़ॉर्म पर डाइनैमिक एचडीआर मेटाडेटा को प्रोपैगेट करें. आम तौर पर, इस जानकारी को डिकोड किए गए फ़्रेम में पैकेज किया जाना चाहिए, जैसा कि Dolby ने बताया है. इसकी वजह यह है कि एचडीएमआई स्टैंडर्ड में, डिसप्ले पर इसे पास करने का कोई तरीका नहीं दिया गया है.
VP9 डिकोडर पाइपलाइन
तीसरी इमेज. VP9-PQ पाइपलाइन
VP9 बिटस्ट्रीम को WebM कंटेनर में पैकेज किया जाता है. ऐसा, WebM टीम के तय किए गए तरीके से किया जाता है. डिकोडर में फ़्रेम भेजने से पहले, ऐप्लिकेशन को बिटस्ट्रीम से एचडीआर मेटाडेटा निकालने के लिए, WebM एक्सट्रैक्टर का इस्तेमाल करना होगा.
- WebM एक्सट्रैक्टर:
- VP9 डिकोडर:
- डिकोडर को Profile2 बिटस्ट्रीम मिलती हैं और उन्हें सामान्य VP9 बिटस्ट्रीम के तौर पर डिकोड किया जाता है.
- डिकोडर को फ़्रेमवर्क से एचडीआर स्टैटिक मेटाडेटा मिलता है.
- VP9 PQ स्ट्रीम के लिए, डिकोडर को बिटस्ट्रीम ऐक्सेस यूनिट के ज़रिए स्टैटिक मेटाडेटा मिलता है.
- VP9 डिकोडर, डिसप्ले पर एचडीआर स्टैटिक/डाइनैमिक मेटाडेटा को प्रोपेगेट कर सकता हो.
वेंडर की कार्रवाइयां
- इंडेक्स के लिए सहायता लागू करना:
OMX.google.android.index.describeHDRColorInfo
- इंडेक्स के लिए सहायता लागू करना:
OMX.google.android.index.describeColorAspects
- एचडीआर स्टैटिक मेटाडेटा को प्रोपेगेट करना