جریان خروجی، برش، و زوم

جریان‌های خروجی

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

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

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

برداشت

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

این ناحیه به صورت مستطیلی (x، y، عرض، ارتفاع) تعریف می‌شود که (x، y) گوشه بالا سمت چپ مستطیل را توصیف می‌کند. مستطیل روی سیستم مختصات آرایه پیکسل فعال حسگر تعریف می‌شود و (0،0) پیکسل بالا سمت چپ آرایه پیکسل فعال است. بنابراین، عرض و ارتفاع نمی‌توانند بزرگتر از ابعاد گزارش شده در فیلد اطلاعات استاتیک 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۷۲۰ (نسبت تصویر ۱۶:۹)، در زیر نواحی خروجی مورد انتظار برای هر جریان برای چند ناحیه برش نمونه، روی یک حسگر فرضی ۳ مگاپیکسلی (آرایه ۲۰۰۰ در ۱۵۰۰ پیکسل) نشان داده شده است.

ناحیه برش: (500، 375، 1000، 750) (نسبت ابعاد 4:3)
کراپ استریم ۶۴۰x۴۸۰: (۵۰۰، ۳۷۵، ۱۰۰۰، ۷۵۰) (برابر با ناحیه کراپ)
برش استریم ۱۲۸۰x۷۲۰: (۵۰۰، ۴۶۹، ۱۰۰۰، ۵۶۲)

نسبت-منطقه-کشت-۴۳

شکل ۱. نسبت تصویر ۴:۳

ناحیه برش: (500، 375، 1333، 750) (نسبت تصویر 16:9)
برش استریم 640x480: (666، 375، 1000، 750)
برش استریم ۱۲۸۰x۷۲۰: (۵۰۰، ۳۷۵، ۱۳۳۳، ۷۵۰) (برابر با برش ناحیه)

نسبت-منطقه-کشت-۱۶۹

شکل ۲. نسبت تصویر ۱۶:۹

ناحیه برش: (500، 375، 750، 750) (نسبت ابعاد 1:1)
برش استریم 640x480: (500، 469، 750، 562)
برش استریم ۱۲۸۰x۷۲۰: (۵۰۰، ۵۴۳، ۷۵۰، ۴۱۴)

نسبت-منطقه-محصول-۱۱

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

و مثال آخر، یک استریم با نسبت تصویر مربعی ۱۰۲۴x۱۰۲۴ به جای استریم ۴۸۰p:
ناحیه برش: (500، 375، 1000، 750) (نسبت ابعاد 4:3)
کراپ استریم 1024x1024: (625، 375، 750، 750)
برش استریم ۱۲۸۰x۷۲۰: (۵۰۰، ۴۶۹، ۱۰۰۰، ۵۶۲)

نسبت مربع ۴۳-منطقه کشت

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

بازفرآوری

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

بزرگنمایی

برای دستگاه‌هایی که اندروید ۱۱ یا بالاتر دارند، یک برنامه می‌تواند از طریق تنظیم 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 قابلیت را ندارد.

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

نسبت بزرگنمایی: ۲.۰؛ ۱/۴ میدان دید اصلی
ناحیه برش: (0، 0، 2000، 1500) (نسبت ابعاد 4:3)
برش استریم 640x480: (0، 0، 2000، 1500) (برابر با برش ناحیه)
برش استریم 1280x720: (0، 187، 2000، 1125)

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

شکل ۵. زوم ۲.۰، نسبت تصویر ۴:۳

نسبت بزرگنمایی: ۲.۰؛ ۱/۴ میدان دید اصلی
ناحیه برش: (0، 187، 2000، 1125) (نسبت تصویر 16:9)
کراپ استریم 640x480: (250، 187، 1500، 1125) (ستون‌بندی شده)
برش استریم 1280x720: (0، 187، 2000، 1125) (برابر با برش ناحیه)

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

شکل ۶. زوم ۲.۰، نسبت تصویر ۱۶:۹

نسبت زوم: ۰.۵؛ ۴ برابر میدان دید اصلی (از لنز واید به لنز فوق واید تغییر یافته است)
ناحیه برش: (250، 0، 1500، 1500) (نسبت ابعاد 1:1)
کراپ استریم 640x480: (250، 187، 1500، 1125) (با حروف بزرگ)
برش استریم 1280x720: (250، 328، 1500، 844) (با حروف بزرگ)

تصاویر/نسبت-بزرگنمایی-0.5-برش-11

شکل ۷. بزرگنمایی ۰.۵، نسبت تصویر ۱:۱

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

با استفاده از همان مثال فرضی بالا، و با فرض اینکه جریان خروجی شماره ۱ (۶۴۰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 تنظیم کند.