একটি কম আলো বুস্ট সেশন ব্যবহার করুন, একটি কম আলো বুস্ট সেশন ব্যবহার করুন, একটি কম আলো বুস্ট সেশন ব্যবহার করুন, একটি কম আলো বুস্ট সেশন ব্যবহার করুন

Google লো লাইট বুস্ট চালু এবং বন্ধ করতে একটি কম আলো বুস্ট সেশন ব্যবহার করুন।

কোটলিন

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 প্যাকেজ দ্বারা সরবরাহ করা হয়৷ Google Play পরিষেবা APIগুলি অ্যাক্সেস করার তথ্যের জন্য Google Play পরিষেবার ডকুমেন্টেশন দেখুন৷

একটি কলব্যাক অবজেক্ট তৈরি করুন

আপনি যখন লো লাইট বুস্ট সেশন তৈরি করেন , তখন আপনাকে এটিকে একটি অবজেক্ট পাস করতে হবে যা LowLightBoostCallback ইন্টারফেস প্রয়োগ করে। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুর ফাংশন বলা হয়। নিম্নলিখিত কোড দেখায় কিভাবে একটি কলব্যাক তৈরি করতে হয়:

কোটলিন

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() , যা কলব্যাক অবজেক্ট তৈরি করে। আপনি সেই পদ্ধতিটিকে কল করবেন যখন আপনি আসলেই কম আলোর বুস্ট সেশন তৈরি করবেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত।
  • সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে কলব্যাক বলা হয়। অধিবেশন তৈরি হলে এটি বলা হয় না । সেশনটি সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করতে, LowLightBoostClient.createSession দ্বারা ফিরে আসা Task অবজেক্টটি পরীক্ষা করুন।

একটি অধিবেশন তৈরি করুন

একটি কম আলোর সেশন তৈরি করতে, 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");
    });

এই কোড সম্পর্কে মূল পয়েন্ট

  • আপনি সেশন কনফিগার করার জন্য createSession() করতে একটি LowLightBoostOptions অবজেক্ট পাস করেন। এই বস্তুটি টার্গেট সারফেস , ব্যবহার করার জন্য ক্যামেরার আইডি এবং প্রিভিউয়ের মাত্রার মতো জিনিসগুলি নির্দিষ্ট করে৷
  • এই কোডটি অনুমান করে যে আপনি ইতিমধ্যেই একটি Camera2 ক্যামেরার সাথে একটি সংযোগ খুলেছেন এবং সেই তথ্যটি cameraId, previewWidth, previewHeight মান সেট করতে ব্যবহার করেছেন। আরও তথ্যের জন্য, Camera2 ডকুমেন্টেশন দেখুন।
  • enableLowLightBoost হল একটি বুলিয়ান মান যা উল্লেখ করে যে কম আলোর বুস্ট চালু বা বন্ধ করা উচিত।
  • createLowLightBoostCallback হল একটি পদ্ধতি যা আপনি কলব্যাক অবজেক্ট তৈরি করতে লেখেন। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুটিকে বলা হয়।
  • পদ্ধতি LowLightBoostClient.createSession() একটি Task অবজেক্ট প্রদান করে। আপনি সাফল্য এবং ব্যর্থ শ্রোতাদের সেট আপ করতে এই বস্তুটি ব্যবহার করুন. সফল শ্রোতা ভিতরে ভিডিও ক্যাপচার.
  • শ্রোতাদের চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি Executor নির্দিষ্ট না করেন, শ্রোতারা মূল থ্রেডে চলে। এই কোডে, আমরা অনুমান করি lowLightBoostExecutor হল একটি উপযুক্ত Executor

ক্যামেরা প্রিভিউ শুরু করুন

একবার আপনি কম আলোর সেশন তৈরি করলে, আপনি ক্যামেরা প্রিভিউ স্ট্রিম শুরু করতে পারেন। আপনার এটি করা উচিত onSuccess() কলব্যাকের ভিতরে যা আপনি কম আলোর সেশনে পাস করেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত। নিম্নলিখিত কোড দেখায় কিভাবে ভিডিও ক্যাপচার করতে হয়:

কোটলিন

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() SceneDetectorCallback ইন্টারফেস বাস্তবায়নকারী একটি কলব্যাক অবজেক্ট সংজ্ঞায়িত করে। দৃশ্যের উজ্জ্বলতা পরিবর্তিত হলে সেশনটি সেই বস্তুটির onSceneBrightnessChanged() পদ্ধতিকে কল করে। আপনার বাস্তবায়ন ক্যামেরার UI যথাযথভাবে সামঞ্জস্য করা উচিত।
  • কলব্যাক চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি একটি 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 লো লাইট বুস্ট চালু এবং বন্ধ করতে একটি কম আলো বুস্ট সেশন ব্যবহার করুন।

কোটলিন

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 প্যাকেজ দ্বারা সরবরাহ করা হয়৷ Google Play পরিষেবা APIগুলি অ্যাক্সেস করার তথ্যের জন্য Google Play পরিষেবার ডকুমেন্টেশন দেখুন৷

একটি কলব্যাক অবজেক্ট তৈরি করুন

আপনি যখন লো লাইট বুস্ট সেশন তৈরি করেন , তখন আপনাকে এটিকে একটি অবজেক্ট পাস করতে হবে যা LowLightBoostCallback ইন্টারফেস প্রয়োগ করে। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুর ফাংশন বলা হয়। নিম্নলিখিত কোড দেখায় কিভাবে একটি কলব্যাক তৈরি করতে হয়:

কোটলিন

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() , যা কলব্যাক অবজেক্ট তৈরি করে। আপনি সেই পদ্ধতিটিকে কল করবেন যখন আপনি আসলে কম আলোর বুস্ট সেশন তৈরি করবেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত।
  • সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে কলব্যাক বলা হয়। অধিবেশন তৈরি হলে এটি বলা হয় না । সেশনটি সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করতে, LowLightBoostClient.createSession দ্বারা ফিরে আসা Task অবজেক্টটি পরীক্ষা করুন।

একটি অধিবেশন তৈরি করুন

একটি কম আলোর সেশন তৈরি করতে, 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");
    });

এই কোড সম্পর্কে মূল পয়েন্ট

  • আপনি সেশন কনফিগার করার জন্য createSession() করতে একটি LowLightBoostOptions অবজেক্ট পাস করেন। এই বস্তুটি টার্গেট সারফেস , ব্যবহার করার জন্য ক্যামেরার আইডি এবং প্রিভিউয়ের মাত্রার মতো জিনিসগুলি নির্দিষ্ট করে৷
  • এই কোডটি অনুমান করে যে আপনি ইতিমধ্যেই একটি Camera2 ক্যামেরার সাথে একটি সংযোগ খুলেছেন এবং সেই তথ্যটি cameraId, previewWidth, previewHeight মান সেট করতে ব্যবহার করেছেন। আরও তথ্যের জন্য, Camera2 ডকুমেন্টেশন দেখুন।
  • enableLowLightBoost হল একটি বুলিয়ান মান যা উল্লেখ করে যে কম আলোর বুস্ট চালু বা বন্ধ করা উচিত।
  • createLowLightBoostCallback হল একটি পদ্ধতি যা আপনি কলব্যাক অবজেক্ট তৈরি করতে লেখেন। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুটিকে বলা হয়।
  • পদ্ধতি LowLightBoostClient.createSession() একটি Task অবজেক্ট প্রদান করে। আপনি সাফল্য এবং ব্যর্থ শ্রোতাদের সেট আপ করতে এই বস্তুটি ব্যবহার করুন. সফল শ্রোতা ভিতরে ভিডিও ক্যাপচার.
  • শ্রোতাদের চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি Executor নির্দিষ্ট না করেন, শ্রোতারা মূল থ্রেডে চলে। এই কোডে, আমরা অনুমান করি lowLightBoostExecutor হল একটি উপযুক্ত Executor

ক্যামেরা প্রিভিউ শুরু করুন

একবার আপনি কম আলোর সেশন তৈরি করলে, আপনি ক্যামেরা প্রিভিউ স্ট্রিম শুরু করতে পারেন। আপনার এটি করা উচিত onSuccess() কলব্যাকের ভিতরে যা আপনি কম আলোর সেশনে পাস করেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত। নিম্নলিখিত কোড দেখায় কিভাবে ভিডিও ক্যাপচার করতে হয়:

কোটলিন

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() SceneDetectorCallback ইন্টারফেস বাস্তবায়নকারী একটি কলব্যাক অবজেক্ট সংজ্ঞায়িত করে। দৃশ্যের উজ্জ্বলতা পরিবর্তিত হলে সেশনটি সেই বস্তুটির onSceneBrightnessChanged() পদ্ধতিকে কল করে। আপনার বাস্তবায়ন ক্যামেরার UI যথাযথভাবে সামঞ্জস্য করা উচিত।
  • কলব্যাক চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি একটি 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 লো লাইট বুস্ট চালু এবং বন্ধ করতে একটি কম আলো বুস্ট সেশন ব্যবহার করুন।

কোটলিন

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 প্যাকেজ দ্বারা সরবরাহ করা হয়৷ Google Play পরিষেবা APIগুলি অ্যাক্সেস করার তথ্যের জন্য Google Play পরিষেবার ডকুমেন্টেশন দেখুন৷

একটি কলব্যাক অবজেক্ট তৈরি করুন

আপনি যখন লো লাইট বুস্ট সেশন তৈরি করেন , তখন আপনাকে এটিকে একটি অবজেক্ট পাস করতে হবে যা LowLightBoostCallback ইন্টারফেস প্রয়োগ করে। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুর ফাংশন বলা হয়। নিম্নলিখিত কোড দেখায় কিভাবে একটি কলব্যাক তৈরি করতে হয়:

কোটলিন

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() , যা কলব্যাক অবজেক্ট তৈরি করে। আপনি সেই পদ্ধতিটিকে কল করবেন যখন আপনি আসলেই কম আলোর বুস্ট সেশন তৈরি করবেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত।
  • সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে কলব্যাক বলা হয়। অধিবেশন তৈরি হলে এটি বলা হয় না । সেশনটি সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করতে, LowLightBoostClient.createSession দ্বারা ফিরে আসা Task অবজেক্টটি পরীক্ষা করুন।

একটি অধিবেশন তৈরি করুন

একটি কম আলোর সেশন তৈরি করতে, 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");
    });

এই কোড সম্পর্কে মূল পয়েন্ট

  • আপনি সেশন কনফিগার করতে createSession() এর জন্য একটি LowLightBoostOptions অবজেক্ট পাস করেন। এই বস্তুটি টার্গেট সারফেস , ব্যবহার করার জন্য ক্যামেরার আইডি এবং প্রিভিউয়ের মাত্রার মতো জিনিসগুলি নির্দিষ্ট করে৷
  • এই কোডটি অনুমান করে যে আপনি ইতিমধ্যেই একটি Camera2 ক্যামেরার সাথে একটি সংযোগ খুলেছেন এবং সেই তথ্যটি cameraId, previewWidth, previewHeight মান সেট করতে ব্যবহার করেছেন। আরও তথ্যের জন্য, Camera2 ডকুমেন্টেশন দেখুন।
  • enableLowLightBoost হল একটি বুলিয়ান মান যা উল্লেখ করে যে কম আলোর বুস্ট চালু বা বন্ধ করা উচিত।
  • createLowLightBoostCallback হল একটি পদ্ধতি যা আপনি কলব্যাক অবজেক্ট তৈরি করতে লেখেন। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুটিকে বলা হয়।
  • LowLightBoostClient.createSession() পদ্ধতি একটি Task অবজেক্ট প্রদান করে। আপনি সাফল্য এবং ব্যর্থ শ্রোতাদের সেট আপ করতে এই বস্তুটি ব্যবহার করুন. সফল শ্রোতা ভিতরে ভিডিও ক্যাপচার.
  • শ্রোতাদের চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি Executor নির্দিষ্ট না করেন, শ্রোতারা মূল থ্রেডে চলে। এই কোডে, আমরা অনুমান করি lowLightBoostExecutor হল একটি উপযুক্ত Executor

ক্যামেরা প্রিভিউ শুরু করুন

একবার আপনি কম আলোর সেশন তৈরি করলে, আপনি ক্যামেরা প্রিভিউ স্ট্রিম শুরু করতে পারেন। আপনার এটি করা উচিত onSuccess() কলব্যাকের ভিতরে যা আপনি কম আলোর সেশনে পাস করেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত। নিম্নলিখিত কোড দেখায় কিভাবে ভিডিও ক্যাপচার করতে হয়:

কোটলিন

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() SceneDetectorCallback ইন্টারফেস বাস্তবায়নকারী একটি কলব্যাক অবজেক্ট সংজ্ঞায়িত করে। দৃশ্যের উজ্জ্বলতা পরিবর্তিত হলে সেশনটি সেই বস্তুটির onSceneBrightnessChanged() পদ্ধতিকে কল করে। আপনার বাস্তবায়ন ক্যামেরার UI যথাযথভাবে সামঞ্জস্য করা উচিত।
  • কলব্যাক চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি একটি 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 লো লাইট বুস্ট চালু এবং বন্ধ করতে একটি কম আলো বুস্ট সেশন ব্যবহার করুন।

কোটলিন

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 প্যাকেজ দ্বারা সরবরাহ করা হয়৷ Google Play পরিষেবা APIগুলি অ্যাক্সেস করার তথ্যের জন্য Google Play পরিষেবার ডকুমেন্টেশন দেখুন৷

একটি কলব্যাক অবজেক্ট তৈরি করুন

আপনি যখন লো লাইট বুস্ট সেশন তৈরি করেন , তখন আপনাকে এটিকে একটি অবজেক্ট পাস করতে হবে যা LowLightBoostCallback ইন্টারফেস প্রয়োগ করে। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুর ফাংশন বলা হয়। নিম্নলিখিত কোড দেখায় কিভাবে একটি কলব্যাক তৈরি করতে হয়:

কোটলিন

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() , যা কলব্যাক অবজেক্ট তৈরি করে। আপনি সেই পদ্ধতিটিকে কল করবেন যখন আপনি আসলেই কম আলোর বুস্ট সেশন তৈরি করবেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত।
  • সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে কলব্যাক বলা হয়। অধিবেশন তৈরি হলে এটি বলা হয় না । সেশনটি সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করতে, LowLightBoostClient.createSession দ্বারা ফিরে আসা Task অবজেক্টটি পরীক্ষা করুন।

একটি অধিবেশন তৈরি করুন

একটি কম আলোর সেশন তৈরি করতে, 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");
    });

এই কোড সম্পর্কে মূল পয়েন্ট

  • আপনি সেশন কনফিগার করার জন্য createSession() করতে একটি LowLightBoostOptions অবজেক্ট পাস করেন। এই বস্তুটি টার্গেট সারফেস , ব্যবহার করার জন্য ক্যামেরার আইডি এবং প্রিভিউয়ের মাত্রার মতো জিনিসগুলি নির্দিষ্ট করে৷
  • এই কোডটি অনুমান করে যে আপনি ইতিমধ্যেই একটি Camera2 ক্যামেরার সাথে একটি সংযোগ খুলেছেন এবং সেই তথ্যটি cameraId, previewWidth, previewHeight মান সেট করতে ব্যবহার করেছেন। আরও তথ্যের জন্য, Camera2 ডকুমেন্টেশন দেখুন।
  • enableLowLightBoost হল একটি বুলিয়ান মান যা উল্লেখ করে যে কম আলোর বুস্ট চালু বা বন্ধ করা উচিত।
  • createLowLightBoostCallback হল একটি পদ্ধতি যা আপনি কলব্যাক অবজেক্ট তৈরি করতে লেখেন। সেশন সংযোগ বিচ্ছিন্ন বা ধ্বংস হলে এই বস্তুটিকে বলা হয়।
  • পদ্ধতি LowLightBoostClient.createSession() একটি Task অবজেক্ট প্রদান করে। আপনি সাফল্য এবং ব্যর্থ শ্রোতাদের সেট আপ করতে এই বস্তুটি ব্যবহার করুন. সফল শ্রোতা ভিতরে ভিডিও ক্যাপচার.
  • শ্রোতাদের চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি Executor নির্দিষ্ট না করেন, শ্রোতারা মূল থ্রেডে চলে। এই কোডে, আমরা অনুমান করি lowLightBoostExecutor হল একটি উপযুক্ত Executor

ক্যামেরা প্রিভিউ শুরু করুন

একবার আপনি কম আলোর সেশন তৈরি করলে, আপনি ক্যামেরা প্রিভিউ স্ট্রিম শুরু করতে পারেন। আপনার এটি করা উচিত onSuccess() কলব্যাকের ভিতরে যা আপনি কম আলোর সেশনে পাস করেন, যেমন একটি সেশন তৈরি করুন এ বর্ণিত। নিম্নলিখিত কোড দেখায় কিভাবে ভিডিও ক্যাপচার করতে হয়:

কোটলিন

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() SceneDetectorCallback ইন্টারফেস বাস্তবায়নকারী একটি কলব্যাক অবজেক্ট সংজ্ঞায়িত করে। দৃশ্যের উজ্জ্বলতা পরিবর্তিত হলে সেশনটি সেই বস্তুটির onSceneBrightnessChanged() পদ্ধতিকে কল করে। আপনার বাস্তবায়ন ক্যামেরার UI যথাযথভাবে সামঞ্জস্য করা উচিত।
  • কলব্যাক চালানোর জন্য আপনি একটি Executor নির্দিষ্ট করতে পারেন। আপনি যদি একটি 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;
  }
}

এই কোড সম্পর্কে মূল পয়েন্ট

  • সেশন রিলিজ হওয়ার পরে, আপনি এর কোনো পদ্ধতিতে কল করবেন না। আপনি অধিবেশন নির্দেশ করে যে কোনো ভেরিয়েবল সাফ করা উচিত, যেমন এই কোড করে।