ویدیو با محدوده دینامیکی بالا (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 تعریف نشده است، اما فرآیند به طور کلی این مراحل را دنبال میکند:
- یک فضای رنگ/حجم خطی را تعیین کنید که شامل تمام لایههایی است که باید ترکیب شوند، بر اساس رنگ لایهها، مسترینگ و ابرداده پویا بالقوه.
اگر مستقیماً با نمایشگر ترکیب می شود، این می تواند فضای خطی باشد که با حجم رنگ نمایشگر مطابقت دارد. - همه لایه ها را به فضای رنگی مشترک تبدیل کنید.
- ترکیب را انجام دهید.
- در صورت نمایش از طریق HDMI:
- رنگ، مسترینگ و متادیتای پویا بالقوه را برای صحنه ترکیبی تعیین کنید.
- صحنه ترکیبی حاصل را به فضای رنگی/حجم مشتق شده تبدیل کنید.
- اگر مستقیماً روی نمایشگر نمایش داده می شود، صحنه ترکیبی حاصل را به سیگنال های نمایشی مورد نیاز برای تولید آن صحنه تبدیل کنید.
نمایش کشف
کشف صفحه نمایش 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
بیتاستریمهای HDR10 در کانتینرهای MP4 بستهبندی میشوند. برنامه ها از یک استخراج کننده MP4 معمولی برای استخراج داده های فریم و ارسال آن به رمزگشا استفاده می کنند.
- استخراج کننده MPEG4
بیتاستریمهای HDR10 فقط بهعنوان یک جریان معمولی HEVC توسط MPEG4Extractor شناسایی میشوند و مسیر HDR با نوع «video/HEVC» استخراج میشود. این چارچوب یک رمزگشای ویدیویی HEVC را انتخاب میکند که از نمایه Main10HDR10 برای رمزگشایی آن مسیر پشتیبانی میکند. - رسیور HEVC
اطلاعات HDR در SEI یا SPS است. رمزگشا HEVC ابتدا فریم هایی را دریافت می کند که حاوی اطلاعات HDR هستند. سپس رمزگشا اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک ویدیوی HDR است. اطلاعات HDR در قالب خروجی رمزگشا قرار می گیرد که بعداً به سطح پخش می شود.
اقدامات فروشنده
- نمایه رمزگشای HDR پشتیبانی شده و نوع سطح OMX را تبلیغ کنید. مثال:
OMX_VIDEO_HEVCProfileMain10HDR10
(وMain10
) - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeHDRColorInfo
" - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeColorAspects
" - اجرای پشتیبانی برای تجزیه SEI از ابرداده های مسترینگ.
خط لوله رسیور 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 رمزگشایی می شود.
- دالبی بیتاستریمها توسط یک DolbyExtractor شناسایی میشوند که لایههای مختلف را بهعنوان 1 تا 2 آهنگ برای هر تراک ویدیوی دالبی (گروه) در معرض دید قرار میدهد:
- DolbyDecoder:
- DolbyDecoder واحدهای دسترسی را دریافت می کند که شامل واحدهای دسترسی مورد نیاز برای همه لایه ها (EL+BL+MD یا BL+MD) هستند.
- اطلاعات CSD (داده های خاص کدک، مانند SPS+PPS+VPS) برای هر لایه را می توان در 1 فریم CSD بسته بندی کرد تا توسط Dolby تعریف شود. داشتن یک قاب CSD الزامی است.
اقدامات دالبی
- بسته بندی واحدهای دسترسی را برای طرح های مختلف کانتینر Dolby (مانند BL+EL+MD) برای رمزگشای انتزاعی Dolby (یعنی فرمت بافر مورد انتظار رمزگشای HDR) تعریف کنید.
- بسته بندی CSD را برای رمزگشای انتزاعی Dolby تعریف کنید.
اقدامات فروشنده
- استخراج کننده Dolby را اجرا کنید. این کار توسط Dolby نیز قابل انجام است.
- DolbyExtractor را در چارچوب ادغام کنید. نقطه ورود
frameworks/av/media/libstagefright/MediaExtractor.cpp
است. - مشخصات رسیور HDR و نوع سطح OMX را اعلام کنید. مثال:
OMX_VIDEO_DOLBYPROFILETYPE
وOMX_VIDEO_DOLBYLEVELTYP
. - اجرای پشتیبانی برای ایندکس:
'OMX.google.android.index.describeColorAspects
' - فراداده دینامیک HDR را در برنامه و سطح در هر فریم منتشر کنید. معمولاً این اطلاعات باید در قاب رمزگشایی شده بسته بندی شوند که توسط Dolby تعریف شده است، زیرا استاندارد HDMI راهی برای ارسال آن به نمایشگر ارائه نمی دهد.
خط لوله رمزگشا VP9
بیتاستریمهای VP9 در کانتینرهای WebM به روشی که توسط تیم WebM تعریف شده است، بستهبندی میشوند. برنامه ها باید از استخراج کننده WebM برای استخراج ابرداده های HDR از جریان بیت قبل از ارسال فریم ها به رمزگشا استفاده کنند.
- WebM Extractor:
- WebM Extractor فراداده ها و فریم های HDR را از ظرف استخراج می کند.
- رسیور VP9:
- رسیور بیتاستریمهای Profile2 را دریافت میکند و آنها را بهعنوان جریانهای معمولی VP9 رمزگشایی میکند.
- رمزگشا هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
- رسیور ابرداده ایستا را از طریق واحدهای دسترسی بیت استریم برای جریان های VP9 PQ دریافت می کند.
- رمزگشا VP9 باید بتواند متادیتای استاتیک/دینامیک HDR را به نمایشگر منتشر کند.
اقدامات فروشنده
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeHDRColorInfo
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeColorAspects
- فراداده استاتیک 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 تعریف نشده است، اما فرآیند به طور کلی این مراحل را دنبال میکند:
- یک فضای رنگ/حجم خطی را تعیین کنید که شامل تمام لایههایی است که باید ترکیب شوند، بر اساس رنگ لایهها، مسترینگ و ابرداده پویا بالقوه.
اگر مستقیماً با نمایشگر ترکیب می شود، این می تواند فضای خطی باشد که با حجم رنگ نمایشگر مطابقت دارد. - همه لایه ها را به فضای رنگی مشترک تبدیل کنید.
- ترکیب را انجام دهید.
- در صورت نمایش از طریق HDMI:
- رنگ، مسترینگ و متادیتای پویا بالقوه را برای صحنه ترکیبی تعیین کنید.
- صحنه ترکیبی حاصل را به فضای رنگی/حجم مشتق شده تبدیل کنید.
- اگر مستقیماً روی نمایشگر نمایش داده می شود، صحنه ترکیبی حاصل را به سیگنال های نمایشی مورد نیاز برای تولید آن صحنه تبدیل کنید.
نمایش کشف
کشف صفحه نمایش 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
بیتاستریمهای HDR10 در کانتینرهای MP4 بستهبندی میشوند. برنامه ها از یک استخراج کننده MP4 معمولی برای استخراج داده های فریم و ارسال آن به رمزگشا استفاده می کنند.
- استخراج کننده MPEG4
بیتاستریمهای HDR10 فقط بهعنوان یک جریان معمولی HEVC توسط MPEG4Extractor شناسایی میشوند و مسیر HDR با نوع «video/HEVC» استخراج میشود. این چارچوب یک رمزگشای ویدیویی HEVC را انتخاب میکند که از نمایه Main10HDR10 برای رمزگشایی آن مسیر پشتیبانی میکند. - رسیور HEVC
اطلاعات HDR در SEI یا SPS است. رمزگشا HEVC ابتدا فریم هایی را دریافت می کند که حاوی اطلاعات HDR هستند. سپس رمزگشا اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک ویدیوی HDR است. اطلاعات HDR در قالب خروجی رمزگشا قرار می گیرد که بعداً به سطح پخش می شود.
اقدامات فروشنده
- نمایه رمزگشای HDR پشتیبانی شده و نوع سطح OMX را تبلیغ کنید. مثال:
OMX_VIDEO_HEVCProfileMain10HDR10
(وMain10
) - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeHDRColorInfo
" - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeColorAspects
" - اجرای پشتیبانی برای تجزیه SEI از ابرداده های مسترینگ.
خط لوله رسیور 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 رمزگشایی می شود.
- دالبی بیتاستریمها توسط یک DolbyExtractor شناسایی میشوند که لایههای مختلف را بهعنوان 1 تا 2 آهنگ برای هر تراک ویدیوی دالبی (گروه) در معرض دید قرار میدهد:
- DolbyDecoder:
- DolbyDecoder واحدهای دسترسی را دریافت می کند که شامل واحدهای دسترسی مورد نیاز برای همه لایه ها (EL+BL+MD یا BL+MD) هستند.
- اطلاعات CSD (داده های خاص کدک، مانند SPS+PPS+VPS) برای هر لایه را می توان در 1 فریم CSD بسته بندی کرد تا توسط Dolby تعریف شود. داشتن یک قاب CSD الزامی است.
اقدامات دالبی
- بسته بندی واحدهای دسترسی را برای طرح های مختلف کانتینر Dolby (مانند BL+EL+MD) برای رمزگشای انتزاعی Dolby (یعنی فرمت بافر مورد انتظار رمزگشای HDR) تعریف کنید.
- بسته بندی CSD را برای رمزگشای انتزاعی Dolby تعریف کنید.
اقدامات فروشنده
- استخراج کننده Dolby را اجرا کنید. این کار توسط Dolby نیز قابل انجام است.
- DolbyExtractor را در چارچوب ادغام کنید. نقطه ورود
frameworks/av/media/libstagefright/MediaExtractor.cpp
است. - مشخصات رسیور HDR و نوع سطح OMX را اعلام کنید. مثال:
OMX_VIDEO_DOLBYPROFILETYPE
وOMX_VIDEO_DOLBYLEVELTYP
. - اجرای پشتیبانی برای ایندکس:
'OMX.google.android.index.describeColorAspects
' - فراداده دینامیک HDR را در برنامه و سطح در هر فریم منتشر کنید. معمولاً این اطلاعات باید در قاب رمزگشایی شده بسته بندی شوند که توسط Dolby تعریف شده است، زیرا استاندارد HDMI راهی برای ارسال آن به نمایشگر ارائه نمی دهد.
خط لوله رمزگشا VP9
بیتاستریمهای VP9 در کانتینرهای WebM به روشی که توسط تیم WebM تعریف شده است، بستهبندی میشوند. برنامه ها باید از استخراج کننده WebM برای استخراج ابرداده های HDR از جریان بیت قبل از ارسال فریم ها به رمزگشا استفاده کنند.
- WebM Extractor:
- WebM Extractor فراداده ها و فریم های HDR را از ظرف استخراج می کند.
- رسیور VP9:
- رسیور بیتاستریمهای Profile2 را دریافت میکند و آنها را بهعنوان جریانهای معمولی VP9 رمزگشایی میکند.
- رمزگشا هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
- رسیور ابرداده ایستا را از طریق واحدهای دسترسی بیت استریم برای جریان های VP9 PQ دریافت می کند.
- رمزگشا VP9 باید بتواند متادیتای استاتیک/دینامیک HDR را به نمایشگر منتشر کند.
اقدامات فروشنده
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeHDRColorInfo
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeColorAspects
- فراداده استاتیک 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 تعریف نشده است، اما فرآیند به طور کلی این مراحل را دنبال میکند:
- یک فضای رنگ/حجم خطی را تعیین کنید که شامل تمام لایههایی است که باید ترکیب شوند، بر اساس رنگ لایهها، مسترینگ و ابرداده پویا بالقوه.
اگر مستقیماً با نمایشگر ترکیب می شود، این می تواند فضای خطی باشد که با حجم رنگ نمایشگر مطابقت دارد. - همه لایه ها را به فضای رنگی مشترک تبدیل کنید.
- ترکیب را انجام دهید.
- در صورت نمایش از طریق HDMI:
- رنگ، مسترینگ و متادیتای پویا بالقوه را برای صحنه ترکیبی تعیین کنید.
- صحنه ترکیبی حاصل را به فضای رنگی/حجم مشتق شده تبدیل کنید.
- اگر مستقیماً روی نمایشگر نمایش داده می شود، صحنه ترکیبی حاصل را به سیگنال های نمایشی مورد نیاز برای تولید آن صحنه تبدیل کنید.
نمایش کشف
کشف صفحه نمایش 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
بیتاستریمهای HDR10 در کانتینرهای MP4 بستهبندی میشوند. برنامه ها از یک استخراج کننده MP4 معمولی برای استخراج داده های فریم و ارسال آن به رمزگشا استفاده می کنند.
- استخراج کننده MPEG4
بیتاستریمهای HDR10 فقط بهعنوان یک جریان معمولی HEVC توسط MPEG4Extractor شناسایی میشوند و مسیر HDR با نوع «video/HEVC» استخراج میشود. این چارچوب یک رمزگشای ویدیویی HEVC را انتخاب میکند که از نمایه Main10HDR10 برای رمزگشایی آن مسیر پشتیبانی میکند. - رسیور HEVC
اطلاعات HDR در SEI یا SPS است. رمزگشا HEVC ابتدا فریم هایی را دریافت می کند که حاوی اطلاعات HDR هستند. سپس رمزگشا اطلاعات HDR را استخراج می کند و به برنامه اطلاع می دهد که در حال رمزگشایی یک ویدیوی HDR است. اطلاعات HDR در قالب خروجی رمزگشا قرار می گیرد که بعداً به سطح پخش می شود.
اقدامات فروشنده
- نمایه رمزگشای HDR پشتیبانی شده و نوع سطح OMX را تبلیغ کنید. مثال:
OMX_VIDEO_HEVCProfileMain10HDR10
(وMain10
) - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeHDRColorInfo
" - اجرای پشتیبانی برای ایندکس: "
OMX.google.android.index.describeColorAspects
" - اجرای پشتیبانی برای تجزیه SEI از ابرداده های مسترینگ.
خط لوله رسیور 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 رمزگشایی می شود.
- دالبی بیتاستریمها توسط یک DolbyExtractor شناسایی میشوند که لایههای مختلف را بهعنوان 1 تا 2 آهنگ برای هر تراک ویدیوی دالبی (گروه) در معرض دید قرار میدهد:
- DolbyDecoder:
- DolbyDecoder واحدهای دسترسی را دریافت می کند که شامل واحدهای دسترسی مورد نیاز برای همه لایه ها (EL+BL+MD یا BL+MD) هستند.
- اطلاعات CSD (داده های خاص کدک، مانند SPS+PPS+VPS) برای هر لایه را می توان در 1 فریم CSD بسته بندی کرد تا توسط Dolby تعریف شود. داشتن یک قاب CSD الزامی است.
اقدامات دالبی
- بسته بندی واحدهای دسترسی را برای طرح های مختلف کانتینر Dolby (مانند BL+EL+MD) برای رمزگشای انتزاعی Dolby (یعنی فرمت بافر مورد انتظار رمزگشای HDR) تعریف کنید.
- بسته بندی CSD را برای رمزگشای انتزاعی Dolby تعریف کنید.
اقدامات فروشنده
- استخراج کننده Dolby را اجرا کنید. این کار توسط Dolby نیز قابل انجام است.
- DolbyExtractor را در چارچوب ادغام کنید. نقطه ورود
frameworks/av/media/libstagefright/MediaExtractor.cpp
است. - مشخصات رسیور HDR و نوع سطح OMX را اعلام کنید. مثال:
OMX_VIDEO_DOLBYPROFILETYPE
وOMX_VIDEO_DOLBYLEVELTYP
. - اجرای پشتیبانی برای ایندکس:
'OMX.google.android.index.describeColorAspects
' - فراداده دینامیک HDR را در برنامه و سطح در هر فریم منتشر کنید. معمولاً این اطلاعات باید در قاب رمزگشایی شده بسته بندی شوند که توسط Dolby تعریف شده است، زیرا استاندارد HDMI راهی برای ارسال آن به نمایشگر ارائه نمی دهد.
خط لوله رمزگشا VP9
بیتاستریمهای VP9 در کانتینرهای WebM به روشی که توسط تیم WebM تعریف شده است، بستهبندی میشوند. برنامه ها باید از استخراج کننده WebM برای استخراج ابرداده های HDR از جریان بیت قبل از ارسال فریم ها به رمزگشا استفاده کنند.
- WebM Extractor:
- WebM Extractor فراداده ها و فریم های HDR را از ظرف استخراج می کند.
- رسیور VP9:
- رسیور بیتاستریمهای Profile2 را دریافت میکند و آنها را بهعنوان جریانهای معمولی VP9 رمزگشایی میکند.
- رمزگشا هر ابرداده استاتیک HDR را از چارچوب دریافت می کند.
- رسیور ابرداده ایستا را از طریق واحدهای دسترسی بیت استریم برای جریان های VP9 PQ دریافت می کند.
- رمزگشا VP9 باید بتواند متادیتای استاتیک/دینامیک HDR را به نمایشگر منتشر کند.
اقدامات فروشنده
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeHDRColorInfo
- اجرای پشتیبانی برای index:
OMX.google.android.index.describeColorAspects
- فراداده استاتیک HDR را منتشر کنید