Google के कम रोशनी वाले मोड को चालू और बंद करने के लिए, कम रोशनी वाले मोड के बूस्ट सेशन का इस्तेमाल करें.
Kotlin
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")
}
Groovy
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 services के com.google.android.gms.cameralowlight
पैकेज से मिलता है. Google Play services के एपीआई ऐक्सेस करने के बारे में जानकारी के लिए, Google Play services का दस्तावेज़ देखें.
कॉलबैक ऑब्जेक्ट बनाना
कम रोशनी में बेहतर फ़ोटो लेने के लिए सेशन बनाते समय, आपको एक ऐसा ऑब्जेक्ट पास करना होगा जो LowLightBoostCallback
इंटरफ़ेस को लागू करता हो.
सेशन के डिसकनेक्ट होने या नष्ट होने पर, इस ऑब्जेक्ट के फ़ंक्शन को कॉल किया जाता है. नीचे दिए गए कोड में, कॉलबैक बनाने का तरीका बताया गया है:
Kotlin
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
}
}
Java
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
को कॉल करें.
Kotlin
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
}
}
Java
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()
कॉलबैक में करना चाहिए. नीचे दिए गए कोड में, वीडियो कैप्चर करने का तरीका बताया गया है:
Kotlin
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.
}
Java
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()
तरीके को कॉल करता है. आपके लागू करने से, कैमरे के यूज़र इंटरफ़ेस (यूआई) में सही तरीके से बदलाव होना चाहिए.- कॉलबैक चलाने के लिए,
Executor
तय किया जा सकता है. अगर आपने कोईExecutor
नहीं बताया है, तो कॉलबैक मुख्य थ्रेड पर चलता है. इस कोड में, हम मानते हैं किlowLightBoostExecutor
एक सहीExecutor
है. lowLightBoostSession.getCameraSurface()
, कैप्चर किए गए वीडियो के साथSurface
दिखाता है.
सेशन को रिलीज़ करना
जब कैमरा बंद हो जाए, तो LowLightBoostSession.release()
को दबाकर, कम रोशनी में बेहतर वीडियो रिकॉर्ड करने की सुविधा बंद करें. खास तौर पर, आपको यह पक्का करना चाहिए कि आपकी गतिविधि खत्म होने पर, सेशन को रिलीज़ कर दिया जाए. ऐसा करने के लिए, अपनी गतिविधि के onDestroy()
तरीके में मौजूद तरीका कॉल करें:
Kotlin
override protected void onDestroy() {
super.onDestroy()
if (lowLightBoostSession != null) {
lowLightBoostSession.release()
lowLightBoostSession = null
}
}
Java
@Override
protected void onDestroy() {
super.onDestroy();
if (lowLightBoostSession != null) {
lowLightBoostSession.release();
lowLightBoostSession = null;
}
}
इस कोड के बारे में अहम जानकारी
- सेशन रिलीज़ होने के बाद, आपको उसके किसी भी तरीके को कॉल नहीं करना चाहिए. आपको ऐसे सभी वैरिएबल मिटा देने चाहिए जो सेशन की जानकारी देते हैं, जैसा कि इस कोड में किया गया है.