جاری‌سازی‌های برونداد، برش، و بزرگ‌نمایی

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

جریان‌های برونداد

زیرسیستم دوربین فقط در خط لوله مبتنی بر ANativeWindow برای همه وضوح‌ها و قالب‌های خروجی کار می‌کند. جاری‌سازی‌های متعدد را می‌توان در یک زمان پیکربندی کرد تا یک قاب را به اهداف زیادی مثل GPU، کدبند ویدیو، RenderScript، یا میان‌گیرهای نمایان برای برنامه (میان‌گیرهای RAW Bayer، میان‌گیرهای YUV پردازش‌شده، یا میان‌گیرهای کدبندی‌شده با JPEG) ارسال کند.

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

برای کسب اطلاعات بیشتر درباره ترکیب‌های خروجی جاری‌سازی تضمین‌شده که به سطح سخت‌افزار پشتیبانی‌شده بستگی دارد، به createCaptureSession مراجعه کنید.

درحال برش دادن

برش آرایه کامل پیکسل (برای بزرگ‌نمایی دیجیتال و سایر موارد استفاده که در آن میدان دید کوچک‌تر مطلوب است) ازطریق تنظیم ANDROID_SCALER_CROP_REGION منتقل می‌شود. این تنظیم برای هر درخواست است و می‌تواند براساس هر درخواست تغییر کند، که برای پیاده‌سازی زوم دیجیتال روان بسیار مهم است.

منطقه به‌صورت مستطیل (x،‏ y، عرض، ارتفاع) تعریف می‌شود، که (x،‏ y) گوشه بالا سمت چپ مستطیل را توصیف می‌کند. این مستطیل در سیستم مختصات آرایه پیکسل فعال حسگر تعریف شده است، به‌طوری‌که (۰،۰) پیکسل بالا سمت چپ آرایه پیکسل فعال است. بنابراین، عرض و ارتفاع نمی‌تواند بزرگ‌تر از ابعاد گزارش‌شده در فیلد اطلاعات ثابت ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY باشد. حداقل عرض و ارتفاع مجاز توسط HAL ازطریق فیلد اطلاعات ایستا ANDROID_SCALER_MAX_DIGITAL_ZOOM گزارش می‌شود که حداکثر ضریب بزرگ‌نمایی پشتیبانی‌شده را توصیف می‌کند. بنابراین، حداقل عرض و ارتفاع ناحیه برش عبارت‌اند از:

  {width, height} =
   { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM),
     floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM) }

اگر منطقه برش باید الزامات خاصی را برآورده کند (برای مثال، باید از مختصات زوج شروع شود و عرض/ارتفاع آن باید زوج باشد)، HAL باید گرد کردن لازم را انجام دهد و منطقه برش نهایی استفاده‌شده را در فراداده نتیجه خروجی بنویسد. به‌طور مشابه، اگر HAL تثبیت ویدیو را پیاده‌سازی کند، باید ناحیه برش نتیجه را تنظیم کند تا ناحیه‌ای را که واقعاً در خروجی پس‌از اعمال تثبیت ویدیو گنجانده شده است توصیف کند. به‌طور کلی، برنامه‌ای که از دوربین استفاده می‌کند باید بتواند میدان دیدی را که دریافت می‌کند براساس منطقه برش، ابعاد حسگر تصویر، و فاصله کانونی لنز تعیین کند.

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

در همه موارد، برش جاری‌سازی باید در مرکز کل ناحیه برش باشد، و هر جاری‌سازی فقط به‌صورت افقی یا عمودی نسبت‌به کل ناحیه برش برش داده می‌شود، نه هر دو.

برای مثال، اگر دو جاری‌سازی تعریف شده باشد، یک جاری‌سازی ۶۴۰×۴۸۰ (نسبت ۴:۳) و یک جاری‌سازی ۱۲۸۰×۷۲۰ (نسبت ۱۶:۹)، در زیر ناحیه‌های خروجی موردانتظار برای هر جاری‌سازی برای چند ناحیه برش نمونه در یک حسگر فرضی ۳ مگاپیکسلی (آرایه ۲۰۰۰ × ۱۵۰۰ پیکسلی) نشان داده شده است.

منطقه برش: (۵۰۰، ۳۷۵، ۱۰۰۰، ۷۵۰) (نسبت ابعادی ۴:۳)
برش جاری‌سازی ۶۴۰x۴۸۰: (۵۰۰، ۳۷۵، ۱۰۰۰، ۷۵۰) (برابر با منطقه برش)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۵۰۰، ۴۶۹، ۱۰۰۰، ۵۶۲)

crop-region-43-ratio

شکل ۱. نسبت ابعادی ۴:۳

منطقه برش: (۵۰۰، ۳۷۵، ۱۳۳۳، ۷۵۰) (نسبت ابعادی ۱۶:۹)
برش جاری‌سازی ۶۴۰x۴۸۰: (۶۶۶، ۳۷۵، ۱۰۰۰، ۷۵۰)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۵۰۰، ۳۷۵، ۱۳۳۳، ۷۵۰) (برابر با منطقه برش)

crop-region-169-ratio

شکل ۲. نسبت ابعادی ۱۶:۹

ناحیه برش: (۵۰۰، ۳۷۵، ۷۵۰، ۷۵۰) (نسبت ابعادی ۱:۱)
برش جاری‌سازی ۶۴۰x۴۸۰: (۵۰۰، ۴۶۹، ۷۵۰، ۵۶۲)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۵۰۰، ۵۴۳، ۷۵۰، ۴۱۴)

crop-region-11-ratio

شکل ۳. نسبت ابعادی ۱:۱

و مثال آخر، جاری‌سازی با نسبت ابعادی مربعی ۱۰۲۴x۱۰۲۴ به‌جای جاری‌سازی ۴۸۰p:
ناحیه برش: (۵۰۰، ۳۷۵، ۱۰۰۰، ۷۵۰) (نسبت ابعادی ۴:۳)
برش جاری‌سازی ۱۰۲۴x۱۰۲۴: (۶۲۵، ۳۷۵، ۷۵۰، ۷۵۰)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۵۰۰، ۴۶۹، ۱۰۰۰، ۵۶۲)

crop-region-43-square-ratio

شکل ۴. نسبت ابعادی ۴:۳، مربعی

درحال پردازش مجدد

پشتیبانی بیشتر برای فایل‌های تصویری خام با پشتیبانی از پردازش مجدد برای داده‌های RAW Bayer ارائه می‌شود. این پشتیبانی به خط لوله دوربین اجازه می‌دهد تا یک بافر RAW و فراداده قبلاً ضبط‌شده (یک فریم کامل که قبلاً ضبط شده است) را پردازش کند تا یک خروجی جدید YUV یا JPEG رندرشده تولید کند.

بزرگ‌نمایی

برای دستگاه‌های دارای Android 11 یا بالاتر، برنامه می‌تواند ازطریق تنظیم ANDROID_CONTROL_ZOOM_RATIO از زوم دوربین (دیجیتال و اپتیکال) استفاده کند.

نسبت بزرگ‌نمایی به‌عنوان عامل نقطه شناور تعریف می‌شود. به‌جای استفاده از ANDROID_SCALER_CROP_REGION برای برش و بزرگ‌نمایی، برنامه می‌تواند از ANDROID_CONTROL_ZOOM_RATIO برای کنترل سطح بزرگ‌نمایی استفاده کند و از ANDROID_SCALER_CROP_REGION برای برش افقی و عمودی استفاده کند تا نسبت‌های ابعادی متفاوت از حسگر دوربین اصلی را به‌دست آورد.

سیستم چنددوربینی ممکن است بیش‌از یک لنز با فاصله‌های کانونی مختلف داشته باشد و کاربر می‌تواند با جابه‌جایی بین لنزها از زوم اپتیکال استفاده کند. استفاده از ANDROID_CONTROL_ZOOM_RATIO در سناریوهای زیر مزایایی دارد:

  • زوم‌پیش کردن از لنز عریض به لنز تله‌فوتو: نسبت ممیز شناور درمقایسه با مقادیر عدد صحیح ANDROID_SCALER_CROP_REGION دقت بهتری ارائه می‌دهد.
  • کوچک‌نمایی از لنز عریض به لنز زاویه بسیار باز: ANDROID_CONTROL_ZOOM_RATIO از کوچک‌نمایی (<1.0f) پشتیبانی می‌کند اما ANDROID_SCALER_CROP_REGION پشتیبانی نمی‌کند.

برای نشان دادن، در اینجا چند سناریو از نسبت‌های زوم مختلف، مناطق برش، و جاری‌سازی‌های برونداد بااستفاده از همان دوربین فرضی تعریف‌شده در بخش قبلی آورده شده است.

نسبت بزرگ‌نمایی: ۲.۰؛ ۱/۴ میدان دید اصلی
منطقه برش: (۰، ۰، ۲۰۰۰، ۱۵۰۰) (نسبت ابعادی ۴:۳)
برش جاری‌سازی ۶۴۰x۴۸۰: (۰، ۰، ۲۰۰۰، ۱۵۰۰) (برابر با منطقه برش)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۰، ۱۸۷، ۲۰۰۰، ۱۱۲۵)

نسبت بزرگ‌نمایی-۲-برش-۴۳

شکل ۵. بزرگ‌نمایی ۲٫۰، نسبت ابعادی ۴:۳

نسبت بزرگ‌نمایی: ۲٫۰؛ ۱/۴ میدان دید اصلی
منطقه برش: (۰، ۱۸۷، ۲۰۰۰، ۱۱۲۵) (نسبت ابعادی ۱۶:۹)
برش جاری‌سازی ۶۴۰x۴۸۰: (۲۵۰، ۱۸۷، ۱۵۰۰، ۱۱۲۵) (ستون‌بندی‌شده)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۰، ۱۸۷، ۲۰۰۰، ۱۱۲۵) (برابر با منطقه برش)

نسبت بزرگ‌نمایی ۲-برش ۱۶۹

شکل ۶. بزرگ‌نمایی ۲٫۰، نسبت ابعادی ۱۶:۹

نسبت بزرگ‌نمایی: ۰٫۵؛ ۴ برابر میدان دید اصلی (از لنز عریض به لنز فوق‌عریض تغییر کرد)
ناحیه برش: (۲۵۰، ۰، ۱۵۰۰، ۱۵۰۰) (نسبت ابعادی ۱:۱)
برش جاری‌سازی ۶۴۰x۴۸۰: (۲۵۰، ۱۸۷، ۱۵۰۰، ۱۱۲۵) (حاشیه‌دار)
برش جاری‌سازی ۱۲۸۰x۷۲۰: (۲۵۰، ۳۲۸، ۱۵۰۰، ۸۴۴) (حاشیه‌دار)

images/zoom-ratio-0.5-crop-11

شکل ۷. بزرگ‌نمایی ۰٫۵، نسبت ابعادی ۱:۱

همان‌طور که در نمودارهای بالا دیده می‌شود، سیستم مختصات ناحیه برش به میدان دید مؤثر پس‌از بزرگ‌نمایی تغییر می‌کند و با مستطیلی با ابعاد زیر نشان داده می‌شود: (0، 0، activeArrayWith، activeArrayHeight). همین امر برای نواحی و چهره‌های AE/AWB/AF نیز اعمال می‌شود. این تغییر سیستم مختصات بر ضبط RAW و فراداده‌های مربوط به آن مثل intrinsicCalibration و lensShadingMap اعمال نمی‌شود.

بااستفاده از همان مثال فرضی بالا، و با فرض اینکه جاری‌سازی برونداد شماره ۱ (۶۴۰x۴۸۰) جاری‌سازی نمایاب باشد، بزرگ‌نمایی ۲.۰x را می‌توان به یکی از دو روش زیر انجام داد:

  • zoomRatio = 2.0، scaler.cropRegion = (0, 0, 2000, 1500)
  • ‫zoomRatio = 1.0 (پیش‌فرض)، scaler.cropRegion = (500, 375, 1000, 750)

برای اینکه برنامه‌ای android.control.aeRegions را به‌عنوان یک‌چهارم نمایاب در بالا سمت راست میدان دید تنظیم کند، android.control.aeRegions را روی (0, 0, 1000, 750) تنظیم کنید و android.control.zoomRatio را روی 2.0 تنظیم کنید. یا اینکه برنامه می‌تواند android.control.aeRegions را روی منطقه معادل (500, 375, 1000, 750) برای android.control.zoomRatio از 1.0 تنظیم کند.