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

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

Android 10 पर, इन एचडीआर वीडियो को चलाया जा सकता है.

  • HDR10
  • VP9
  • HDR10+

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

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

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

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

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

टेक्नोलॉजी Dolby-Vision HDR10 VP9-एचएलजी 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 कंपोज़िशन की सुविधा काम नहीं करती.

डिस्कवरी

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

डिसप्ले

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

  • 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 profile constants:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

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

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

डेटा एक्सट्रैक्टर

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

टेक्नोलॉजी Dolby-Vision HDR10 VP9-एचएलजी VP9-PQ
कंटेनर MP4 MP4 WebM WebM

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

खास जानकारी

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

टेक्नोलॉजी Dolby-Vision HDR10 VP9-एचएलजी 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 के हिसाब से, संबंधित लेयर की ऐक्सेस यूनिट को डिकोडर के लिए एक ही ऐक्सेस यूनिट में पैकेज करना होगा.
  • ऐसा हो सकता है कि कोई प्लैटफ़ॉर्म, एचडीआर की सुविधा वाले एक्सट्रैक्टर के साथ काम करता हो, लेकिन एचडीआर की सुविधा वाले डिकोडर के साथ काम न करता हो.

वीडियो चलाएं

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

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

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

एसओसी वेंडर और ओईएम को, किसी डिवाइस के लिए एचडीआर प्लैटफ़ॉर्म की सुविधा चालू करने के लिए, अतिरिक्त काम करना होगा.

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

यहां प्लैटफ़ॉर्म (ऐप्लिकेशन/नेटिव लेयर) में हुए कुछ मुख्य बदलावों के बारे में बताया गया है, जिनके बारे में ओईएम और एसओसी को जानकारी होनी चाहिए.

डिसप्ले

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

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

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

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

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

एचडीएमआई

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

डिकोडर

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

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

Dolby Vision डिकोडर के साथ काम करता है

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

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

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

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

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

HDR10 डिकोडर काम करता है

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

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

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

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

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

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

Dolby Vision एक्सट्रैक्टर की सुविधा

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

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

HDR10 और VP9 एचडीआर एक्सट्रैक्टर के साथ काम करता है

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

Dolby Vision के साथ काम करने के लिए Stagefright एक्सटेंशन

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

  • कंप्रेस किए गए पोर्ट के लिए, पोर्ट की परिभाषा वाली क्वेरी की सुविधा.
  • DV डिकोडर के लिए, प्रोफ़ाइल/लेवल की गिनती करने की सुविधा.
  • DV एचडीआर ट्रैक के लिए, DV प्रोफ़ाइल/लेवल को दिखाने की सुविधा.

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

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

पहली इमेज. HDR10 पाइपलाइन

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

  • MPEG4 Extractor
    MPEG4Extractor, HDR10 बिटस्ट्रीम को सिर्फ़ एक सामान्य HEVC स्ट्रीम के तौर पर पहचानता है. साथ ही, "video/HEVC" टाइप वाले HDR ट्रैक को एक्सट्रैक्ट करेगा. फ़्रेमवर्क, Main10HDR10 प्रोफ़ाइल के साथ काम करने वाले HEVC वीडियो डिकोडर को चुनता है, ताकि उस ट्रैक को डिकोड किया जा सके.
  • HEVC डिकोडर
    एचडीआर की जानकारी, एसईआई या एसपीएस में होती है. 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-bitstreams को MP4 कंटेनर में पैक किया जाता है. इसके बारे में Dolby ने बताया है. सैद्धांतिक तौर पर, ऐप्लिकेशन एक सामान्य MP4 एक्सट्रैक्टर का इस्तेमाल करके, बेस लेयर, बेहतर बनाने वाली लेयर, और मेटाडेटा लेयर को अलग-अलग एक्सट्रैक्ट कर सकते हैं. हालांकि, यह Android MediaExtractor/MediaCodec के मौजूदा मॉडल के मुताबिक नहीं है.

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

Dolby की कार्रवाइयां

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

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

  1. Dolby एक्सट्रैक्टर लागू करें. यह काम Dolby भी कर सकता है.
  2. DolbyExtractor को फ़्रेमवर्क में इंटिग्रेट करें. एंट्री पॉइंट frameworks/av/media/libstagefright/MediaExtractor.cpp है.
  3. एचडीआर डिकोडर प्रोफ़ाइल और लेवल OMX टाइप का एलान करें. उदाहरण: OMX_VIDEO_DOLBYPROFILETYPE और OMX_VIDEO_DOLBYLEVELTYP.
  4. index: '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. एचडीआर स्टैटिक मेटाडेटा को आगे बढ़ाना