از جلسه تقویت نور کم استفاده کنید، از جلسه تقویت نور کم استفاده کنید

از جلسه تقویت نور کم برای روشن و خاموش کردن Google Low Light Boost استفاده کنید.

کاتلین

dependencies {
  val low_light_boost_version = "16.0.0-beta01"
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
  implementation("com.google.android.gms:play-services-base:18.7.0")
  implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
  implementation("com.google.android.gms:play-services-tasks:18.3.0")
}

شیار

dependencies {
  def low_light_boost_version = "16.0.0-beta01"
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
  implementation 'com.google.android.gms:play-services-base:18.7.0'
  implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
  implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}

LowLightBoostSession توسط بسته خدمات Google Play com.google.android.gms.cameralowlight ارائه شده است. برای اطلاعات در مورد دسترسی به APIهای خدمات Google Play، به مستندات خدمات Google Play مراجعه کنید.

یک شیء پاسخ به تماس ایجاد کنید

هنگامی که جلسه تقویت نور کم را ایجاد می کنید ، باید آن را به یک شی منتقل کنید که رابط LowLightBoostCallback را پیاده سازی می کند. توابع این شیء زمانی فراخوانی می شوند که جلسه قطع یا از بین برود. کد زیر نحوه ایجاد یک callback را نشان می دهد:

کاتلین

private fun createLowLightBoostCallback(): LowLightBoostCallback =
  object : LowLightBoostCallback() {
    override fun onSessionDestroyed() {
      Log.d(TAG, "onSessionDestroyed")
      lowLightBoostSession = null
    }

    override fun onSessionDisconnected(statusCode: Int) {
      Log.d(TAG, "onSessionDisconnected: error=$statusCode")
      lowLightBoostSession = null
    }
  }

جاوا

private LowLightBoostCallback createLowLightBoostCallback() {
  LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
    @Override
    public void onSessionDestroyed() {
      Log.d(TAG, "onSessionDestroyed");
      lowLightBoostSession = null;
    }

    @Override
    public void onSessionDisconnected(int statusCode) {
      Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
      lowLightBoostSession = null;
    }
  }
  return lowLightBoostCallback;
}

نکات کلیدی در مورد این کد

  • این کد یک متد خصوصی createLowLightBoostCallback() را تعریف می کند که شیء برگشت را ایجاد می کند. همانطور که در Create a session توضیح داده شد، زمانی که واقعاً جلسه تقویت نور کم را ایجاد می کنید، آن روش را فراخوانی می کنید.
  • تماس برگشتی زمانی فراخوانی می شود که جلسه قطع شود یا از بین برود. هنگامی که جلسه ایجاد می شود، فراخوانی نمی شود. برای بررسی اینکه آیا جلسه با موفقیت ایجاد شده است، شی Task را که توسط LowLightBoostClient.createSession برگردانده شده است را بررسی کنید.

یک جلسه ایجاد کنید

برای ایجاد یک جلسه با نور کم، روش LowLightBoostClient.createSession را فراخوانی کنید.

کاتلین

val options = LowLightBoostOptions(
  previewSurface,
  cameraId,
  previewWidth,
  previewHeight,
  enableLowLightBoost
)

launch {
  try {
    val lowLightBoostSession = lowLightBoostClient
      .createSession(options, createLowLightBoostCallback()).await()

    Log.d(TAG, "Session created successfully")

    // Get the surface from the LLB session;
    // give it to camera so camera can write frames to it
  } catch (e: CancellationException) {
    Log.w(TAG, "Session creation was canceled", e)
    lowLightBoostSession = null
  } catch (e: ApiException) {
    Log.e(TAG, "Session creation failed with ApiException:", e)
    lowLightBoostSession = null
  } catch (e: Exception) {
    Log.e(TAG, "Session creation failed with Exception", e)
    lowLightBoostSession = null
  }
}

جاوا

LowLightBoostOptions options = new LowLightBoostOptions(
  previewSurface,
  cameraId,
  previewWidth,
  previewHeight,
  enableLowLightBoost);

lowLightBoostClient
  .createSession(options, createLowLightBoostCallback())
  .addOnSuccessListener(
    lowLightBoostExecutor,
    (session) -> {
      Log.d(TAG, "Session created successfully");

      // Get the surface from the LLB session;
      // give it to camera so camera can write frames to it

    })
  .addOnFailureListener(
    lowLightBoostExecutor,
    (e) -> {
      ApiException apiException = (ApiException) e;
      Log.d(TAG, "Session creation failed: " + e);
      lowLightBoostSession = null;
    })
  .addOnCompleteListener(
    lowLightBoostExecutor,
    (task) -> Log.d(TAG, "Session creation complete"))
  .addOnCanceledListener(
    lowLightBoostExecutor,
    () -> {
      throw new RuntimeException("Session creation canceled");
    });

نکات کلیدی در مورد این کد

  • برای پیکربندی جلسه، یک شی LowLightBoostOptions را به createSession() می‌فرستید. این شی مواردی مانند سطح هدف ، شناسه دوربین مورد استفاده و ابعاد پیش‌نمایش را مشخص می‌کند.
  • این کد فرض می‌کند که شما قبلاً اتصالی به دوربین Camera2 باز کرده‌اید و از آن اطلاعات برای تنظیم مقادیر cameraId, previewWidth, previewHeight استفاده کرده‌اید. برای اطلاعات بیشتر، به مستندات Camera2 مراجعه کنید.
  • enableLowLightBoost یک مقدار بولی است که مشخص می کند تقویت نور کم باید روشن یا خاموش شود.
  • createLowLightBoostCallback روشی است که برای ایجاد شئ callback می نویسید. این شیء زمانی فراخوانی می شود که جلسه قطع یا از بین برود.
  • متد LowLightBoostClient.createSession() یک شی Task را برمی گرداند. شما از این شی برای تنظیم شنوندگان موفقیت و شکست استفاده می کنید. ویدیو را در داخل شنونده موفقیت ضبط کنید.
  • می توانید یک Executor برای اجرای شنوندگان مشخص کنید. اگر یک Executor مشخص نکنید، شنوندگان در رشته اصلی اجرا می شوند. در این کد، ما lowLightBoostExecutor را یک Executor مناسب فرض می کنیم.

پیش نمایش دوربین را شروع کنید

پس از ایجاد یک جلسه در نور کم، می توانید جریان پیش نمایش دوربین را شروع کنید. شما باید این کار را در داخل onSuccess() که به جلسه کم نور ارسال می کنید، همانطور که در Create a session توضیح داده شده است، انجام دهید. کد زیر نحوه فیلم برداری را نشان می دهد:

کاتلین

MainActivity.this.lowLightBoostSession =
  lowLightBoostSession
MainActivity.this.lowLightBoostSession
  .setSceneDetectorCallback(
    (lowLightBoostSession, boostStrength) -> {
      Log.d(TAG, "onSceneBrightnessChanged: " +
        "boostStrength=$boostStrength")
      // boostStrength > 0.5 indicates a low light scene.
      // Update UI accordingly.
    },
    lowLightBoostExecutor
  )
try {
  startCaptureSession(
    lowLightBoostSession.getCameraSurface())
    // Start a Camera2 session here. Pass the LLB surface
    // to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
  Log.e(TAG, "Failed to start capture session", e)
  // Must try again or start the capture session without LLB.
}

جاوا

MainActivity.this.lowLightBoostSession =
  lowLightBoostSession;
MainActivity.this.lowLightBoostSession
  .setSceneDetectorCallback(
    (lowLightBoostSession, boostStrength) -> {
      Log.d(TAG, "onSceneBrightnessChanged: " +
        "boostStrength=" + boostStrength);
      // boostStrength > 0.5 indicates a low light scene.
      // Update UI accordingly.
    },
    lowLightBoostExecutor
  );
try {
  startCaptureSession(
    lowLightBoostSession.getCameraSurface());
    // Start a Camera2 session here. Pass the LLB surface
    // to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
  Log.e(TAG, "Failed to start capture session", e);
  // Must try again or start the capture session without LLB.
}

نکات کلیدی در مورد این کد

  • lowLightBoostSession جلسه ای است که در ایجاد یک جلسه ایجاد کردید.
  • setSceneDetectorCallback() یک شئ callback را تعریف می کند که رابط SceneDetectorCallback پیاده سازی می کند. جلسه زمانی که روشنایی صحنه تغییر می کند، متد onSceneBrightnessChanged() آن شی را فراخوانی می کند. پیاده سازی شما باید رابط کاربری دوربین را به درستی تنظیم کند.
  • شما می توانید یک Executor را برای اجرای callback تعیین کنید. اگر یک Executor مشخص نکنید، تماس برگشتی در رشته اصلی اجرا می شود. در این کد، ما lowLightBoostExecutor را یک Executor مناسب فرض می کنیم.
  • lowLightBoostSession.getCameraSurface() Surface با ویدیوی گرفته شده برمی گرداند.

جلسه را آزاد کنید

وقتی دوربین دیگر فعال نیست، جلسه تقویت نور کم را با فراخوانی LowLightBoostSession.release() رها کنید. به ویژه، باید مطمئن شوید که وقتی فعالیت شما از بین رفت، جلسه را آزاد کنید. می توانید این کار را با فراخوانی متد موجود در متد onDestroy() اکتیویتی خود انجام دهید:

کاتلین

override protected void onDestroy() {
  super.onDestroy()
  if (lowLightBoostSession != null) {
    lowLightBoostSession.release()
    lowLightBoostSession = null
  }
}

جاوا

@Override
protected void onDestroy() {
  super.onDestroy();
  if (lowLightBoostSession != null) {
    lowLightBoostSession.release();
    lowLightBoostSession = null;
  }
}

نکات کلیدی در مورد این کد

  • پس از انتشار جلسه، نباید هیچ یک از متدهای آن را فراخوانی کنید. همانطور که این کد انجام می دهد، باید هر متغیری را که به جلسه اشاره می کند پاک کنید.
،

از جلسه تقویت نور کم برای روشن و خاموش کردن Google Low Light Boost استفاده کنید.

کاتلین

dependencies {
  val low_light_boost_version = "16.0.0-beta01"
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
  implementation("com.google.android.gms:play-services-base:18.7.0")
  implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
  implementation("com.google.android.gms:play-services-tasks:18.3.0")
}

شیار

dependencies {
  def low_light_boost_version = "16.0.0-beta01"
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
  implementation 'com.google.android.gms:play-services-base:18.7.0'
  implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
  implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}

LowLightBoostSession توسط بسته خدمات Google Play com.google.android.gms.cameralowlight ارائه شده است. برای اطلاعات در مورد دسترسی به APIهای خدمات Google Play، به مستندات خدمات Google Play مراجعه کنید.

یک شیء پاسخ به تماس ایجاد کنید

هنگامی که جلسه تقویت نور کم را ایجاد می کنید ، باید آن را به یک شی منتقل کنید که رابط LowLightBoostCallback را پیاده سازی می کند. توابع این شیء زمانی فراخوانی می شوند که جلسه قطع یا از بین برود. کد زیر نحوه ایجاد یک callback را نشان می دهد:

کاتلین

private fun createLowLightBoostCallback(): LowLightBoostCallback =
  object : LowLightBoostCallback() {
    override fun onSessionDestroyed() {
      Log.d(TAG, "onSessionDestroyed")
      lowLightBoostSession = null
    }

    override fun onSessionDisconnected(statusCode: Int) {
      Log.d(TAG, "onSessionDisconnected: error=$statusCode")
      lowLightBoostSession = null
    }
  }

جاوا

private LowLightBoostCallback createLowLightBoostCallback() {
  LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
    @Override
    public void onSessionDestroyed() {
      Log.d(TAG, "onSessionDestroyed");
      lowLightBoostSession = null;
    }

    @Override
    public void onSessionDisconnected(int statusCode) {
      Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
      lowLightBoostSession = null;
    }
  }
  return lowLightBoostCallback;
}

نکات کلیدی در مورد این کد

  • این کد یک متد خصوصی createLowLightBoostCallback() را تعریف می کند که شیء برگشت را ایجاد می کند. همانطور که در Create a session توضیح داده شد، زمانی که واقعاً جلسه تقویت نور کم را ایجاد می کنید، آن روش را فراخوانی می کنید.
  • تماس برگشتی زمانی فراخوانی می شود که جلسه قطع شود یا از بین برود. هنگام ایجاد جلسه، فراخوانی نمی شود. برای بررسی اینکه آیا جلسه با موفقیت ایجاد شده است، شی Task را که توسط LowLightBoostClient.createSession برگردانده شده است را بررسی کنید.

یک جلسه ایجاد کنید

برای ایجاد یک جلسه با نور کم، روش LowLightBoostClient.createSession را فراخوانی کنید.

کاتلین

val options = LowLightBoostOptions(
  previewSurface,
  cameraId,
  previewWidth,
  previewHeight,
  enableLowLightBoost
)

launch {
  try {
    val lowLightBoostSession = lowLightBoostClient
      .createSession(options, createLowLightBoostCallback()).await()

    Log.d(TAG, "Session created successfully")

    // Get the surface from the LLB session;
    // give it to camera so camera can write frames to it
  } catch (e: CancellationException) {
    Log.w(TAG, "Session creation was canceled", e)
    lowLightBoostSession = null
  } catch (e: ApiException) {
    Log.e(TAG, "Session creation failed with ApiException:", e)
    lowLightBoostSession = null
  } catch (e: Exception) {
    Log.e(TAG, "Session creation failed with Exception", e)
    lowLightBoostSession = null
  }
}

جاوا

LowLightBoostOptions options = new LowLightBoostOptions(
  previewSurface,
  cameraId,
  previewWidth,
  previewHeight,
  enableLowLightBoost);

lowLightBoostClient
  .createSession(options, createLowLightBoostCallback())
  .addOnSuccessListener(
    lowLightBoostExecutor,
    (session) -> {
      Log.d(TAG, "Session created successfully");

      // Get the surface from the LLB session;
      // give it to camera so camera can write frames to it

    })
  .addOnFailureListener(
    lowLightBoostExecutor,
    (e) -> {
      ApiException apiException = (ApiException) e;
      Log.d(TAG, "Session creation failed: " + e);
      lowLightBoostSession = null;
    })
  .addOnCompleteListener(
    lowLightBoostExecutor,
    (task) -> Log.d(TAG, "Session creation complete"))
  .addOnCanceledListener(
    lowLightBoostExecutor,
    () -> {
      throw new RuntimeException("Session creation canceled");
    });

نکات کلیدی در مورد این کد

  • برای پیکربندی جلسه، یک شی LowLightBoostOptions را به createSession() می‌فرستید. این شی مواردی مانند سطح هدف ، شناسه دوربین مورد استفاده و ابعاد پیش‌نمایش را مشخص می‌کند.
  • این کد فرض می‌کند که شما قبلاً اتصالی به دوربین Camera2 باز کرده‌اید و از آن اطلاعات برای تنظیم مقادیر cameraId, previewWidth, previewHeight استفاده کرده‌اید. برای اطلاعات بیشتر، به مستندات Camera2 مراجعه کنید.
  • enableLowLightBoost یک مقدار بولی است که مشخص می کند تقویت نور کم باید روشن یا خاموش شود.
  • createLowLightBoostCallback روشی است که برای ایجاد شئ callback می نویسید. این شیء زمانی فراخوانی می شود که جلسه قطع یا از بین برود.
  • متد LowLightBoostClient.createSession() یک شی Task را برمی گرداند. شما از این شی برای تنظیم شنوندگان موفقیت و شکست استفاده می کنید. ویدیو را در داخل شنونده موفقیت ضبط کنید.
  • می توانید یک Executor برای اجرای شنوندگان مشخص کنید. اگر یک Executor مشخص نکنید، شنوندگان در رشته اصلی اجرا می شوند. در این کد، ما lowLightBoostExecutor را یک Executor مناسب فرض می کنیم.

پیش نمایش دوربین را شروع کنید

پس از ایجاد یک جلسه در نور کم، می توانید جریان پیش نمایش دوربین را شروع کنید. شما باید این کار را در داخل onSuccess() که به جلسه کم نور ارسال می کنید، همانطور که در Create a session توضیح داده شده است، انجام دهید. کد زیر نحوه فیلم برداری را نشان می دهد:

کاتلین

MainActivity.this.lowLightBoostSession =
  lowLightBoostSession
MainActivity.this.lowLightBoostSession
  .setSceneDetectorCallback(
    (lowLightBoostSession, boostStrength) -> {
      Log.d(TAG, "onSceneBrightnessChanged: " +
        "boostStrength=$boostStrength")
      // boostStrength > 0.5 indicates a low light scene.
      // Update UI accordingly.
    },
    lowLightBoostExecutor
  )
try {
  startCaptureSession(
    lowLightBoostSession.getCameraSurface())
    // Start a Camera2 session here. Pass the LLB surface
    // to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
  Log.e(TAG, "Failed to start capture session", e)
  // Must try again or start the capture session without LLB.
}

جاوا

MainActivity.this.lowLightBoostSession =
  lowLightBoostSession;
MainActivity.this.lowLightBoostSession
  .setSceneDetectorCallback(
    (lowLightBoostSession, boostStrength) -> {
      Log.d(TAG, "onSceneBrightnessChanged: " +
        "boostStrength=" + boostStrength);
      // boostStrength > 0.5 indicates a low light scene.
      // Update UI accordingly.
    },
    lowLightBoostExecutor
  );
try {
  startCaptureSession(
    lowLightBoostSession.getCameraSurface());
    // Start a Camera2 session here. Pass the LLB surface
    // to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
  Log.e(TAG, "Failed to start capture session", e);
  // Must try again or start the capture session without LLB.
}

نکات کلیدی در مورد این کد

  • lowLightBoostSession جلسه ای است که در ایجاد یک جلسه ایجاد کردید.
  • setSceneDetectorCallback() یک شئ callback را تعریف می کند که رابط SceneDetectorCallback پیاده سازی می کند. جلسه زمانی که روشنایی صحنه تغییر می کند، متد onSceneBrightnessChanged() آن شی را فراخوانی می کند. پیاده سازی شما باید رابط کاربری دوربین را به درستی تنظیم کند.
  • شما می توانید یک Executor را برای اجرای callback تعیین کنید. اگر یک Executor مشخص نکنید، تماس برگشتی در رشته اصلی اجرا می شود. در این کد، ما lowLightBoostExecutor را یک Executor مناسب فرض می کنیم.
  • lowLightBoostSession.getCameraSurface() Surface با ویدیوی گرفته شده برمی گرداند.

جلسه را آزاد کنید

وقتی دوربین دیگر فعال نیست، جلسه تقویت نور کم را با فراخوانی LowLightBoostSession.release() رها کنید. به ویژه، باید مطمئن شوید که وقتی فعالیت شما از بین رفت، جلسه را آزاد کنید. می توانید این کار را با فراخوانی متد موجود در متد onDestroy() اکتیویتی خود انجام دهید:

کاتلین

override protected void onDestroy() {
  super.onDestroy()
  if (lowLightBoostSession != null) {
    lowLightBoostSession.release()
    lowLightBoostSession = null
  }
}

جاوا

@Override
protected void onDestroy() {
  super.onDestroy();
  if (lowLightBoostSession != null) {
    lowLightBoostSession.release();
    lowLightBoostSession = null;
  }
}

نکات کلیدی در مورد این کد

  • پس از انتشار جلسه، نباید هیچ یک از متدهای آن را فراخوانی کنید. همانطور که این کد انجام می دهد، باید هر متغیری را که به جلسه اشاره می کند پاک کنید.