بازپخش ویدیو HDR

ویدیو «دامنه پویای بالا» (HDR) مرز بعدی در کدبندی ویدیو با کیفیت بالا است که کیفیت‌های بازتولید صحنه بی‌نظیری را ارائه می‌دهد. این کار با افزایش قابل‌توجه محدوده پویای مؤلفه درخشندگی (از ۱۰۰ cd/m۲ فعلی به هزاران cd/m۲) و با استفاده از فضای رنگی بسیار وسیع‌تر (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 و کمک به سازندگان تجهیزات اصلی و SOCها برای فعال کردن ویژگی‌های HDR است.

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

از Android 7.0 و بالاتر، فناوری‌های HDR زیر پشتیبانی می‌شوند.

فناوری Dolby-Vision HDR10 VP9-HLG VP9-PQ
کدک AVC/HEVC HEVC VP9 VP9
تابع انتقال ST-2084 ST-2084 HLG ST-2084
نوع فراداده HDR پویا ثابت هیچ‌کدام ثابت

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

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

Discovery

بازپخش HDR به یک کدبند HDR و اتصال به یک نمایشگر HDR نیاز دارد. به‌صورت اختیاری، برخی‌از فناوری‌ها به استخراج‌کننده خاصی نیاز دارند.

نمایش

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

رمزگشا

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

Dolby-Vision

ثابت mime‏ 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 constants:

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
نمایه (رمزگشا) یکی از نمایه‌های Dolby HEVCProfileMain10HDR10 VP9Profile2HDR یا VP9Profile3HDR VP9Profile2HDR یا VP9Profile3HDR

نکته‌ها:

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

بازپخش

پس‌از اینکه برنامه پشتیبانی از بازپخش HDR را تأیید کرد، می‌تواند محتوای HDR را تقریباً به همان روشی که محتوای غیرHDR را بازپخش می‌کند، بازپخش کند، با این هشدارها:

  • برای Dolby-Vision، اینکه آیا یک فایل/قطعه رسانه‌ای خاص به یک کدبند HDR نیاز دارد یا نه، بلافاصله دردسترس نیست. برنامه باید این اطلاعات را ازقبل داشته باشد یا بتواند با تجزیه کردن بخش داده‌های خاص کدک MediaFormat این اطلاعات را به‌دست آورد.
  • ‫CodecCapabilities.isFormatSupported درنظر نمی‌گیرد که آیا ویژگی رمزگشای تونل‌دار برای پشتیبانی از چنین نمایه‌ای لازم است یا نه.

فعال کردن پشتیبانی از پلاتفرم HDR

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

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

در اینجا برخی‌از تغییرات کلیدی در پلاتفرم (برنامه/لایه بومی) که «تولیدکنندگان تجهیزات اصلی» و «سیستم روی تراشه» باید از آن‌ها آگاه باشند آورده شده است.

نمایش

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

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

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

نمایش اکتشاف

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

HDMI

  • نمایشگر HDMI متصل قابلیت HDR خود را ازطریق HDMI EDID همان‌گونه که در بخش ۴.۲ از CTA-861.3 تعریف شده است تبلیغ می‌کند.
  • از نگاشت EOTF زیر باید استفاده شود:
    • ET_0 Traditional gamma - SDR Luminance Range: not mapped to any HDR type
    • ET_1 گامای سنتی - محدوده درخشندگی HDR: به هیچ نوع HDR نگاشت نشده است
    • ET_2 SMPTE ST 2084 - به نوع HDR10‏ HDR نگاشت شد
  • سیگنال‌دهی پشتیبانی از 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 ارائه دهد، باید:

  • یک استخراج‌کننده آگاه به Dolby-Vision ارائه دهید، حتی اگر از بازپخش HDR پشتیبانی نکند.
  • کدگذاری ارائه دهید که از نمایه دیداری تعریف‌شده توسط 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 (به‌نام «استخراج‌کننده Dolby») برای محتوای Dolby Video پشتیبانی کنند.

  • استخراج‌کننده معمولی MP4 فقط می‌تواند لایه پایه را از یک فایل استخراج کند، اما نمی‌تواند لایه‌های بهبود یا فراداده را استخراج کند. بنابراین، برای استخراج داده‌ها از فایل، به یک استخراج‌کننده ویژه Dolby نیاز است.
  • استخراج‌کننده Dolby باید ۱ تا ۲ قطعه برای هر قطعه ویدیو Dolby (گروه) آشکار کند:
    • یک قطعه Dolby Vision HDR با نوع «video/dolby-vision» برای جاری‌سازی Dolby ترکیبی ۲/۳ لایه. قالب واحد دسترسی قطعه HDR که نحوه بسته‌بندی واحدهای دسترسی از لایه‌های پایه/بهبود/فراداده را در یک میان‌گیر واحد برای رمزگشایی در یک قاب HDR واحد تعریف می‌کند، باید توسط Dolby تعریف شود.
    • اگر یک قطعه ویدیو Dolby Vision حاوی یک لایه پایه جداگانه (سازگار با عقب) باشد، استخراج‌کننده باید این را به‌عنوان یک قطعه «video/avc» یا «video/hevc» جداگانه نیز آشکار کند. استخراج‌کننده باید واحدهای دسترسی AVC/HEVC را به‌طور منظم برای این قطعه ارائه دهد.
    • قطعه BL باید همان شناسه یکتای قطعه ("track-ID") را به‌عنوان قطعه HDR داشته باشد تا برنامه متوجه شود که این دو کدبندی یک ویدیو هستند.
    • برنامه می‌تواند تصمیم بگیرد که کدام قطعه را براساس قابلیت پلاتفرم انتخاب کند.
  • نمایه/سطح Dolby Vision باید در قالب قطعه قطعه HDR آشکار شود.
  • اگر پلاتفرمی یک کدبند سازگار با Dolby Vision ارائه می‌دهد، باید یک استخراج‌کننده سازگار با Dolby Vision نیز ارائه دهد، حتی اگر از بازپخش HDR پشتیبانی نکند.

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

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

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

پلاتفرم‌ها باید پشتیبانی از قالب Dolby Vision را به Stagefright اضافه کنند:

  • پشتیبانی از پُرسمان تعریف درگاه برای درگاه فشرده.
  • پشتیبانی از شمارش نمایه/سطح برای کدبند DV.
  • از نمایش نمایه/سطح DV برای قطعات DV HDR پشتیبانی می‌کند.

جزئیات پیاده‌سازی مختص فناوری

خط لوله کدبند HDR10

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

جریان‌های بیتی HDR10 در بسته‌های MP4 بسته‌بندی می‌شوند. برنامه‌ها از یک استخراج‌کننده MP4 معمولی برای استخراج داده‌های قاب و ارسال آن به کدبند استفاده می‌کنند.

  • MPEG4 Extractor
    جاری‌سازی‌های HDR10 به‌عنوان جاری‌سازی HEVC معمولی توسط MPEG4Extractor شناخته می‌شوند و قطعه HDR با نوع «video/HEVC» استخراج خواهد شد. چارچوب یک کدبند ویدیویی HEVC را که از نمایه Main10HDR10 پشتیبانی می‌کند برای کدبندی آن قطعه انتخاب می‌کند.
  • کدبند HEVC
    اطلاعات HDR در SEI یا SPS است. کدبند HEVC ابتدا قاب‌هایی را دریافت می‌کند که حاوی اطلاعات HDR هستند. سپس کدگشا اطلاعات HDR را استخراج می‌کند و به برنامه اطلاع می‌دهد که درحال کدگشایی ویدیو HDR است. اطلاعات HDR در قالب برونداد کدبند دسته‌بندی می‌شود که بعداً به سطح منتقل می‌شود.

کنش‌های فروشنده

  1. نوع و سطح نمایه کدبند HDR پشتیبانی‌شده را تبلیغ کنید. مثال:
    OMX_VIDEO_HEVCProfileMain10HDR10 (و Main10)
  2. پشتیبانی از نمایه را پیاده‌سازی کنید: «OMX.google.android.index.describeHDRColorInfo»
  3. پیاده‌سازی پشتیبانی برای نمایه: «OMX.google.android.index.describeColorAspects»
  4. پشتیبانی از تجزیه‌وتحلیل SEI فراداده تسلط را پیاده‌سازی کنید.

خط لوله کدگشای Dolby Vision

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

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

  • DolbyExtractor:
    • جاری‌سازی‌های بیت Dolby توسط DolbyExtractor شناسایی می‌شوند، که لایه‌های مختلف را به‌عنوان ۱ تا ۲ قطعه برای هر قطعه ویدیو Dolby (گروه) آشکار می‌کند:
      • قطعه HDR با نوع «video/dolby-vision» برای جاری‌سازی ترکیبی ۲/۳ لایه dolby. قالب واحد دسترسی قطعه 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) برای لایه‌های جداگانه می‌تواند در ۱ قاب CSD بسته‌بندی شود تا توسط Dolby تعریف شود. داشتن یک قاب CSD الزامی است.

کنش‌های Dolby

  1. بسته‌بندی واحدهای دسترسی را برای طرح‌های مختلف محفظه Dolby (مثلاً BL+EL+MD) برای رمزگشای انتزاعی Dolby (یعنی قالب میان‌گیر موردانتظار رمزگشای HDR) تعریف کنید.
  2. بسته‌بندی CSD را برای رمزگشای انتزاعی Dolby تعریف کنید.

کنش‌های فروشنده

  1. پیاده‌سازی استخراج‌کننده Dolby. این کار را Dolby هم می‌تواند انجام دهد.
  2. ‫DolbyExtractor را در چارچوب ادغام کنید. نقطه ورودی frameworks/av/media/libstagefright/MediaExtractor.cpp است.
  3. نمایه و سطح رمزگشای HDR نوع OMX را تعریف کنید. مثال: OMX_VIDEO_DOLBYPROFILETYPE و OMX_VIDEO_DOLBYLEVELTYP.
  4. پشتیبانی از شاخص را پیاده‌سازی کنید: 'OMX.google.android.index.describeColorAspects'
  5. فراداده HDR پویا را به برنامه و سطح در هر فریم منتشر کنید. معمولاً این اطلاعات باید در قاب رمزگشایی‌شده بسته‌بندی شود همان‌طور که Dolby تعریف کرده است، زیرا استاندارد HDMI راهی برای انتقال این اطلاعات به نمایشگر ارائه نمی‌دهد.

خط لوله کدگشای VP9

شکل ۳. خط لوله VP9-PQ

جریان‌های بیت VP9 در محتواهای WebM به روشی که توسط تیم WebM تعریف شده است بسته‌بندی می‌شوند. برنامه‌ها باید از یک استخراج‌کننده WebM برای استخراج فراداده HDR از جریان بیت قبل‌از ارسال قاب‌ها به کدبند استفاده کنند.

  • WebM Extractor:
    • «استخراج‌کننده WebM» فراداده و قاب‌های HDR را از ظرف استخراج می‌کند.
  • رمزگشای VP9:
    • رمزگشا جاری‌سازی‌های بیت Profile2 را دریافت می‌کند و آن‌ها را به‌عنوان جاری‌سازی‌های VP9 معمولی رمزگشایی می‌کند.
    • کدبند هرگونه فراداده ثابت HDR را از چارچوب دریافت می‌کند.
    • رمزگشا فراداده ثابت را ازطریق واحدهای دسترسی جاری‌سازی بیت برای جاری‌سازی‌های VP9 PQ دریافت می‌کند.
    • کدگشای VP9 باید بتواند فراداده‌های ایستا/پویای HDR را به نمایشگر منتقل کند.

کنش‌های فروشنده

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