HDR در اسکرین شات های اندروید

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

پشتیبانی اندروید از HDR

اندروید از فناوری HDR در چندین مرحله مهم پشتیبانی کرده است:

اندروید ۷

  • پشتیبانی اولیه از رمزگشایی و نمایش ویدیوی HDR.
  • پیشرفت‌های مداوم در قابلیت‌های HDR.

اندروید ۱۳

  • پشتیبانی کامل از ضبط، رمزگذاری و نمایش ویدئوی HDR.
  • ترکیب ترکیبی SDR و HDR معرفی شد که محدوده‌های روشنایی قابل نمایش مختلف بین SDR و HDR را تعریف می‌کند.

اندروید ۱۴

  • پشتیبانی از تصاویر HDR با Ultra HDR

پشتیبانی از اسکرین شات HDR نیز تکامل یافته و تغییر کرده است.

پیشرفت در قابلیت‌های اسکرین‌شات HDR

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

اندروید ۹

SurfaceFlinger، آهنگساز گرافیکی اندروید، پشتیبانی از ویدیوی HDR را معرفی می‌کند. رندر GPU ویدیوها و اسکرین‌شات‌های HDR از یک نگاشت‌کننده‌ی تنالیته‌ی چندجمله‌ای پیچیده استفاده می‌کند. این منحنی نگاشت تنالیته همیشه معادل نگاشت‌کننده‌ی تنالیته‌ی نمایشگر نیست، بنابراین اسکرین‌شات‌ها با محتوای روی صفحه متفاوت هستند.

اندروید ۱۳

بلوک رندرینگ GPU در SurfaceFlinger شامل یک افزونه‌ی نگاشت تُن است که به تولیدکنندگان اصلی تجهیزات (OEM) اجازه می‌دهد یک سایه‌زن GPU برای مطابقت با منحنی نگاشت تُن نمایشگر خود ارائه دهند. تصاویر تقریباً با محتوای روی صفحه مطابقت دارند، اما با تفاوت‌های زیر:

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

به عبارت دیگر، این سیستم هر ویدیوی HDR ضبط شده در اسکرین شات را به ویدیوی SDR تبدیل می‌کند.

اندروید ۱۴

HDR فوق العاده چالش قابل توجهی را برای گرفتن اسکرین شات ایجاد می‌کند. برخلاف ویدیوها، سیستم معمولاً تصاویر را درون فریم بافر رابط کاربری رندر می‌کند که دو پیامد اصلی دارد:

  • تصاویر نمی‌توانند پردازش تصویری، از جمله نگاشت تُن (tonemapping)، داشته باشند که با رابط کاربری اطراف متفاوت باشد.
  • برنامه‌ها هنگام رندر کردن رابط کاربری خود، مسئول نگاشت تُن مبتنی بر منبع هستند.

برای کاهش این چالش، سه پیاده‌سازی بالقوه برای گرفتن اسکرین‌شات را در نظر بگیرید:

  • جزئیات HDR یک تصویر Ultra HDR را حفظ می‌کند، که منجر به تیره شدن رابط کاربری برنامه در تصویر صفحه می‌شود.
  • جزئیات رابط کاربری برنامه را حفظ کنید، که باعث قطع شدن تصویر Ultra HDR می‌شود.
  • با روشن‌تر کردن رابط کاربری برنامه هنگام حذف هایلایت‌های HDR، کمی سازش کنید.

اندروید ۱۴ رویکرد سوم یعنی روشن‌تر کردن رابط کاربری برنامه و حذف هایلایت‌های HDR را پیاده‌سازی می‌کند.

اندروید ۱۵-QPR1

SurfaceFlinger شامل یک الگوریتم نگاشت تُن محلی برای اسکرین‌شات‌ها است. این فرآیند شامل موارد زیر است:

  • تقسیم تصویر ورودی به تصاویر کوچکتر.
  • محاسبه حداکثر روشنایی در هر تصویر و حذف مقادیر روشنایی پایین در هر بخش.
  • درون‌یابی روشنایی‌های محاسبه‌شده از طریق تار کردن و نمونه‌برداری مجدد.
  • اعمال یک نگاشت‌دهنده‌ی تون پارامتری Reinhard به تصویر ورودی، بر اساس مقادیر روشنایی درون‌یابی شده.

این الگوریتم به طور قابل توجهی اسکرین‌شات‌ها را بین اندروید ۱۴ و اندروید ۱۵-QPR1 بهبود می‌بخشد، همانطور که مثال‌های زیر نشان می‌دهند:

  • مثال ۱، اسکرین‌شاتی از یک ویدیوی HDR است که روی صفحه‌ای از کروم حاوی Ultra HDR قرار گرفته است. رنگ‌های رابط کاربری در پیاده‌سازی جدید عمدتاً حفظ شده‌اند و تصویر دیگر برش داده نمی‌شود.

    اندروید ۱۴ اندروید ۱۵-QPR1
    مثال ۱ در اندروید ۱۴مثال ۱ در اندروید ۱۵qpr

    شکل ۱. مقایسه اندروید ۱۴ و اندروید ۱۵-QPR1 برای مثال ۱.

  • مثال ۲، اسکرین‌شاتی از یک ویدیوی HDR است که در بالای تنظیمات و اسکرین‌شات‌های بعدی قرار گرفته است. در اندروید ۱۴، رنگ‌های اسکرین‌شات به ترتیب تیره‌تر هستند. در اندروید ۱۵-QPR1، ابزار tonemapper به درستی رنگ‌های رابط کاربری را تکرار و حفظ می‌کند.

    اندروید ۱۴ اندروید ۱۵-QPR1
    مثال ۲ در اندروید ۱۴مثال ۲ در اندروید ۱۵qpr

    شکل ۲. مقایسه اندروید ۱۴ و اندروید ۱۵-QPR1 برای مثال ۲.

اندروید ۱۶

مشابه Ultra HDR ، اسکرین‌شات‌های HDR یک gainmap در فایل اسکرین‌شات ذخیره می‌کنند تا نمایش HDR را در طول رندر بازیابی کنند. با این حال، برخلاف Ultra HDR، اسکرین‌شات در قالب PNG باقی می‌ماند تا با سیستم‌هایی که اسکرین‌شات‌های PNG را دریافت می‌کنند، سازگاری داشته باشد.

تولید اسکرین شات شامل موارد زیر است:

  • وقتی محتوای HDR روی دستگاه نمایش داده می‌شود، یک اسکرین‌شات با استفاده از پیکسل‌های FP16 ایجاد می‌شود.
  • نگاشت‌کننده‌ی تُن محلی که در اندروید ۱۵-QPR1 شرح داده شده است، یک رندر SDR پایه‌ی ۸ بیتی تولید می‌کند.
  • یک gainmap هشت بیتی با ترکیب رندرینگ پایه SDR با رندرینگ HDR تولید می‌شود.
  • رندر پایه SDR و گین‌مپ در یک فایل PNG واحد کدگذاری می‌شوند.

رمزگذاری PNG شامل موارد زیر است:

  • نقشه‌ی بهره به صورت یک تصویر PNG کدگذاری می‌شود که شامل یک تکه gmAP است که حاوی فراداده‌ی ISO 21496-1 برای نقشه‌ی بهره می‌باشد.
  • تصویر پایه SDR به صورت یک تصویر PNG کدگذاری می‌شود که شامل یک تکه gmAP است که حاوی نسخه فراداده ISO 21496-1 می‌باشد. این تصویر PNG همچنین شامل یک تکه gdAT است که حاوی کل PNG کدگذاری شده gainmap می‌باشد.

شکل زیر طرح‌بندی بخش‌های PNG را نشان می‌دهد:

Layout of the PNG chunks

شکل ۳. طرح‌بندی قطعات PNG.

در اندروید ۱۶، کدک PNG از رمزگذاری و رمزگشایی این PNGها پشتیبانی می‌کند. برنامه‌ها می‌توانند یک PNG را با gainmap به همان روشی که Ultra HDR نمایش می‌دهد، نمایش دهند.