پخش فیلم HDR

ویدیو با محدوده دینامیکی بالا (HDR) مرز بعدی در رمزگشایی ویدیوی با کیفیت بالا است که کیفیت بازتولید صحنه بی‌نظیر را به ارمغان می‌آورد. این کار را با افزایش قابل توجه محدوده دینامیکی مولفه روشنایی (از 100 cd/ m2 به 1000s cd/ m2 ) و با استفاده از فضای رنگی بسیار گسترده تر (BT 2020) انجام می دهد. اکنون این یک عنصر اصلی تکامل 4K UHD در فضای تلویزیون است.

اندروید 10 از ویدیوهای HDR زیر پشتیبانی می کند.

  • HDR10
  • VP9
  • HDR10+

با شروع Android 9 و بالاتر، MediaCodec فراداده HDR را بدون توجه به حالت تونل شده گزارش می کند. می توانید داده های رمزگشایی شده را همراه با متادیتای ایستا/دینامیک در حالت غیر تونل شده دریافت کنید. برای HDR10 و VP9Profile2 که از فراداده ایستا استفاده می کند، اینها در قالب خروجی با کلید KEY_HDR_STATIC_INFO گزارش می شوند. برای HDR10+ که از فراداده پویا استفاده می‌کند، با کلید KEY_HDR10_PLUS_INFO در قالب خروجی گزارش می‌شود و ممکن است برای هر فریم خروجی تغییر کند. برای اطلاعات بیشتر به تونل چند رسانه ای مراجعه کنید.

از اندروید 7.0، پشتیبانی اولیه HDR شامل ایجاد ثابت های مناسب برای کشف و راه اندازی خطوط لوله ویدیوی HDR است. این بدان معناست که انواع کدک ها و حالت های نمایش را تعریف کنید و مشخص کنید که چگونه داده های HDR باید به MediaCodec ارسال شوند و به رسیورهای HDR عرضه شوند.

هدف این سند کمک به توسعه دهندگان برنامه برای پشتیبانی از پخش جریان HDR و کمک به OEM ها و SOC ها برای فعال کردن ویژگی های HDR است.

فناوری های HDR پشتیبانی می شود

از اندروید 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 از طریق حالت تونل‌شده تعریف شده است ، اما دستگاه‌ها ممکن است با استفاده از بافرهای ویدیویی مات، از پخش HDR در SurfaceViews پشتیبانی کنند. به عبارت دیگر:

  • هیچ API استاندارد Android برای بررسی اینکه آیا پخش HDR با استفاده از رمزگشاهای غیر تونل شده پشتیبانی می شود وجود ندارد.
  • رسیورهای ویدئویی تونلی که قابلیت پخش HDR را تبلیغ می‌کنند، هنگام اتصال به نمایشگرهای دارای قابلیت HDR باید از پخش HDR پشتیبانی کنند.
  • ترکیب GL محتوای HDR توسط نسخه AOSP Android 7.0 پشتیبانی نمی‌شود.

کشف

پخش 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/m 2 برای این نمایشگر برمی‌گرداند.
  • float getDesiredMaxLuminance()
    داده های حداکثر روشنایی محتوای مورد نظر را به صورت cd/cd/m 2 برای این نمایشگر برمی گرداند.
  • float getDesiredMinLuminance()
    داده های حداقل روشنایی محتوای مورد نظر را به صورت cd/cd/m 2 برای این نمایشگر برمی گرداند.
  • int[] getSupportedHdrTypes()
    انواع HDR پشتیبانی شده این نمایشگر را دریافت می کند (به ثابت ها مراجعه کنید). اگر HDR توسط نمایشگر پشتیبانی نشود، آرایه خالی را برمی‌گرداند.

رمزگشا

برنامه ها باید از CodecCapabilities.profileLevels API موجود برای تأیید پشتیبانی از پروفایل های جدید HDR استفاده کنند:

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 و ابرداده‌ها باید توسط برنامه‌های ویدیویی در یک بافر در هر فریم الحاق شوند. این کار به طور خودکار توسط MediaExtractor دارای قابلیت Dolby-Vision انجام می شود.

HEVC HDR 10

ثابت های نمایه 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-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
کانتینر (استخراج کننده) MP4 MP4 WebM WebM
رمزگشا MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
نمایه (رمزگشا) یکی از پروفایل های دالبی HEVCProfileMain10HDR10 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 برای یک دستگاه انجام دهند.

تغییرات پلتفرم در اندروید 7.0 برای HDR

در اینجا برخی از تغییرات کلیدی در پلتفرم (برنامه/لایه بومی) وجود دارد که OEMها و SOCها باید از آن آگاه باشند.

نمایش

ترکیب سخت افزاری

پلتفرم‌های دارای HDR باید از ترکیب محتوای HDR با محتوای غیر HDR پشتیبانی کنند. ویژگی‌ها و عملیات ترکیب دقیق توسط اندروید تا نسخه 7.0 تعریف نشده است، اما فرآیند به طور کلی این مراحل را دنبال می‌کند:

  1. یک فضای رنگ/حجم خطی را تعیین کنید که شامل تمام لایه‌هایی است که باید ترکیب شوند، بر اساس رنگ لایه‌ها، مسترینگ و ابرداده پویا بالقوه.
    اگر مستقیماً با نمایشگر ترکیب می شود، این می تواند فضای خطی باشد که با حجم رنگ نمایشگر مطابقت دارد.
  2. همه لایه ها را به فضای رنگی مشترک تبدیل کنید.
  3. ترکیب را انجام دهید.
  4. در صورت نمایش از طریق HDMI:
    1. رنگ، مسترینگ و متادیتای پویا بالقوه را برای صحنه ترکیبی تعیین کنید.
    2. صحنه ترکیبی حاصل را به فضای رنگی/حجم مشتق شده تبدیل کنید.
  5. اگر مستقیماً روی نمایشگر نمایش داده می شود، صحنه ترکیبی حاصل را به سیگنال های نمایشی مورد نیاز برای تولید آن صحنه تبدیل کنید.

نمایش کشف

کشف صفحه نمایش HDR فقط از طریق HWC2 پشتیبانی می شود. پیاده‌کننده‌های دستگاه باید به‌طور انتخابی آداپتور HWC2 را که با Android 7.0 منتشر شده است، فعال کنند تا این ویژگی کار کند. بنابراین، پلتفرم‌ها باید پشتیبانی از HWC2 را اضافه کنند یا چارچوب AOSP را گسترش دهند تا راهی برای ارائه این اطلاعات فراهم شود. HWC2 یک API جدید را برای انتشار داده های استاتیک HDR در چارچوب و برنامه ارائه می دهد.

HDMI

  • یک نمایشگر HDMI متصل قابلیت HDR خود را از طریق HDMI EDID همانطور که در بخش 4.2 CTA-861.3 تعریف شده است، تبلیغ می کند.
  • نقشه برداری 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، این معمولاً یک رمزگشای پوششی در اطراف یک یا چند رمزگشای AVC و/یا HEVC و همچنین یک کامپوزیتور است. چنین رمزگشاها باید:

  • از نوع mime "video/dolby-vision" پشتیبانی کنید.
  • پروفایل ها/سطوح های پشتیبانی شده Dolby Vision را تبلیغ کنید.
  • واحدهای دسترسی را بپذیرید که شامل واحدهای دسترسی فرعی همه لایه‌ها هستند که توسط Dolby تعریف شده‌اند.
  • داده های کدک خاص تعریف شده توسط Dolby را بپذیرید. به عنوان مثال، داده‌های حاوی نمایه/سطح Dolby Vision و احتمالاً داده‌های مخصوص کدک برای رمزگشاهای داخلی.
  • پشتیبانی از سوئیچینگ تطبیقی ​​بین پروفایل ها/سطوح های Dolby Vision مطابق با نیاز Dolby.

هنگام پیکربندی رمزگشا، نمایه واقعی Dolby به کدک منتقل نمی شود. این کار فقط از طریق داده های کدک خاص پس از راه اندازی رمزگشا انجام می شود. یک پلتفرم می‌تواند از چندین رمزگشای Dolby Vision پشتیبانی کند: یکی برای پروفایل‌های AVC و دیگری برای پروفایل‌های HEVC تا بتوانند کدک‌های زیرین را در طول زمان پیکربندی مقداردهی اولیه کنند. اگر یک رمزگشای Dolby Vision از هر دو نوع پروفایل پشتیبانی می‌کند، باید از جابجایی بین آن‌ها به صورت پویا و به روش تطبیقی ​​نیز پشتیبانی کند.

اگر پلتفرمی علاوه بر پشتیبانی عمومی رمزگشای HDR، رمزگشای با قابلیت Dolby-Vision را نیز ارائه دهد، باید:

  • حتی اگر از پخش HDR پشتیبانی نمی کند، یک استخراج کننده آگاه Dolby-Vision ارائه دهید.
  • رمزگشایی تهیه کنید که از نمایه دید همانطور که توسط 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 با نوع «ویدئو/دالبی‌ویژن» برای جریان ترکیبی 2/3 لایه Dolby. فرمت واحد دسترسی مسیر HDR، که نحوه بسته بندی واحدهای دسترسی از لایه های پایه/افزایش/فراداده را در یک بافر واحد برای رمزگشایی در یک فریم HDR مشخص می کند، باید توسط Dolby تعریف شود.
    • اگر یک تراک ویدیویی Dolby Vision حاوی لایه پایه جداگانه (سازگار با عقب) (BL) باشد، استخراج کننده باید آن را به عنوان یک تراک جداگانه "video/avc" یا "video/hevc" نیز نمایش دهد. استخراج کننده باید واحدهای دسترسی معمولی AVC/HEVC را برای این مسیر فراهم کند.
    • آهنگ BL باید همان track-unique-ID ("Track-ID") را مانند آهنگ HDR داشته باشد تا برنامه بفهمد که اینها دو کدگذاری یک ویدیو هستند.
    • برنامه می تواند تصمیم بگیرد که کدام مسیر را بر اساس قابلیت پلتفرم انتخاب کند.
  • نمایه/سطح 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 با نوع «video/HEVC» استخراج می‌شود. این چارچوب یک رمزگشای ویدیویی HEVC را انتخاب می‌کند که از نمایه Main10HDR10 برای رمزگشایی آن مسیر پشتیبانی می‌کند.
  • رسیور HEVC
    اطلاعات HDR در SEI یا SPS است. رمزگشا HEVC ابتدا فریم هایی را دریافت می کند که حاوی اطلاعات HDR هستند. سپس رمزگشا اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک ویدیوی HDR است. اطلاعات HDR در قالب خروجی رمزگشا قرار می گیرد که بعداً به سطح پخش می شود.

اقدامات فروشنده

  1. نمایه رمزگشای HDR پشتیبانی شده و نوع سطح OMX را تبلیغ کنید. مثال:
    OMX_VIDEO_HEVCProfileMain10HDR10Main10 )
  2. اجرای پشتیبانی برای ایندکس: " OMX.google.android.index.describeHDRColorInfo "
  3. اجرای پشتیبانی برای ایندکس: " OMX.google.android.index.describeColorAspects "
  4. اجرای پشتیبانی برای تجزیه SEI از ابرداده های مسترینگ.

خط لوله رسیور Dolby Vision

شکل 2. خط لوله Dolby Vision

Dolby-bitstream ها در کانتینرهای MP4 همانطور که توسط Dolby تعریف شده است بسته بندی می شوند. در تئوری برنامه ها می توانند از یک استخراج کننده MP4 معمولی برای استخراج لایه پایه، لایه بهبود و لایه ابرداده به طور مستقل استفاده کنند. با این حال، این با مدل Android MediaExtractor/MediaCodec فعلی مطابقت ندارد.

  • Dolby Extractor:
    • دالبی بیت‌استریم‌ها توسط یک DolbyExtractor شناسایی می‌شوند که لایه‌های مختلف را به‌عنوان 1 تا 2 آهنگ برای هر تراک ویدیوی دالبی (گروه) در معرض دید قرار می‌دهد:
      • یک آهنگ HDR با نوع «ویدئو/دالبی‌ویژن» برای استریم دالبی ترکیبی ۲/۳ لایه. فرمت واحد دسترسی مسیر 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 الزامی است.

اقدامات دالبی

  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 Extractor:
  • رسیور VP9:
    • رسیور بیت‌استریم‌های Profile2 را دریافت می‌کند و آنها را به‌عنوان جریان‌های معمولی VP9 رمزگشایی می‌کند.
    • رمزگشا هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
    • رسیور ابرداده ایستا را از طریق واحدهای دسترسی بیت استریم برای جریان های VP9 PQ دریافت می کند.
    • رمزگشا VP9 باید بتواند متادیتای استاتیک/دینامیک HDR را به نمایشگر منتشر کند.

اقدامات فروشنده

  1. اجرای پشتیبانی برای index: OMX.google.android.index.describeHDRColorInfo
  2. اجرای پشتیبانی برای index: OMX.google.android.index.describeColorAspects
  3. فراداده استاتیک HDR را منتشر کنید
،

ویدیو با محدوده دینامیکی بالا (HDR) مرز بعدی در رمزگشایی ویدیوی با کیفیت بالا است که کیفیت بازتولید صحنه بی‌نظیر را به ارمغان می‌آورد. این کار را با افزایش قابل توجه محدوده دینامیکی مولفه روشنایی (از 100 cd/ m2 به 1000s cd/ m2 ) و با استفاده از فضای رنگی بسیار گسترده تر (BT 2020) انجام می دهد. اکنون این یک عنصر اصلی تکامل 4K UHD در فضای تلویزیون است.

اندروید 10 از ویدیوهای HDR زیر پشتیبانی می کند.

  • HDR10
  • VP9
  • HDR10+

با شروع Android 9 و بالاتر، MediaCodec فراداده HDR را بدون توجه به حالت تونل شده گزارش می کند. می توانید داده های رمزگشایی شده را همراه با متادیتای ایستا/دینامیک در حالت غیر تونل شده دریافت کنید. برای HDR10 و VP9Profile2 که از فراداده ایستا استفاده می کند، اینها در قالب خروجی با کلید KEY_HDR_STATIC_INFO گزارش می شوند. برای HDR10+ که از فراداده پویا استفاده می‌کند، با کلید KEY_HDR10_PLUS_INFO در قالب خروجی گزارش می‌شود و ممکن است برای هر فریم خروجی تغییر کند. برای اطلاعات بیشتر به تونل چند رسانه ای مراجعه کنید.

از اندروید 7.0، پشتیبانی اولیه HDR شامل ایجاد ثابت های مناسب برای کشف و راه اندازی خطوط لوله ویدیوی HDR است. این بدان معناست که انواع کدک ها و حالت های نمایش را تعریف کنید و مشخص کنید که چگونه داده های HDR باید به MediaCodec ارسال شوند و به رسیورهای HDR عرضه شوند.

هدف این سند کمک به توسعه دهندگان برنامه برای پشتیبانی از پخش جریان HDR و کمک به OEM ها و SOC ها برای فعال کردن ویژگی های HDR است.

فناوری های HDR پشتیبانی می شود

از اندروید 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 از طریق حالت تونل‌شده تعریف شده است ، اما دستگاه‌ها ممکن است با استفاده از بافرهای ویدیویی مات، از پخش HDR در SurfaceViews پشتیبانی کنند. به عبارت دیگر:

  • هیچ API استاندارد Android برای بررسی اینکه آیا پخش HDR با استفاده از رمزگشاهای غیر تونل شده پشتیبانی می شود وجود ندارد.
  • رسیورهای ویدئویی تونلی که قابلیت پخش HDR را تبلیغ می‌کنند، هنگام اتصال به نمایشگرهای دارای قابلیت HDR باید از پخش HDR پشتیبانی کنند.
  • ترکیب GL محتوای HDR توسط نسخه AOSP Android 7.0 پشتیبانی نمی‌شود.

کشف

پخش 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/m 2 برای این نمایشگر برمی‌گرداند.
  • float getDesiredMaxLuminance()
    داده های حداکثر روشنایی محتوای مورد نظر را به صورت cd/cd/m 2 برای این نمایشگر برمی گرداند.
  • float getDesiredMinLuminance()
    داده های حداقل روشنایی محتوای مورد نظر را به صورت cd/cd/m 2 برای این نمایشگر برمی گرداند.
  • int[] getSupportedHdrTypes()
    انواع HDR پشتیبانی شده این نمایشگر را دریافت می کند (به ثابت ها مراجعه کنید). اگر HDR توسط نمایشگر پشتیبانی نشود، آرایه خالی را برمی‌گرداند.

رمزگشا

برنامه ها باید از CodecCapabilities.profileLevels API موجود برای تأیید پشتیبانی از پروفایل های جدید HDR استفاده کنند:

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 و ابرداده‌ها باید توسط برنامه‌های ویدیویی در یک بافر در هر فریم به هم متصل شوند. این کار به طور خودکار توسط MediaExtractor دارای قابلیت Dolby-Vision انجام می شود.

HEVC HDR 10

ثابت های نمایه 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-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
کانتینر (استخراج کننده) MP4 MP4 WebM WebM
رمزگشا MIMETYPE_VIDEO_DOLBY_VISION MIMETYPE_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
نمایه (رمزگشا) یکی از پروفایل های دالبی HEVCProfileMain10HDR10 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 برای یک دستگاه انجام دهند.

تغییرات پلتفرم در اندروید 7.0 برای HDR

در اینجا برخی از تغییرات کلیدی در پلتفرم (برنامه/لایه بومی) وجود دارد که OEMها و SOCها باید از آن آگاه باشند.

نمایش

ترکیب سخت افزاری

پلتفرم‌های دارای HDR باید از ترکیب محتوای HDR با محتوای غیر HDR پشتیبانی کنند. ویژگی‌ها و عملیات ترکیب دقیق توسط اندروید تا نسخه 7.0 تعریف نشده است، اما فرآیند به طور کلی این مراحل را دنبال می‌کند:

  1. یک فضای رنگ/حجم خطی را تعیین کنید که شامل تمام لایه‌هایی است که باید ترکیب شوند، بر اساس رنگ لایه‌ها، مسترینگ و ابرداده پویا بالقوه.
    اگر مستقیماً با نمایشگر ترکیب می شود، این می تواند فضای خطی باشد که با حجم رنگ نمایشگر مطابقت دارد.
  2. همه لایه ها را به فضای رنگی مشترک تبدیل کنید.
  3. ترکیب را انجام دهید.
  4. در صورت نمایش از طریق HDMI:
    1. رنگ، مسترینگ و متادیتای پویا بالقوه را برای صحنه ترکیبی تعیین کنید.
    2. صحنه ترکیبی حاصل را به فضای رنگی/حجم مشتق شده تبدیل کنید.
  5. اگر مستقیماً روی نمایشگر نمایش داده می شود، صحنه ترکیبی حاصل را به سیگنال های نمایشی مورد نیاز برای تولید آن صحنه تبدیل کنید.

نمایش کشف

کشف صفحه نمایش HDR فقط از طریق HWC2 پشتیبانی می شود. پیاده‌کننده‌های دستگاه باید به‌طور انتخابی آداپتور HWC2 را که با Android 7.0 منتشر شده است، فعال کنند تا این ویژگی کار کند. بنابراین، پلتفرم‌ها باید پشتیبانی از HWC2 را اضافه کنند یا چارچوب AOSP را گسترش دهند تا راهی برای ارائه این اطلاعات فراهم شود. HWC2 یک API جدید را برای انتشار داده های استاتیک HDR در چارچوب و برنامه ارائه می دهد.

HDMI

  • یک نمایشگر HDMI متصل قابلیت HDR خود را از طریق HDMI EDID همانطور که در بخش 4.2 CTA-861.3 تعریف شده است، تبلیغ می کند.
  • نقشه برداری 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، این معمولاً یک رمزگشای پوششی در اطراف یک یا چند رمزگشای AVC و/یا HEVC و همچنین یک کامپوزیتور است. چنین رمزگشاها باید:

  • از نوع mime "video/dolby-vision" پشتیبانی کنید.
  • پروفایل ها/سطوح های پشتیبانی شده Dolby Vision را تبلیغ کنید.
  • واحدهای دسترسی را بپذیرید که شامل واحدهای دسترسی فرعی همه لایه‌ها هستند که توسط Dolby تعریف شده‌اند.
  • داده های کدک خاص تعریف شده توسط Dolby را بپذیرید. به عنوان مثال، داده‌های حاوی نمایه/سطح Dolby Vision و احتمالاً داده‌های مخصوص کدک برای رمزگشاهای داخلی.
  • پشتیبانی از سوئیچینگ تطبیقی ​​بین پروفایل ها/سطوح های Dolby Vision مطابق با نیاز Dolby.

هنگام پیکربندی رمزگشا، نمایه واقعی Dolby به کدک منتقل نمی شود. این کار فقط از طریق داده های کدک خاص پس از راه اندازی رمزگشا انجام می شود. یک پلتفرم می‌تواند از چندین رمزگشای Dolby Vision پشتیبانی کند: یکی برای پروفایل‌های AVC و دیگری برای پروفایل‌های HEVC تا بتوانند کدک‌های زیرین را در طول زمان پیکربندی مقداردهی اولیه کنند. اگر یک رمزگشای Dolby Vision از هر دو نوع پروفایل پشتیبانی می‌کند، باید از جابجایی بین آن‌ها به صورت پویا و به روش تطبیقی ​​نیز پشتیبانی کند.

اگر پلتفرمی علاوه بر پشتیبانی عمومی رمزگشای HDR، رمزگشای با قابلیت Dolby-Vision را نیز ارائه دهد، باید:

  • حتی اگر از پخش HDR پشتیبانی نمی کند، یک استخراج کننده آگاه Dolby-Vision ارائه دهید.
  • رمزگشایی تهیه کنید که از نمایه دید همانطور که توسط 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 با نوع «ویدئو/دالبی‌ویژن» برای جریان ترکیبی 2/3 لایه Dolby. فرمت واحد دسترسی مسیر HDR، که نحوه بسته بندی واحدهای دسترسی از لایه های پایه/افزایش/فراداده را در یک بافر واحد برای رمزگشایی در یک فریم HDR مشخص می کند، باید توسط Dolby تعریف شود.
    • اگر یک تراک ویدیویی Dolby Vision حاوی لایه پایه جداگانه (سازگار با عقب) (BL) باشد، استخراج کننده باید آن را به عنوان یک تراک جداگانه "video/avc" یا "video/hevc" نیز نمایش دهد. استخراج کننده باید واحدهای دسترسی معمولی AVC/HEVC را برای این مسیر فراهم کند.
    • آهنگ BL باید همان track-unique-ID ("Track-ID") را مانند آهنگ HDR داشته باشد تا برنامه بفهمد که اینها دو کدگذاری یک ویدیو هستند.
    • برنامه می تواند تصمیم بگیرد که کدام مسیر را بر اساس قابلیت پلتفرم انتخاب کند.
  • نمایه/سطح 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 با نوع «video/HEVC» استخراج می‌شود. این چارچوب یک رمزگشای ویدیویی HEVC را انتخاب می‌کند که از نمایه Main10HDR10 برای رمزگشایی آن مسیر پشتیبانی می‌کند.
  • رسیور HEVC
    اطلاعات HDR در SEI یا SPS است. رمزگشا HEVC ابتدا فریم هایی را دریافت می کند که حاوی اطلاعات HDR هستند. سپس رمزگشا اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک ویدیوی HDR است. اطلاعات HDR در قالب خروجی رمزگشا قرار می گیرد که بعداً به سطح پخش می شود.

اقدامات فروشنده

  1. تبلیغات پشتیبانی شده HDR Decoder و سطح OMX را تبلیغ کنید. مثال:
    OMX_VIDEO_HEVCProfileMain10HDR10Main10 )
  2. پشتیبانی از فهرست: ' OMX.google.android.index.describeHDRColorInfo '
  3. پشتیبانی از فهرست: ' OMX.google.android.index.describeColorAspects '
  4. پشتیبانی از Sei Parsing of Mastering ابرداده را اجرا کنید.

خط لوله رمزگشایی Dolby Vision

شکل 2. خط لوله Vision Dolby

Dolby-Bitstreams مطابق با Dolby در ظروف MP4 بسته بندی شده است. از نظر تئوری ، برنامه های کاربردی می توانند از یک استخراج کننده معمولی MP4 برای استخراج لایه پایه ، لایه تقویت و لایه ابرداده به طور مستقل استفاده کنند. با این حال ، این متناسب با مدل فعلی Android MediaExtractor/MediaCodec نیست.

  • dolbyextractor:
    • Dolby-Bitstreams توسط یک Dolbyextractor شناخته می شود ، که لایه های مختلف را به عنوان 1 تا 2 آهنگ برای هر آهنگ ویدیویی Dolby (گروه) در معرض دید قرار می دهد:
      • یک آهنگ HDR با نوع "فیلم/دالبی-دید" برای جریان 2/3 لایه Dolby Stream. فرمت دسترسی HDR Track ، که نحوه بسته بندی واحدهای دسترسی از لایه های پایه/تقویت/ابرداده را به یک بافر منفرد تعریف می کند تا در یک قاب HDR منفرد رمزگذاری شود ، توسط Dolby تعریف می شود.
      • (اختیاری ، فقط اگر BL سازگار با عقب باشد) یک آهنگ BL فقط شامل لایه پایه است که باید توسط رمزگذار معمولی MediaCodec قابل رمزگشایی باشد ، به عنوان مثال ، رمزگذار AVC/HEVC. استخراج کننده باید واحدهای دسترسی منظم AVC/HEVC را برای این آهنگ فراهم کند. این آهنگ BL باید همان آهنگ-ID ("Track-ID") را داشته باشد ، بنابراین برنامه می فهمد که این دو رمزگذاری از همان فیلم هستند.
    • برنامه می تواند تصمیم بگیرد که کدام آهنگ را بر اساس قابلیت پلتفرم انتخاب کنید.
    • از آنجا که یک آهنگ HDR از نوع HDR خاصی برخوردار است ، این چارچوب یک رمزگذار ویدیویی Dolby را برای رمزگشایی آن آهنگ انتخاب می کند. آهنگ BL توسط یک رمزگذار ویدیویی معمولی AVC/HEVC رمزگشایی می شود.
  • dolbydecoder:
    • Dolbydecoder واحدهای دسترسی را دریافت می کند که شامل واحدهای دسترسی لازم برای همه لایه ها (EL+BL+MD یا BL+MD) است
    • اطلاعات CSD (داده های خاص کد ، مانند SPS+PPS+VPS) برای لایه های جداگانه می تواند در قاب 1 CSD بسته بندی شود که توسط Dolby تعریف شود. داشتن یک قاب CSD واحد مورد نیاز است.

اقدامات دالبی

  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

Bitstreams VP9 در ظروف WebM به روشی که توسط تیم WebM تعریف شده است ، بسته بندی می شوند. برنامه های کاربردی برای استخراج ابرداده HDR از bitstream قبل از ارسال فریم به رمزگذار باید از استخراج کننده وب استفاده کنند.

  • استخراج کننده وب:
    • استخراج کننده WebM ابرداده HDR و فریم ها را از ظرف استخراج می کند.
  • رمزگذار VP9:
    • Decoder Bitstreams Profile2 را دریافت می کند و آنها را به عنوان جریان های VP9 معمولی رمزگشایی می کند.
    • Decoder هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
    • Decoder ابرداده استاتیک را از طریق واحدهای دسترسی Bitstream برای جریان های VP9 PQ دریافت می کند.
    • رمزگذار VP9 باید بتواند ابرداده استاتیک/پویا HDR را به صفحه نمایش پخش کند.

اقدامات فروشنده

  1. پشتیبانی از فهرست: OMX.google.android.index.describeHDRColorInfo
  2. پشتیبانی از فهرست را پیاده سازی کنید: OMX.google.android.index.describeColorAspects
  3. ابرداده استاتیک HDR را پخش کنید
،

فیلم High Dynamic Range (HDR) مرز بعدی در رمزگشایی ویدیویی با کیفیت بالا است و ویژگی های تولید مثل صحنه ای بی نظیر را به همراه دارد. این کار با افزایش قابل توجهی دامنه پویا از مؤلفه درخشش (از 100 CD/M 2 تا 1000s CD/M 2 ) و با استفاده از یک فضای رنگی بسیار گسترده تر (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 زیر پشتیبانی می شوند.

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
کدک AVC/HEVC HEVC VP9 VP9
تابع انتقال ST-2084 ST-2084 HLG ST-2084
نوع ابرداده HDR پویا استاتیک هیچ کدام استاتیک

در Android 7.0 ، فقط پخش HDR از طریق حالت تونل تعریف شده است ، اما دستگاه ها ممکن است پشتیبانی از پخش HDR را در سطح سطح با استفاده از بافرهای ویدیویی مات اضافه کنند. به عبارت دیگر:

  • هیچ API استاندارد Android برای بررسی اینکه آیا پخش HDR با استفاده از رمزگشایی های غیر تونلی پشتیبانی می شود ، وجود ندارد.
  • رمزگشایی های ویدیویی تونل دار که قابلیت پخش HDR را تبلیغ می کنند ، باید هنگام اتصال به نمایشگرهای دارای قابلیت HDR ، از پخش HDR پشتیبانی کنند.
  • ترکیب GL از محتوای HDR توسط نسخه AOSP Android 7.0 پشتیبانی نمی شود.

کشف

پخش 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
    پشتیبانی از گاما گاما ترکیبی.
  • 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 موجود استفاده کنند. ProfileLevels API برای تأیید پشتیبانی از پروفایل های جدید HDR:

دالبی

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 و ابرداده باید توسط برنامه های ویدیویی در یک بافر واحد در هر فریم جمع شوند. این کار به طور خودکار توسط Dolby-Vise MediaExtractor انجام می شود.

HEVC HDR 10

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 پشتیبانی می شود:

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
ظرف MP4 MP4 WebM WebM

کشف اینکه آیا یک آهنگ (یک پرونده) به پشتیبانی HDR نیاز دارد توسط این سیستم عامل پشتیبانی نمی شود. برنامه ها ممکن است داده های خاص کدک را تجزیه کنند تا مشخص شود آیا یک آهنگ به مشخصات HDR خاص نیاز دارد یا خیر.

خلاصه

الزامات مؤلفه برای هر فناوری HDR در جدول زیر نشان داده شده است:

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
نوع HDR پشتیبانی شده (نمایش) 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

یادداشت ها:

  • Bitstreams Dolby-Vision در یک ظرف MP4 به روشی که توسط 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 در چارچوب و برنامه قرار می دهد.

HDMI

  • یک صفحه نمایش HDMI متصل ، قابلیت HDR خود را از طریق HDMI EDID همانطور که در بخش CTA-861.3 تعریف شده است ، تبلیغ می کند.
  • از نقشه برداری EOTF زیر استفاده می شود:
    • ET_0 گاما سنتی - دامنه درخشندگی SDR: به هیچ نوع HDR نقشه برداری نشده است
    • ET_1 گاما سنتی - محدوده درخشندگی HDR: به هیچ نوع HDR نقشه برداری نشده است
    • ET_2 SMPTE ST 2084 - نقشه برداری به نوع HDR HDR10
  • سیگنالینگ Dolby Vision یا پشتیبانی HLG از HDMI همانطور که توسط بدنهای مربوطه آنها تعریف شده است انجام می شود.
  • توجه داشته باشید که API HWC2 از مقادیر درخشندگی مورد نظر Float استفاده می کند ، بنابراین مقادیر EDID 8 بیتی باید به روشی مناسب ترجمه شود.

رمزگشاها

سیستم عامل ها باید رمزگشایی های تونل دار با قابلیت HDR را اضافه کرده و پشتیبانی HDR خود را تبلیغ کنند. به طور کلی ، رمزگشاهای قابل کنترل HDR باید:

  • رمزگشایی تونل شده پشتیبانی ( FEATURE_TunneledPlayback ).
  • پشتیبانی از ابرداده استاتیک HDR ( OMX.google.android.index.describeHDRColorInfo ) و انتشار آن به ترکیب نمایش/سخت افزار. برای HLG ، ابرداده مناسب باید به صفحه نمایش ارسال شود.
  • توضیحات رنگ پشتیبانی ( OMX.google.android.index.describeColorAspects ) و انتشار آن به ترکیب نمایش/سخت افزار.
  • پشتیبانی از ابرداده تعبیه شده HDR مطابق استاندارد مربوطه.

پشتیبانی Dolby Vision Decoder

برای حمایت از Dolby Vision ، سیستم عامل ها باید یک رمزگذار HDR OMX با قابلیت Dolby-Vise را اضافه کنند. با توجه به مشخصات Dolby Vision ، این معمولاً یک رمزگذار بسته بندی در اطراف یک یا چند رمزگذار AVC و/یا HEVC و همچنین یک آهنگساز است. چنین رمزگشایی ها باید:

  • پشتیبانی از نوع MIME "Video/Dolby-Vision."
  • تبلیغات پشتیبانی شده از پروفایل/سطح Dolby Vision.
  • واحدهای دسترسی را که حاوی واحدهای زیر دسترسی همه لایه ها است که توسط Dolby تعریف شده است ، بپذیرید.
  • داده های خاص کدک را که توسط Dolby تعریف شده است بپذیرید. به عنوان مثال ، داده های حاوی مشخصات/سطح Dolby Vision و احتمالاً داده های خاص کدک برای رمزگشاهای داخلی.
  • پشتیبانی از تعویض تطبیقی ​​بین پروفایل/سطح Dolby Vision همانطور که توسط Dolby لازم است.

هنگام پیکربندی رمزگشایی ، مشخصات واقعی Dolby به کدک ابلاغ نمی شود. این کار فقط از طریق داده های خاص کدک پس از شروع رمزگشایی انجام می شود. یک پلتفرم می تواند از چندین رمزگشایی Dolby Vision پشتیبانی کند: یکی برای پروفایل های AVC ، و دیگری برای پروفایل های HEVC قادر به تنظیم اولیه کدک های زیرین در زمان پیکربندی است. اگر یک رمزگذار Dolby Vision از هر دو نوع پروفایل پشتیبانی کند ، باید از تغییر بین آن دسته از افراد به صورت پویا به روشی تطبیقی ​​نیز پشتیبانی کند.

اگر یک سکوی علاوه بر پشتیبانی از رمزگشایی عمومی HDR ، یک رمزگذار توانمند Dolby-Vise را نیز فراهم کند ، باید:

  • یک استخراج کننده آگاه Dolby-Vision تهیه کنید ، حتی اگر از پخش HDR پشتیبانی نکند.
  • یک رمزگشایی ارائه دهید که از مشخصات بینایی پشتیبانی می کند همانطور که توسط Dolby تعریف شده است.

پشتیبانی از رمزگشایی HDR10

برای پشتیبانی از HDR10 ، سیستم عامل ها باید یک رمزگذار OMX با قابلیت HDR10 اضافه کنند. این معمولاً یک رمزگذار HEVC تونلی است که از تجزیه و استفاده از ابرداده مربوط به HDMI نیز پشتیبانی می کند. چنین رمزگشایی (علاوه بر پشتیبانی از رمزگشایی عمومی HDR) باید:

  • پشتیبانی از نوع MIME "VIDEO/HEVC".
  • تبلیغات پشتیبانی شده HEVCMAIN10HDR10. پشتیبانی از پروفایل HEVCMAIN10HRD10 همچنین نیاز به پشتیبانی از پروفایل HEVCMAIN10 دارد ، که نیاز به پشتیبانی از مشخصات HevCmain در همان سطوح دارد.
  • پشتیبانی از تجزیه بلوک های Mastering Mastering 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 Extractor (به نام Dolby Extractor) را برای محتوای ویدیویی Dolby اضافه کنند.

  • یک استخراج کننده معمولی MP4 فقط می تواند لایه پایه را از یک پرونده استخراج کند ، اما نه تقویت یا لایه های ابرداده. بنابراین برای استخراج داده ها از پرونده به یک استخراج کننده خاص Dolby نیاز است.
  • استخراج کننده Dolby باید برای هر آهنگ ویدیویی Dolby (گروه) 1 تا 2 آهنگ را در معرض دید خود قرار دهد:
    • یک آهنگ Dolby Vision HDR با نوع "فیلم/دالبی-دید" برای جریان 2/3 لایه Dolby Stream. فرمت دسترسی HDR Track ، که نحوه بسته بندی واحدهای دسترسی از لایه های پایه/تقویت/ابرداده را به یک بافر منفرد تعریف می کند تا در یک قاب HDR منفرد رمزگذاری شود ، توسط Dolby تعریف می شود.
    • اگر یک آهنگ ویدیویی Dolby Vision شامل یک لایه پایه جداگانه (سازگار با عقب) (BL) باشد ، استخراج کننده نیز باید این موضوع را به عنوان یک آهنگ جداگانه "فیلم/AVC" یا "فیلم/HEVC" جداگانه در معرض دید خود قرار دهد. استخراج کننده باید واحدهای دسترسی منظم AVC/HEVC را برای این آهنگ فراهم کند.
    • آهنگ BL باید همان آهنگ-ID-ID ("Track-ID") را به عنوان آهنگ HDR داشته باشد ، بنابراین برنامه می فهمد که این دو رمزگذاری از یک فیلم مشابه هستند.
    • برنامه می تواند تصمیم بگیرد که کدام آهنگ را بر اساس قابلیت پلتفرم انتخاب کنید.
  • مشخصات/سطح Dolby Vision باید در قالب آهنگ مسیر HDR در معرض دید قرار گیرد.
  • اگر یک سکوی یک رمزگذار توانمند Dolby-Vision را فراهم کند ، باید یک استخراج کننده آگاه Dolby-Vision نیز فراهم کند ، حتی اگر از پخش HDR پشتیبانی نکند.

پشتیبانی از استخراج HDR10 و VP9 HDR

برای پشتیبانی از HDR10 یا VP9 HLG ، هیچ الزامات اضافی استخراج کننده وجود ندارد. سیستم عامل ها باید استخراج MP4 را برای پشتیبانی از VP9 PQ در MP4 گسترش دهند. ابرداده استاتیک HDR باید در Bitstream VP9 PQ پخش شود ، به گونه ای که این ابرداده به رمزگذار VP9 PQ و از طریق خط لوله MediaCodec به نمایشگر VP9 PQ منتقل می شود.

برنامه های افزودنی Stagefright برای پشتیبانی Dolby Vision

سیستم عامل ها باید پشتیبانی فرمت Dolby Vision را به StageFright اضافه کنند:

  • پشتیبانی از پرس و جو تعریف بندر برای درگاه فشرده.
  • پشتیبانی از پروفایل/شمارش سطح برای رمزگشایی DV.
  • پشتیبانی از قرار گرفتن در معرض مشخصات/سطح DV برای آهنگ های DV HDR.

جزئیات اجرای خاص فناوری

خط لوله رمزگشایی HDR10

شکل 1. خط لوله HDR10

Bitstreams HDR10 در ظروف MP4 بسته بندی شده است. برنامه ها از یک استخراج کننده معمولی MP4 برای استخراج داده های فریم و ارسال آن به رمزگذار استفاده می کنند.

  • استخراج کننده MPEG4
    Bitstreams HDR10 فقط به عنوان یک جریان HEVC معمولی توسط یک MPEG4Extractor شناخته می شود و آهنگ HDR با نوع "فیلم/HEVC" استخراج می شود. این چارچوب یک رمزگشگر ویدیویی HEVC را انتخاب می کند که از مشخصات Main10HDR10 پشتیبانی می کند تا آن آهنگ را رمزگشایی کند.
  • رمزگشایی HEVC
    اطلاعات HDR در SEI یا SPS است. رمزگذار HEVC ابتدا قاب هایی را دریافت می کند که حاوی اطلاعات HDR است. سپس رمزگذار اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک فیلم HDR است. اطلاعات HDR در قالب خروجی رمزگشایی ، که بعداً به سطح پخش می شود ، بسته بندی می شود.

اقدامات فروشنده

  1. تبلیغات پشتیبانی شده HDR Decoder و سطح OMX را تبلیغ کنید. مثال:
    OMX_VIDEO_HEVCProfileMain10HDR10Main10 )
  2. پشتیبانی از فهرست: ' OMX.google.android.index.describeHDRColorInfo '
  3. پشتیبانی از فهرست: ' OMX.google.android.index.describeColorAspects '
  4. پشتیبانی از Sei Parsing of Mastering ابرداده را اجرا کنید.

خط لوله رمزگشایی Dolby Vision

شکل 2. خط لوله Vision Dolby

Dolby-Bitstreams مطابق با Dolby در ظروف MP4 بسته بندی شده است. از نظر تئوری ، برنامه های کاربردی می توانند از یک استخراج کننده معمولی MP4 برای استخراج لایه پایه ، لایه تقویت و لایه ابرداده به طور مستقل استفاده کنند. با این حال ، این متناسب با مدل فعلی Android MediaExtractor/MediaCodec نیست.

  • dolbyextractor:
    • Dolby-Bitstreams توسط یک Dolbyextractor شناخته می شود ، که لایه های مختلف را به عنوان 1 تا 2 آهنگ برای هر آهنگ ویدیویی Dolby (گروه) در معرض دید قرار می دهد:
      • یک آهنگ HDR با نوع "فیلم/دالبی-دید" برای جریان 2/3 لایه Dolby Stream. فرمت دسترسی HDR Track ، که نحوه بسته بندی واحدهای دسترسی از لایه های پایه/تقویت/ابرداده را به یک بافر منفرد تعریف می کند تا در یک قاب HDR منفرد رمزگذاری شود ، توسط Dolby تعریف می شود.
      • (اختیاری ، فقط اگر BL سازگار با عقب باشد) یک آهنگ BL فقط شامل لایه پایه است که باید توسط رمزگذار معمولی MediaCodec قابل رمزگشایی باشد ، به عنوان مثال ، رمزگذار AVC/HEVC. استخراج کننده باید واحدهای دسترسی منظم AVC/HEVC را برای این آهنگ فراهم کند. این آهنگ BL باید همان آهنگ-ID ("Track-ID") را داشته باشد ، بنابراین برنامه می فهمد که این دو رمزگذاری از همان فیلم هستند.
    • برنامه می تواند تصمیم بگیرد که کدام آهنگ را بر اساس قابلیت پلتفرم انتخاب کنید.
    • از آنجا که یک آهنگ HDR از نوع HDR خاصی برخوردار است ، این چارچوب یک رمزگذار ویدیویی Dolby را برای رمزگشایی آن آهنگ انتخاب می کند. آهنگ BL توسط یک رمزگذار ویدیویی معمولی AVC/HEVC رمزگشایی می شود.
  • dolbydecoder:
    • Dolbydecoder واحدهای دسترسی را دریافت می کند که شامل واحدهای دسترسی لازم برای همه لایه ها (EL+BL+MD یا BL+MD) است
    • اطلاعات CSD (داده های خاص کد ، مانند SPS+PPS+VPS) برای لایه های جداگانه می تواند در قاب 1 CSD بسته بندی شود که توسط Dolby تعریف شود. داشتن یک قاب CSD واحد مورد نیاز است.

اقدامات دالبی

  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

Bitstreams VP9 در ظروف WebM به روشی که توسط تیم WebM تعریف شده است ، بسته بندی می شوند. برنامه های کاربردی برای استخراج ابرداده HDR از bitstream قبل از ارسال فریم به رمزگذار باید از استخراج کننده وب استفاده کنند.

  • استخراج کننده وب:
    • استخراج کننده WebM ابرداده HDR و فریم ها را از ظرف استخراج می کند.
  • رمزگذار VP9:
    • Decoder Bitstreams Profile2 را دریافت می کند و آنها را به عنوان جریان های VP9 معمولی رمزگشایی می کند.
    • Decoder هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
    • Decoder ابرداده استاتیک را از طریق واحدهای دسترسی Bitstream برای جریان های VP9 PQ دریافت می کند.
    • رمزگذار VP9 باید بتواند ابرداده استاتیک/پویا HDR را به صفحه نمایش پخش کند.

اقدامات فروشنده

  1. پشتیبانی از فهرست: OMX.google.android.index.describeHDRColorInfo
  2. پشتیبانی از فهرست را پیاده سازی کنید: OMX.google.android.index.describeColorAspects
  3. ابرداده استاتیک HDR را پخش کنید
،

فیلم High Dynamic Range (HDR) مرز بعدی در رمزگشایی ویدیویی با کیفیت بالا است و ویژگی های تولید مثل صحنه ای بی نظیر را به همراه دارد. این کار با افزایش قابل توجهی دامنه پویا از مؤلفه درخشش (از 100 CD/M 2 تا 1000s CD/M 2 ) و با استفاده از یک فضای رنگی بسیار گسترده تر (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 زیر پشتیبانی می شوند.

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
کدک AVC/HEVC HEVC VP9 VP9
تابع انتقال ST-2084 ST-2084 HLG ST-2084
نوع ابرداده HDR پویا استاتیک هیچ کدام استاتیک

در Android 7.0 ، فقط پخش HDR از طریق حالت تونل تعریف شده است ، اما دستگاه ها ممکن است پشتیبانی از پخش HDR را در سطح سطح با استفاده از بافرهای ویدیویی مات اضافه کنند. به عبارت دیگر:

  • هیچ API استاندارد Android برای بررسی اینکه آیا پخش HDR با استفاده از رمزگشایی های غیر تونلی پشتیبانی می شود ، وجود ندارد.
  • رمزگشایی های ویدیویی تونل دار که قابلیت پخش HDR را تبلیغ می کنند ، باید هنگام اتصال به نمایشگرهای دارای قابلیت HDR ، از پخش HDR پشتیبانی کنند.
  • ترکیب GL از محتوای HDR توسط نسخه AOSP Android 7.0 پشتیبانی نمی شود.

کشف

پخش 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
    پشتیبانی از گاما گاما ترکیبی.
  • 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 موجود استفاده کنند. ProfileLevels API برای تأیید پشتیبانی از پروفایل های جدید HDR:

دالبی

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 و ابرداده باید توسط برنامه های ویدیویی در یک بافر واحد در هر فریم جمع شوند. این کار به طور خودکار توسط Dolby-Vise MediaExtractor انجام می شود.

HEVC HDR 10

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 پشتیبانی می شود:

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
ظرف MP4 MP4 WebM WebM

کشف اینکه آیا یک آهنگ (یک پرونده) به پشتیبانی HDR نیاز دارد توسط این سیستم عامل پشتیبانی نمی شود. برنامه ها ممکن است داده های خاص کدک را تجزیه کنند تا مشخص شود آیا یک آهنگ به مشخصات HDR خاص نیاز دارد یا خیر.

خلاصه

الزامات مؤلفه برای هر فناوری HDR در جدول زیر نشان داده شده است:

تکنولوژی دالبی HDR10 vp9-hlg VP9-PQ
نوع HDR پشتیبانی شده (نمایش) 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

یادداشت ها:

  • Bitstreams Dolby-Vision در یک ظرف MP4 به روشی که توسط 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 در چارچوب و برنامه قرار می دهد.

HDMI

  • یک صفحه نمایش HDMI متصل ، قابلیت HDR خود را از طریق HDMI EDID همانطور که در بخش CTA-861.3 تعریف شده است ، تبلیغ می کند.
  • از نقشه برداری EOTF زیر استفاده می شود:
    • ET_0 گاما سنتی - دامنه درخشندگی SDR: به هیچ نوع HDR نقشه برداری نشده است
    • ET_1 گاما سنتی - محدوده درخشندگی HDR: به هیچ نوع HDR نقشه برداری نشده است
    • ET_2 SMPTE ST 2084 - نقشه برداری به نوع HDR HDR10
  • سیگنالینگ Dolby Vision یا پشتیبانی HLG از HDMI همانطور که توسط بدنهای مربوطه آنها تعریف شده است انجام می شود.
  • توجه داشته باشید که API HWC2 از مقادیر درخشندگی مورد نظر Float استفاده می کند ، بنابراین مقادیر EDID 8 بیتی باید به روشی مناسب ترجمه شود.

رمزگشاها

سیستم عامل ها باید رمزگشایی های تونل دار با قابلیت HDR را اضافه کرده و پشتیبانی HDR خود را تبلیغ کنند. به طور کلی ، رمزگشاهای قابل کنترل HDR باید:

  • رمزگشایی تونل شده پشتیبانی ( FEATURE_TunneledPlayback ).
  • پشتیبانی از ابرداده استاتیک HDR ( OMX.google.android.index.describeHDRColorInfo ) و انتشار آن به ترکیب نمایش/سخت افزار. برای HLG ، ابرداده مناسب باید به صفحه نمایش ارسال شود.
  • توضیحات رنگ پشتیبانی ( OMX.google.android.index.describeColorAspects ) و انتشار آن به ترکیب نمایش/سخت افزار.
  • پشتیبانی از ابرداده تعبیه شده HDR مطابق استاندارد مربوطه.

پشتیبانی Dolby Vision Decoder

برای حمایت از Dolby Vision ، سیستم عامل ها باید یک رمزگذار HDR OMX با قابلیت Dolby-Vise را اضافه کنند. با توجه به مشخصات Dolby Vision ، این معمولاً یک رمزگذار بسته بندی در اطراف یک یا چند رمزگذار AVC و/یا HEVC و همچنین یک آهنگساز است. چنین رمزگشایی ها باید:

  • پشتیبانی از نوع MIME "Video/Dolby-Vision."
  • تبلیغات پشتیبانی شده از پروفایل/سطح Dolby Vision.
  • واحدهای دسترسی را که حاوی واحدهای زیر دسترسی همه لایه ها است که توسط Dolby تعریف شده است ، بپذیرید.
  • داده های خاص کدک را که توسط Dolby تعریف شده است بپذیرید. به عنوان مثال ، داده های حاوی مشخصات/سطح Dolby Vision و احتمالاً داده های خاص کدک برای رمزگشاهای داخلی.
  • پشتیبانی از تعویض تطبیقی ​​بین پروفایل/سطح Dolby Vision همانطور که توسط Dolby لازم است.

هنگام پیکربندی رمزگشایی ، مشخصات واقعی Dolby به کدک ابلاغ نمی شود. این کار فقط از طریق داده های خاص کدک پس از شروع رمزگشایی انجام می شود. یک پلتفرم می تواند از چندین رمزگشایی Dolby Vision پشتیبانی کند: یکی برای پروفایل های AVC ، و دیگری برای پروفایل های HEVC قادر به تنظیم اولیه کدک های زیرین در زمان پیکربندی است. اگر یک رمزگذار Dolby Vision از هر دو نوع پروفایل پشتیبانی کند ، باید از تغییر بین آن دسته از افراد به صورت پویا به روشی تطبیقی ​​نیز پشتیبانی کند.

اگر یک سکوی علاوه بر پشتیبانی از رمزگشایی عمومی HDR ، یک رمزگذار توانمند Dolby-Vise را نیز فراهم کند ، باید:

  • یک استخراج کننده آگاه Dolby-Vision تهیه کنید ، حتی اگر از پخش HDR پشتیبانی نکند.
  • یک رمزگشایی ارائه دهید که از مشخصات بینایی پشتیبانی می کند همانطور که توسط Dolby تعریف شده است.

پشتیبانی از رمزگشایی HDR10

برای پشتیبانی از HDR10 ، سیستم عامل ها باید یک رمزگذار OMX با قابلیت HDR10 اضافه کنند. This is normally a tunneled HEVC decoder that also supports parsing and handling HDMI related metadata. Such a decoder (in addition to the general HDR decoder support) must:

  • Support mime type "video/hevc."
  • Advertise supported HEVCMain10HDR10. HEVCMain10HRD10 profile support also requires supporting the HEVCMain10 profile, which requires supporting the HEVCMain profile at the same levels.
  • Support parsing the mastering metadata SEI blocks, as well as other HDR related info contained in SPS.

VP9 decoder support

To support VP9 HDR, platforms must add a VP9 Profile2-capable HDR OMX decoder. This is normally a tunneled VP9 decoder that also supports handling HDMI related metadata. Such decoders (in addition to the general HDR decoder support) must:

  • Support mime type "video/x-vnd.on2.vp9."
  • Advertise supported VP9Profile2HDR. VP9Profile2HDR profile support also requires supporting VP9Profile2 profile at the same level.

استخراج کننده ها

Dolby Vision extractor support

Platforms that support Dolby Vision decoders must add Dolby extractor (called Dolby Extractor) support for Dolby Video content.

  • A regular MP4 extractor can only extract the base layer from a file, but not the enhancement or metadata layers. So a special Dolby extractor is needed to extract the data from the file.
  • The Dolby extractor must expose 1 to 2 tracks for each Dolby video track (group):
    • A Dolby Vision HDR track with the type of "video/dolby-vision" for the combined 2/3-layers Dolby stream. The HDR track's access-unit format, which defines how to package the access units from the base/enhancement/metadata layers into a single buffer to be decoded into a single HDR frame, is to be defined by Dolby.
    • If a Dolby Vision video track contains a separate (backward compatible) base-layer (BL), the extractor must also expose this as a separate "video/avc" or "video/hevc" track. The extractor must provide regular AVC/HEVC access units for this track.
    • The BL track must have the same track-unique-ID ("track-ID") as the HDR track so the app understands that these are two encodings of the same video.
    • The application can decide which track to choose based on the platform's capability.
  • The Dolby Vision profile/level must be exposed in the track format of the HDR track.
  • If a platform provides a Dolby-Vision capable decoder, it must also provide a Dolby-Vision aware extractor, even if it does not support HDR playback.

HDR10 and VP9 HDR extractor support

There are no additional extractor requirements to support HDR10 or VP9 HLG. Platforms must extend MP4 extractor to support VP9 PQ in MP4. HDR static metadata must be propagated in the VP9 PQ bitstream, such that this metadata is passed to the VP9 PQ decoder and to the display via the normal MediaExtractor => MediaCodec pipeline.

Stagefright extensions for Dolby Vision support

Platforms must add Dolby Vision format support to Stagefright:

  • Support for port definition query for compressed port.
  • Support profile/level enumeration for DV decoder.
  • Support exposing DV profile/level for DV HDR tracks.

Technology-specific implementation details

HDR10 decoder pipeline

Figure 1. HDR10 pipeline

HDR10 bitstreams are packaged in MP4 containers. Applications use a regular MP4 extractor to extract the frame data and send it to the decoder.

  • MPEG4 Extractor
    HDR10 bitstreams are recognized as just a normal HEVC stream by a MPEG4Extractor and the HDR track with the type "video/HEVC" will be extracted. The framework picks an HEVC video decoder that supports the Main10HDR10 profile to decode that track.
  • HEVC Decoder
    HDR information is in either SEI or SPS. The HEVC decoder first receives frames that contain the HDR information. The decoder then extracts the HDR information and notifies the application that it is decoding an HDR video. HDR information is bundled into decoder output format, which is propagated to the surface later.

Vendor actions

  1. Advertise supported HDR decoder profile and level OMX type. مثال:
    OMX_VIDEO_HEVCProfileMain10HDR10 (and Main10 )
  2. Implement support for index: ' OMX.google.android.index.describeHDRColorInfo '
  3. Implement support for index: ' OMX.google.android.index.describeColorAspects '
  4. Implement support for SEI parsing of mastering metadata.

Dolby Vision decoder pipeline

Figure 2. Dolby Vision pipeline

Dolby-bitstreams are packaged in MP4 containers as defined by Dolby. Applications could, in theory, use a regular MP4 extractor to extract the base layer, enhancement layer, and metadata layer independently; however, this does not fit the current Android MediaExtractor/MediaCodec model.

  • DolbyExtractor:
    • Dolby-bitstreams are recognized by a DolbyExtractor, which exposes the various layers as 1 to 2 tracks for each dolby video track (group):
      • An HDR track with the type of "video/dolby-vision" for the combined 2/3-layers dolby stream. The HDR track's access-unit format, which defines how to package the access units from the base/enhancement/metadata layers into a single buffer to be decoded into a single HDR frame, is to be defined by Dolby.
      • (Optional, only if the BL is backward compatible) A BL track contains only the base layer, which must be decodable by regular MediaCodec decoder, for example, AVC/HEVC decoder. The extractor should provide regular AVC/HEVC access units for this track. This BL track must have the same track-unique-ID ("track-ID") as the Dolby track so the application understands that these are two encodings of the same video.
    • The application can decide which track to choose based on the platform's capability.
    • Because an HDR track has a specific HDR type, the framework will pick a Dolby video decoder to decode that track. The BL track will be decoded by a regular AVC/HEVC video decoder.
  • DolbyDecoder:
    • The DolbyDecoder receives access units that contain the required access units for all layers (EL+BL+MD or BL+MD)
    • CSD (codec specific data, such as SPS+PPS+VPS) information for the individual layers can be packaged into 1 CSD frame to be defined by Dolby. Having a single CSD frame is required.

Dolby actions

  1. Define the packaging of access units for the various Dolby container schemes (eg BL+EL+MD) for the abstract Dolby decoder (ie the buffer format expected by the HDR decoder).
  2. Define the packaging of CSD for the abstract Dolby decoder.

Vendor actions

  1. Implement Dolby extractor. This can also be done by Dolby.
  2. Integrate DolbyExtractor into the framework. The entry point is frameworks/av/media/libstagefright/MediaExtractor.cpp .
  3. Declare HDR decoder profile and level OMX type. Example: OMX_VIDEO_DOLBYPROFILETYPE and OMX_VIDEO_DOLBYLEVELTYP .
  4. Implement support for index: 'OMX.google.android.index.describeColorAspects '
  5. Propagate the dynamic HDR metadata to the app and surface in each frame. Typically this information must be packaged into the decoded frame as defined by Dolby, because the HDMI standard does not provide a way to pass this to the display.

VP9 decoder pipeline

Figure 3. VP9-PQ pipeline

VP9 bitstreams are packaged in WebM containers in a way defined by WebM team. Applications need to use a WebM extractor to extract HDR metadata from the bitstream before sending frames to the decoder.

  • WebM Extractor:
  • VP9 Decoder:
    • Decoder receives Profile2 bitstreams and decodes them as normal VP9 streams.
    • Decoder receives any HDR static metadata from the framework.
    • Decoder receives static metadata via the bitstream access units for VP9 PQ streams.
    • VP9 decoder must be able to propagate the HDR static/dynamic metadata to the display.

Vendor actions

  1. Implement support for index: OMX.google.android.index.describeHDRColorInfo
  2. Implement support for index: OMX.google.android.index.describeColorAspects
  3. Propagate HDR static metadata