پخش فیلم HDR

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

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

  • اچ‌دی‌آر۱۰
  • وی پی۹
  • اچ‌دی‌آر۱۰+

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

از اندروید ۷.۰، پشتیبانی اولیه از HDR شامل ایجاد ثابت‌های مناسب برای کشف و راه‌اندازی خطوط لوله ویدیوی HDR می‌شود. این به معنای تعریف انواع کدک و حالت‌های نمایش و مشخص کردن نحوه انتقال داده‌های HDR به MediaCodec و ارائه به رمزگشاهای HDR است.

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

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

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

فناوری دالبی ویژن اچ‌دی‌آر۱۰ VP9-HLG VP9-PQ
کدک AVC/HEVC اچ‌ای‌وی‌سی وی پی۹ وی پی۹
تابع انتقال ST-2084 ST-2084 اچ ال جی ST-2084
نوع فراداده HDR پویا استاتیک هیچکدام استاتیک

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

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

کشف

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

نمایش

برنامه‌ها باید از رابط برنامه‌نویسی کاربردی جدید Display.getHdrCapabilities برای جستجوی فناوری‌های HDR پشتیبانی‌شده توسط نمایشگر مشخص‌شده استفاده کنند. این اساساً اطلاعات موجود در بلوک داده فراداده استاتیک EDID است که در CTA-861.3 تعریف شده است:

  • public Display.HdrCapabilities getHdrCapabilities()
    قابلیت‌های HDR نمایشگر را برمی‌گرداند.
  • Display.HdrCapabilities
    قابلیت‌های HDR یک نمایشگر مشخص را در بر می‌گیرد. برای مثال، چه نوع HDR را پشتیبانی می‌کند و جزئیات مربوط به داده‌های روشنایی مورد نظر را شرح می‌دهد.

ثابت‌ها:

  • int HDR_TYPE_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 پشتیبانی نکند، آرایه خالی را برمی‌گرداند.

رمزگشا

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

دالبی ویژن

ثابت 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 پشتیبانی می‌کند، انجام می‌شود.

اچ‌دی‌آر ۱۰ اچ‌دی‌آر

ثابت‌های پروفایل 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 در اندروید ۷.۰ پشتیبانی می‌شوند:

فناوری دالبی ویژن اچ‌دی‌آر۱۰ VP9-HLG VP9-PQ
کانتینر ام پی ۴ ام پی ۴ وب ام وب ام

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

خلاصه

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

فناوری دالبی ویژن اچ‌دی‌آر۱۰ VP9-HLG VP9-PQ
نوع HDR پشتیبانی شده (نمایشگر) نوع_HDR_DOLBY_VISION HDR_TYPE_HDR10 HDR_TYPE_HLG HDR_TYPE_HDR10
کانتینر (استخراج کننده) ام پی ۴ ام پی ۴ وب ام وب ام
رمزگشا نوع_MIME_VIDEO_DOLBY_VISION نوع_MIME_VIDEO_HEVC MIMETYPE_VIDEO_VP9 MIMETYPE_VIDEO_VP9
پروفایل (رمزگشا) یکی از پروفایل‌های دالبی پروفایل HEVCاصلی10HDR10 VP9Profile2HDR یا VP9Profile3HDR VP9Profile2HDR یا VP9Profile3HDR

یادداشت‌ها:

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

پخش

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

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

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

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

تغییرات پلتفرم در اندروید ۷.۰ برای HDR

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

نمایش

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

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

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

کشف نمایش

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

اچ دی ام آی

  • یک نمایشگر 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 طبق تعریف نهادهای مربوطه انجام می‌شود.
  • توجه داشته باشید که رابط برنامه‌نویسی کاربردی HWC2 از مقادیر روشنایی دلخواه شناور استفاده می‌کند، بنابراین مقادیر EDID هشت بیتی باید به روشی مناسب ترجمه شوند.

رمزگشاها

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

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

پشتیبانی از رمزگشای دالبی ویژن

برای پشتیبانی از دالبی ویژن، پلتفرم‌ها باید یک رمزگشای HDR OMX با قابلیت دالبی ویژن اضافه کنند. با توجه به ویژگی‌های دالبی ویژن، این معمولاً یک رمزگشای پوششی پیرامون یک یا چند رمزگشای AVC و/یا HEVC و همچنین یک ترکیب‌کننده است. چنین رمزگشاهایی باید:

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

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

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

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

پشتیبانی از رمزگشای 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 Extractor (که Dolby Extractor نامیده می‌شود) را برای محتوای Dolby Video اضافه کنند.

  • یک استخراج‌کننده‌ی معمولی MP4 فقط می‌تواند لایه‌ی پایه را از یک فایل استخراج کند، اما نمی‌تواند لایه‌های بهبود یا فراداده را استخراج کند. بنابراین برای استخراج داده‌ها از فایل به یک استخراج‌کننده‌ی مخصوص دالبی نیاز است.
  • استخراج‌کننده‌ی دالبی باید برای هر تراک ویدیویی دالبی (گروه) ۱ تا ۲ تراک را نمایش دهد:
    • یک قطعه‌ی دالبی ویژن HDR با نوع «ویدئو/دالبی ویژن» برای جریان ترکیبی دو/سه لایه‌ی دالبی. فرمت واحد دسترسی قطعه‌ی HDR، که نحوه‌ی بسته‌بندی واحدهای دسترسی از لایه‌های پایه/بهبود/فراداده را در یک بافر واحد برای رمزگشایی در یک فریم HDR واحد تعریف می‌کند، توسط دالبی تعریف خواهد شد.
    • اگر یک تراک ویدیویی 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

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

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

پلتفرم‌ها باید پشتیبانی از فرمت دالبی ویژن را به Stagefright اضافه کنند:

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

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

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

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

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

  • استخراج کننده MPEG4
    بیت‌استریم‌های HDR10 توسط یک MPEG4Extractor به عنوان یک جریان HEVC معمولی شناخته می‌شوند و آهنگ 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 فراداده‌های اصلی را پیاده‌سازی کنید.

خط تولید رمزگشای دالبی ویژن

شکل 2. خط تولید دالبی ویژن

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

  • استخراج‌کننده‌ی دالبی:
    • فایل‌های دالبی-بیت‌استریم توسط یک DolbyExtractor شناسایی می‌شوند که لایه‌های مختلف را به صورت ۱ تا ۲ تراک برای هر تراک ویدیوی دالبی (گروه) نمایش می‌دهد:
      • یک قطعه HDR با نوع «ویدئو/دالبی-ویژن» برای جریان ترکیبی دالبی ۲/۳ لایه. قالب واحد دسترسی قطعه HDR، که نحوه بسته‌بندی واحدهای دسترسی از لایه‌های پایه/بهینه‌سازی/فراداده را در یک بافر واحد برای رمزگشایی در یک فریم HDR واحد تعریف می‌کند، توسط دالبی تعریف می‌شود.
      • (اختیاری، فقط در صورتی که BL با نسخه‌های قبلی سازگار باشد) یک تراک BL فقط شامل لایه پایه است که باید توسط رمزگشای MediaCodec معمولی، مثلاً رمزگشای AVC/HEVC، قابل رمزگشایی باشد. استخراج‌کننده باید واحدهای دسترسی AVC/HEVC معمولی را برای این تراک فراهم کند. این تراک BL باید همان track-unique-ID ("track-ID") را با تراک Dolby داشته باشد تا برنامه متوجه شود که این دو کدگذاری از یک ویدیو هستند.
    • برنامه می‌تواند بر اساس قابلیت پلتفرم تصمیم بگیرد که کدام مسیر را انتخاب کند.
    • از آنجا که یک آهنگ HDR نوع HDR خاصی دارد، این چارچوب یک رمزگشای ویدیوی Dolby را برای رمزگشایی آن آهنگ انتخاب می‌کند. آهنگ BL توسط یک رمزگشای ویدیوی معمولی AVC/HEVC رمزگشایی می‌شود.
  • دالبی دیکدر:
    • DolbyDecoder واحدهای دسترسی را دریافت می‌کند که شامل واحدهای دسترسی مورد نیاز برای همه لایه‌ها (EL+BL+MD یا BL+MD) هستند.
    • اطلاعات CSD (داده‌های خاص کدک، مانند SPS+PPS+VPS) برای لایه‌های مجزا را می‌توان در یک فریم CSD بسته‌بندی کرد تا توسط دالبی تعریف شود. داشتن یک فریم CSD واحد الزامی است.

اکشن‌های دالبی

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

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

  1. استخراج‌کننده‌ی دالبی را پیاده‌سازی کنید. این کار را می‌توان توسط دالبی نیز انجام داد.
  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 را به برنامه منتقل کرده و در هر فریم نمایش دهید. معمولاً این اطلاعات باید طبق تعریف دالبی در فریم رمزگشایی شده بسته‌بندی شوند، زیرا استاندارد HDMI راهی برای انتقال این اطلاعات به نمایشگر ارائه نمی‌دهد.

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

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

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

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

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

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