গুগল লো লাইট বুস্ট চালু এবং বন্ধ করতে লো লাইট বুস্ট সেশন ব্যবহার করুন।
কোটলিন
dependencies {
val low_light_boost_version = "16.0.1-beta04"
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.1-beta04"
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 গুগল প্লে সার্ভিসেস com.google.android.gms.cameralowlight প্যাকেজ দ্বারা সরবরাহ করা হয়। গুগল প্লে সার্ভিসেস API অ্যাক্সেস করার তথ্যের জন্য গুগল প্লে সার্ভিসেস ডকুমেন্টেশন দেখুন।
একটি কলব্যাক অবজেক্ট তৈরি করুন
যখন আপনি কম আলোতে বুস্ট সেশন তৈরি করবেন , তখন আপনাকে এটিতে এমন একটি অবজেক্ট পাস করতে হবে যা 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()সংজ্ঞায়িত করে, যা কলব্যাক অবজেক্ট তৈরি করে। আপনি যখন কম আলোতে বুস্ট সেশন তৈরি করবেন তখন আপনি সেই পদ্ধতিটি কল করবেন, যেমনটি Create a session এ বর্ণিত হয়েছে। - সেশনটি সংযোগ বিচ্ছিন্ন বা ধ্বংস হয়ে গেলে কলব্যাক কল করা হয়। সেশন তৈরি হলে কল করা হয় না । সেশনটি সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করতে,
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।
ক্যাপচার ফলাফলে পাস করুন
গুগল লো লাইট বুস্টের জন্য সঠিক পরিমাণে উজ্জ্বলতা প্রয়োগ করার জন্য নির্দিষ্ট ক্যামেরা মেটাডেটা প্রয়োজন। আপনাকে TotalCaptureResult কে processCaptureResult() পদ্ধতিতে পাস করতে হবে। আপনি onCaptureCompleted() কলব্যাক পদ্ধতিতে TotalCaptureResult পেতে পারেন।
কোটলিন
val captureCallback = CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult
) {
super.onCaptureCompleted(session, request, result)
lowLightBoostSession?.processCaptureResult(result)
}
}
জাভা
CameraCaptureSession.CaptureCallback captureCallback =
new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(
@NonNull CameraCaptureSession session,
@NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result)
if (lowLightBoostSession != null) {
lowLightBoostSession.processCaptureResult(result);
}
}
};
এই কোড সম্পর্কে গুরুত্বপূর্ণ বিষয়সমূহ
- এই কোডটি শুধুমাত্র Google LLB-এর সাথে প্রাসঙ্গিক
CaptureCallbackকোডটি দেখাচ্ছে। এই কলব্যাকগুলিতে সম্ভবত আপনার অন্য কোড থাকবে। -
TotalCaptureResultপাস করার মাধ্যমে Google LLB অটো এক্সপোজার ডেটা এবং অন্যান্য মেটাডেটা বিশ্লেষণ করতে পারে যা কম আলোতে বুস্টের জন্য প্রয়োজনীয়, দৃশ্য সনাক্তকরণ প্রক্রিয়া করতে এবং ফ্রেমে কতটা বুস্ট প্রয়োগ করতে হবে তা নির্ধারণ করতে। - ক্যামেরা সেশন তৈরি করার সময় আপনার
captureCallbackঅবজেক্টটি পাস করা উচিত, উদাহরণস্বরূপ ` setSingleRepeatingRequest() দিয়ে।
ক্যামেরা প্রিভিউ শুরু করুন
একবার আপনি একটি কম আলোর সেশন তৈরি করলে, আপনি ক্যামেরা প্রিভিউ স্ট্রিম শুরু করতে পারেন। Create a session -এ বর্ণিত পদ্ধতিতে, আপনি কম আলোর সেশনে যে 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হল Create a session- এ আপনার তৈরি করা সেশন। -
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;
}
}
এই কোড সম্পর্কে গুরুত্বপূর্ণ বিষয়সমূহ
- সেশনটি প্রকাশের পর, আপনার এর কোনও পদ্ধতি কল করা উচিত নয়। আপনার সেশনের দিকে নির্দেশিত যেকোনো ভেরিয়েবল মুছে ফেলা উচিত, যেমনটি এই কোডটি করে।