הגברת התאורה החלשה

ב-Android 15 אנחנו משיקים את Low Light Boost, מצב חשיפה אוטומטית חדש שזמין עבור גם מצלמה 2 וגם תוסף מצלמה למצב לילה. הגברת התאורה החלשה ההגדרה הזו מתאימה אוטומטית את הבהירות של התצוגה המקדימה באור חלש את התנאים וההגבלות. השיטה הזו שונה מהאופן שבו תוסף המצלמה של מצב לילה יוצר תמונות סטילס, מכיוון שמצב לילה משלב רצף של תמונות ויוצר תמונה אחת, תמונה משופרת. מצב לילה מתאים מאוד ליצירת תמונת סטילס, לא ניתן ליצור רצף פריימים רציף, אבל 'הגברת התאורה הנמוכה' כן יכולה. כך, הפיצ'ר 'הגברת אור תאורה חלשה' מאפשר יכולות חדשות של המצלמה, כמו:

  • לספק תצוגה מקדימה משופרת של התמונה, כדי שהמשתמשים יוכלו למסגר את התמונה בצורה טובה יותר תמונות בתאורה חלשה.
  • סורק קודי QR בתאורה חלשה.

אם מפעילים את התכונה 'הגברת תאורה חלשה', היא מופעלת באופן אוטומטי כשיש רמה נמוכה עוצמת התאורה והוא ייכבה כשיש יותר אור.

אפליקציות יכולות להקליט את הסטרימינג של התצוגה המקדימה בתנאים של תאורה חלשה, סרטון בגוונים בהירים.

אפשר להשתמש בתכונה 'הגברת תאורה חלשה' באמצעות מצלמה2 או באמצעות תוספי מצלמה. במסמך הזה מוסבר איך להשתמש בתכונה 'הגברת תאורה חלשה' עם Camera2. אפשר גם להשתמש הגברת תאורה חלשה עם תוסף המצלמה של מצב לילה, אם הוא נתמך על ידי במכשיר.

בדיקת זמינות

לפני שמשתמשים בתכונה 'הגברת תאורה חלשה', צריך לוודא שהיא נתמכת במכשיר. אם זה 'הגברת אור נמוכה' היא אחד ממצבי החשיפה שמפורטים camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (תאורה חלשה 'הגברת החשיפה' היא הגדרת החשיפה האוטומטית של עצמה, מפני שהגדרות חשיפה אוטומטית אחרות לא תואמות להבהרת התצוגה המקדימה שמבוצעת על ידי 'הגברת תאורה חלשה'.)

לכן, כדי לבדוק אם התכונה 'הגברת תאורה חלשה' זמינה, התקשרו CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) ובודקים אם המצבים שהוחזרו כוללים את ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY:

Kotlin

val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!!
val lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY)

if (lowLightBoostSupported) {
  // Enable Low Light Boost (next section)
} else {
  // Proceed without Low Light Boost
}

Java

CameraCharacteristics characteristics =
    mCameraManager.getCameraCharacteristics(cameraId);
int[] autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES);
boolean lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);

if (lowLightBoostSupported) {
  // Enable Low Light Boost (next section)
} else {
  // Proceed without Low Light Boost
}

הפעלת 'הגברת התאורה החלשה'

כדי להפעיל את 'הגברת תאורה חלשה' בסשן של Camera2, צריך להגדיר CaptureRequest.CONTROL_AE_MODE עד ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY לאחר מכן צריך מוודאים שהתכונה 'שיפור התאורה החלשה' הופעלה. אפשר לעשות את זה על ידי בדיקת CaptureResult.CONTROL_AE_MODE. צריך לבדוק אם התאורה חלשה התכונה 'שיפור האיכות' לא תואמת לכל הגדרות המצלמה. לדוגמה, מהירות גבוהה ההקלטה לא תומכת בהגברת התאורה הנמוכה, בגלל שיקולים שקשורים ל-FPS. אם המיקום התכונה 'הגברת התאורה החלשה' לא פועלת. יכול להיות שצריך להחליף את המצלמה ולנסות שוב.

Kotlin

val captureRequestBuilder = camera.createCaptureRequest(
  CameraDevice.TEMPLATE_PREVIEW)
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
  )
}
// other capture request params

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // verify Low Light Boost AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
    }
  },
  cameraHandler
)

Java

CaptureRequest.Builder captureRequestBuilder =
  mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);
}
// other capture request params

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // verify Low Light Boost AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;
    }
  },
  mCameraHandler
);

מעקב אחר הגברת התאורה החלשה

'הגברת אור חלש' מבהירה את שידור התצוגה המקדימה בתנאים של תאורה חלשה. אין כל השפעה אם הסביבה כבר בהירה מספיק לטמפרטורה רגילה וצילום. כדי לוודא שהתכונה 'שיפור התאורה החלשה' פעילה כרגע, אפשר לבדוק השדה CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. אם הפעלתם התכונה 'הגברת תאורה חלשה' מופעלת והיא פועלת כרגע, השדה מוגדר לערך CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. לאחר מכן ייתכן שיוצג סמל הירח או סימן אחר לכך שהתצוגה המקדימה בהירה יותר.

Kotlin

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // check if Low Light Boost is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // Hide Moon Icon
      }
    }
  },
  cameraHandler
)

Java

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // check if Low Light Boost is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // Hide Moon Icon
      }
    }
  },
  mCameraHandler
);