डिवाइस बनाने वाली कंपनियां, बोकेह, नाइट मोड, और एचडीआर जैसे एक्सटेंशन दिखा सकती हैं के ज़रिए कैमरा एक्सटेंशन इंटरफ़ेस के ज़रिए तीसरे पक्ष के डेवलपर को को निकाल सकते हैं. डेवलपर इसका इस्तेमाल कर सकते हैं: Camera2 एक्सटेंशन एपीआई और CameraX एक्सटेंशन एपीआई OEM वेंडर लाइब्रेरी में लागू किए गए एक्सटेंशन को ऐक्सेस करें.
इस्तेमाल किए जा सकने वाले एक्सटेंशन की सूची देखने के लिए, जो Camera2 में एक जैसे होते हैं और CameraX को ऐक्सेस करें, CameraX एक्सटेंशन एपीआई. अगर आपको कोई एक्सटेंशन जोड़ना है, तो गड़बड़ी की शिकायत दर्ज करें, समस्या को ट्रैक करने वाला टूल.
इस पेज पर, OEM वेंडर लाइब्रेरी को लागू करने और उसे चालू करने का तरीका बताया गया है: डिवाइस.
भवन निर्माण
नीचे दिया गया डायग्राम, कैमरा एक्सटेंशन के आर्किटेक्चर के बारे में बताता है
इंटरफ़ेस या extensions-interface
:
पहला डायग्राम. कैमरा एक्सटेंशन के आर्किटेक्चर का डायग्राम
जैसा कि डायग्राम में दिखाया गया है, कैमरा एक्सटेंशन का इस्तेमाल करने के लिए, आपको
OEM वेंडर लाइब्रेरी से मिले extensions-interface
को लागू करें. आपका
OEM की वेंडर लाइब्रेरी में दो एपीआई चालू होते हैं:
CameraX एक्सटेंशन एपीआई और
Camera2 एक्सटेंशन एपीआई,
जिनका इस्तेमाल CameraX और Camera2 ऐप्लिकेशन ऐक्सेस करने के लिए किया जाता है
वेंडर एक्सटेंशन.
OEM वेंडर लाइब्रेरी को लागू करें
OEM वेंडर लाइब्रेरी लागू करने के लिए,
camera-extensions-stub
सिस्टम लाइब्रेरी प्रोजेक्ट में सेव की जाती हैं. ये फ़ाइलें कैमरा एक्सटेंशन को तय करती हैं
इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है.
camera-extensions-stub
फ़ाइलों को इन कैटगरी में बांटा जाता है:
ज़रूरी इंटरफ़ेस फ़ाइलें (इसमें बदलाव न करें)
PreviewExtenderImpl.java
ImageCaptureExtenderImpl.java
ExtenderStateListener.java
ProcessorImpl.java
PreviewImageProcessorImpl.java
CaptureProcessorImpl.java
CaptureStageImpl.java
RequestUpdateProcessorImpl.java
ProcessResultImpl.java
advanced/AdvancedExtenderImpl.java
advanced/Camera2OutputConfigImpl.java
advanced/Camera2SessionConfigImpl.java
advanced/ImageProcessorImpl.java
advanced/ImageReaderOutputConfigImpl.java
advanced/ImageReferenceImpl.java
advanced/MultiResolutionImageReaderOutputConfigImpl.java
advanced/OutputSurfaceImpl.java
advanced/RequestProcessorImpl.java
advanced/SessionProcessorImpl.java
advanced/SurfaceOutputConfigImpl.java
लागू करने के ज़रूरी तरीके (लागू करने की जानकारी जोड़ें)
ExtensionVersionImpl.java
InitializerImpl.java
बोकेह एक्सटेंडर क्लास (अगर बोकेह एक्सटेंशन काम करता है, तो इसे लागू करें)
BokehImageCaptureExtenderImpl.java
BokehPreviewExtenderImpl.java
advanced/BokehAdvancedExtenderImpl.java
नाइट एक्सटेंडर क्लास (अगर नाइट एक्सटेंशन काम करता है, तो इसे लागू करें)
NightImageCaptureExtenderImpl.java
NightPreviewExtenderImpl.java
advanced/NightAdvancedExtenderImpl.java
ऑटो एक्सटेंडर क्लास (अगर ऑटो एक्सटेंशन काम करता है, तो इसे लागू करें)
AutoImageCaptureExtenderImpl.java
AutoPreviewExtenderImpl.java
advanced/AutoAdvancedExtenderImpl.java
एचडीआर एक्सटेंडर क्लास (अगर एचडीआर एक्सटेंशन के साथ काम करता है, तो इसे लागू करें)
HdrImageCaptureExtenderImpl.java
HdrPreviewExtenderImpl.java
advanced/HdrAdvancedExtenderImpl.java
चेहरे की फ़ोटो क्वालिटी में सुधार करने की क्लास (अगर चेहरे की फ़ोटो क्वालिटी में सुधार करने की सुविधा वाले एक्सटेंशन का इस्तेमाल किया जा सकता है, तो इसे लागू करें)
BeautyImageCaptureExtenderImpl.java
BeautyPreviewExtenderImpl.java
advanced/BeautyAdvancedExtenderImpl.java
उपयोगिताएं (ज़रूरी नहीं, इन्हें मिटाया जा सकता है)
advanced/Camera2OutputConfigImplBuilder.java
advanced/Camera2SessionConfigImplBuilder.java
आपको हर एक्सटेंशन के लिए लागू करने की ज़रूरत नहीं है. अगर आपको
एक्सटेंशन लागू न करें, isExtensionAvailable()
को false
लौटाने के लिए सेट करें या
संबंधित एक्सटेंडर क्लास हटाएं. Camera2 और CameraX एक्सटेंशन
API, ऐप्लिकेशन को रिपोर्ट करता है कि एक्सटेंशन उपलब्ध नहीं है.
आइए जानते हैं कि Camera2 और CameraX एक्सटेंशन एपीआई, वेंडर लाइब्रेरी से भी ऐक्सेस किया जा सकता है. नीचे दिए गए डायग्राम में नाइट एक्सटेंशन का इस्तेमाल करके, एंड-टू-एंड फ़्लो का उदाहरण देखें:
दूसरा डायग्राम. नाइट एक्सटेंशन लागू करना
वर्शन की पुष्टि करना:
Camera2/X,
ExtensionVersionImpl.checkApiVersion()
को कॉल करता है, ताकि यह पक्का किया जा सके कि OEM की ओर से लागू किया गयाextensions-interface
का वर्शन, Camera2/X के साथ काम करता है इस्तेमाल किए जा सकते हैं.वेंडर लाइब्रेरी शुरू करना:
InitializerImpl
मेंinit()
तरीका है, जिससे वेंडर लाइब्रेरी शुरू होती है. एक्सटेंडर क्लास ऐक्सेस करने से पहले, Camera2/X शुरुआती प्रोसेस पूरी करता है.एक्सटेंडर क्लास इंस्टैंशिएट करें:
एक्सटेंशन के लिए एक्सटेंडर क्लास इंस्टैंशिएट करता है. दो एक्सटेंडर हैं टाइप: बेसिक एक्सटेंडर और ऐडवांस एक्सटेंडर. आपको इनमें से किसी एक को लागू करना होगा सभी एक्सटेंशन के लिए एक्सटेंडर टाइप. ज़्यादा जानकारी के लिए, यह देखें बेसिक एक्सटेंडर बनाम बेहतर एक्सटेंडर.
कैमरा 2/X वापस पाने के लिए, Extender क्लास से इंटरैक्ट करता है और इंटरैक्ट करता है जानकारी देखें और एक्सटेंशन को चालू करें. किसी दिए गए एक्सटेंशन के लिए, Camera2/X यह कर सकता है: एक्सटेंडर क्लास को कई बार इंस्टैंशिएट करना. इस वजह से, ये काम न करें कंस्ट्रक्टर या
init()
कॉल में भारी-भरकम इनिशलाइज़ेशन के साथ शुरू करना चाहिए. यह करें बहुत ज़्यादा लिफ़्ट तब तक नहीं बढ़ाया जा सकता, जब कैमरा सत्र शुरू होने वाला हो शुरू करते हैं, जैसे कि जबonInit()
को बेसिक एक्सटेंडर में कॉल किया जाता है याinitSession()
को बेहतर एक्सटेंडर में कॉल किया जाता है.नाइट एक्सटेंशन के लिए, इन एक्सटेंडर क्लास को इंस्टैंशिएट किया जाता है: बेसिक एक्सटेंडर टाइप:
NightImageCaptureExtenderImpl.java
NightPreviewExtenderImpl.java
और ऐडवांस एक्सटेंडर टाइप के लिए:
NightAdvancedExtenderImpl.java
एक्सटेंशन की उपलब्धता की जांच करें:
एक्सटेंशन को चालू करने से पहले,
isExtensionAvailable()
यह जांच करता है कि एक्सटेंशन, एक्सटेंडर के ज़रिए बताए गए कैमरा आईडी पर उपलब्ध होता है इंस्टेंस.कैमरे की जानकारी का इस्तेमाल करके, एक्सटेंडर शुरू करें:
Camera2/X, Extender इंस्टेंस पर
init()
को कॉल करता है और उसे कैमरे के साथ शेयर करता है आईडी औरCameraCharacteristics
.क्वेरी की जानकारी:
यह विकल्प, उस तरह की जानकारी हासिल करने के लिए Extender क्लास को शुरू करता है: साथ ही, इंतज़ार का अनुमानित समय अब भी कैप्चर किया जा सकता है. साथ ही, एक्सटेंडर को चालू करने के लिए तैयार करना होगा.
एक्सटेंडर पर एक्सटेंशन चालू करें:
Extender क्लास क्लास. इससे OEM को हुक करने का एक तरीका मिलता है Camera2 पाइपलाइन में लागू करना, जैसे कि कैप्चर करने का अनुरोध पैरामीटर या पोस्ट प्रोसेसर चालू करना.
ऐडवांस एक्सटेंडर टाइप के लिए, Camera2/X इसके साथ इंटरैक्ट करता है एक्सटेंशन को चालू करने के लिए,
SessionProcessorImpl
. Camera2/X, इस नंबर परcreateSessionProcessor()
को कॉल करकेSessionProcessorImpl
इंस्टेंस एक्सटेंडर.
इन सेक्शन में, एक्सटेंशन फ़्लो के बारे में ज़्यादा जानकारी दी गई है.
वर्शन की पुष्टि
रनटाइम के दौरान, डिवाइस से OEM वेंडर लाइब्रेरी लोड करते समय, Camera2/X
यह पुष्टि करता है कि लाइब्रेरी, extensions-interface
वर्शन के साथ काम करती है या नहीं.
extensions-interface
में सिमैंटिक वर्शन का इस्तेमाल किया जाता है या
MAJOR.MINOR.PATCH, उदाहरण के लिए, 1.1.0 या 1.2.0. हालांकि, सिर्फ़
वर्शन की पुष्टि के दौरान मेजर और माइनर वर्शन का इस्तेमाल किया जाता है.
वर्शन की पुष्टि करने के लिए, Camera2/X को कॉल करें
ExtensionVersionImpl.checkApiVersion()
के साथ काम करता है
extensions-interface
वर्शन. इसके बाद, Camera2/X उस वर्शन का इस्तेमाल करता है जिसे
OEM लाइब्रेरी यह तय करती है कि एक्सटेंशन को चालू किया जा सकता है या नहीं और क्या-क्या किया जा सकता है
तो यह शुरू होना चाहिए.
मेजर वर्शन के साथ काम करता है
अगर एक्सटेंशन-इंटरफ़ेस के मुख्य वर्शन अलग-अलग हैं, तो Camera2/X और वेंडर लाइब्रेरी है, तो इसे काम नहीं करने वाला माना जाता है और एक्सटेंशन अक्षम है.
पुराने सिस्टम के साथ काम करने की सुविधा
जब तक मेजर वर्शन एक जैसा है, Camera2/X पक्का करता है कि
पहले से बनी OEM वेंडर लाइब्रेरी के साथ पुराने सिस्टम के साथ काम करने की सुविधा
extensions-interface
वर्शन. उदाहरण के लिए, अगर Camera2/X काम करता हो
extensions-interface
1.3.0, OEM वेंडर लाइब्रेरी जिन्होंने 1.0.0 को लागू किया,
1.1.0 और 1.2.0 अब भी काम करते हैं. इसका मतलब यह भी है कि लागू करने के बाद
विक्रेता लाइब्रेरी के किसी ख़ास वर्शन का इस्तेमाल करते हैं, तो Camera2/X लाइब्रेरी को
यह ऐप्लिकेशन, extension-interface
के आने वाले वर्शन के साथ काम करता है.
फ़ॉरवर्ड करने की सुविधा
नए extensions-interface
की वेंडर लाइब्रेरी के साथ फ़ॉरवर्ड काम करना
ओईएम आप पर निर्भर करता है. अगर आपको एक्सटेंशन लागू करने के लिए कुछ सुविधाएं चाहिए, तो
आप किसी खास वर्शन से शुरू होने वाले एक्सटेंशन चालू कर सकते हैं. इसमें
ऐसी स्थिति में, extensions-interface
के साथ काम करने वाला वर्शन दिखाया जा सकता है. ऐसा तब किया जा सकता है, जब
Camera2/X लाइब्रेरी का वर्शन ज़रूरी शर्तों को पूरा करता है. अगर Camera2/X वर्शन
समर्थित नहीं हैं, तो आप असंगत वर्शन जैसे 99.0.0 को
एक्सटेंशन बंद कर देते हैं.
वेंडर लाइब्रेरी शुरू करना
ओईएम के लागू किए गए extensions-interface
वर्शन की पुष्टि करने के बाद
लाइब्रेरी है, तो Camera2/X शुरू करने की प्रोसेस शुरू करता है. कॉन्टेंट बनाने
InitializerImpl.init()
तरीका, OEM लाइब्रेरी को यह सिग्नल देता है कि कोई ऐप्लिकेशन आज़मा रहा है
एक्सटेंशन का इस्तेमाल करने के लिए.
Camera2/X, OEM लाइब्रेरी को कोई और कॉल नहीं करता (वर्शन की जांच के अलावा)
जब तक OEM वेंडर लाइब्रेरी OnExtensionsInitializedCallback.onSuccess()
को कॉल नहीं करती
शुरू करने की प्रोसेस पूरी होने की सूचना देने के लिए.
लागू करना ज़रूरी है
InitializerImpl
extensions-interface
के 1.1.0 से लागू. Camera2/X, लाइब्रेरी को शुरू करने की प्रोसेस को स्किप कर देता है
यह चरण अगर OEM वेंडर लाइब्रेरी में extensions-interface
1.0.0 को लागू किया जाता है.
बेसिक एक्सटेंडर बनाम बेहतर एक्सटेंडर
extensions-interface
को लागू करने के दो तरीके हैं: बेसिक एक्सटेंडर और
बेहतर एक्सटेंडर. यह ऐडवांस एक्सटेंडर इस तारीख से काम कर रहा है
extensions-interface
1.2.0.
ऐसे एक्सटेंशन के लिए बेसिक एक्सटेंडर लागू करें जो कैमरा एचएएल में इमेज को प्रोसेस करते हों या YUV स्ट्रीम प्रोसेस करने वाले पोस्ट प्रोसेसर का इस्तेमाल करना चाहिए.
ऐसे एक्सटेंशन के लिए ऐडवांस एक्सटेंडर लागू करें जिन्हें Camera2 को पसंद के मुताबिक बनाने की ज़रूरत होती है स्ट्रीम कॉन्फ़िगरेशन स्ट्रीम करने के लिए कहा जाता है. साथ ही, ज़रूरत के हिसाब से कैप्चर अनुरोध भी भेजे जाते हैं.
तुलना के लिए यहां दी गई टेबल देखें:
बेसिक एक्सटेंडर | ऐडवांस एक्सटेंडर | |
---|---|---|
स्ट्रीम कॉन्फ़िगरेशन | फ़िक्स्ड पूर्वावलोकन: PRIVATE या YUV_420_888 (अगर प्रोसेसर मौजूद है) अब भी कैप्चर करें: JPEG या YUV_420_888 (अगर प्रोसेसर मौजूद है)
|
OEM के हिसाब से कस्टमाइज़ किया जा सकता है. |
कैप्चर करने का अनुरोध भेजा जा रहा है | सिर्फ़ Camera2/X, कैप्चर करने के अनुरोध भेज सकता है. पैरामीटर को ये अनुरोध शामिल नहीं किए जाएंगे. इमेज कैप्चर करने के लिए प्रोसेसर दिए जाने पर, Camera2/X कैप्चर करने के कई अनुरोध भेज सकता है. साथ ही, सभी इमेज और कैप्चर प्रोसेसर को नतीजे देता है. | आपको एक RequestProcessorImpl इंस्टेंस दिया गया है
कैमरा2 कैप्चर करने का अनुरोध स्वीकार करें और नतीजे और इमेज पाएं.
Camera2/X, |
कैमरा पाइपलाइन में हुक |
|
|
इनके लिए सही है | कैमरा एचएएल या प्रोसेसर में लागू किए गए एक्सटेंशन YUV इमेज. |
|
साथ काम करने वाले एपीआई का वर्शन | Camera2 एक्सटेंशन: Android 13 या उसके बाद के वर्शन वाला CameraX एक्सटेंशन: camera-extensions 1.1.0 या उसके बाद के वर्शन |
Camera2 एक्सटेंशन: Android 12L या इसके बाद के वर्शन वाला CameraX एक्सटेंशन: camera-extensions 1.2.0-alpha03 या उसके बाद का वर्शन |
ऐप्लिकेशन फ़्लो
नीचे दी गई टेबल में तीन तरह के ऐप्लिकेशन फ़्लो और उनके संबंधित Camera एक्सटेंशन एपीआई कॉल. जब Camera2/X में ये सुविधाएं मिलती हैं इन एपीआई के लिए बना है, तो आपको इनका सही तरीके से इस्तेमाल करने के लिए, वेंडर लाइब्रेरी को सही तरीके से लागू करना होगा हैं, जिसके बारे में हम बाद के सेक्शन में विस्तार से बताएंगे.
Camera2 एक्सटेंशन | CameraX एक्सटेंशन | |
---|---|---|
क्वेरी एक्सटेंशन की उपलब्धता | CameraExtensionCharacteristics
.getSupportedExtensions
|
ExtensionsManager.
isExtensionAvailable
|
क्वेरी की जानकारी | CameraExtensionCharacteristics.
getExtensionSupportedSizes
CameraExtensionCharacteristics.
getEstimatedCaptureLatencyRangeMillis
CameraExtensionCharacteristics.
getAvailableCaptureRequestKeys
CameraExtensionCharacteristics.
getAvailableCaptureResultKeys
|
ExtensionsManager.
getEstimatedCaptureLatencyRange
CameraX, लाइब्रेरी में मौजूद बाकी जानकारी का इस्तेमाल करता है. |
एक्सटेंशन चालू होने पर, झलक देखें और फ़ोटो या वीडियो को स्टिल-कैप्चर करें | CameraDevice.
createExtensionSession
|
val cameraSelector = ExtensionsManager.
getExtensionEnabledCameraSelector
|
बेसिक एक्सटेंडर
बेसिक एक्सटेंडर इंटरफ़ेस की मदद से, कैमरे में कई जगहों पर हुक बनाए जा सकते हैं पाइपलाइन. हर टाइप के एक्सटेंशन के लिए, OEM को ज़रूरत के हिसाब से एक्सटेंडर क्लास होती हैं .
नीचे दी गई टेबल में उन एक्सटेंडर क्लास की सूची दी गई है जिन्हें OEMS को हर एक इवेंट के लिए लागू करना होता है एक्सटेंशन:
लागू करने के लिए क्लास को बढ़ाना | |
---|---|
नाइट | NightPreviewExtenderImpl.java
|
एचडीआर | HdrPreviewExtenderImpl.java
|
अपने-आप | AutoPreviewExtenderImpl.java
|
बोकेह | BokehPreviewExtenderImpl.java
|
चेहरे की फ़ोटो क्वालिटी में सुधार | BeautyPreviewExtenderImpl.java
|
हम प्लेसहोल्डर के तौर पर PreviewExtenderImpl
और ImageCaptureExtenderImpl
का इस्तेमाल करते हैं
नीचे दिए गए उदाहरण में देखें. इन्हें वास्तविक नाम के नामों से बदलें
जिन्हें आप लागू कर रहे हैं.
बेसिक एक्सटेंडर में ये सुविधाएं मिलती हैं:
CameraCaptureSession
को कॉन्फ़िगर करते समय, सेशन पैरामीटर इंजेक्ट करें (onPresetSession
).- कैप्चर सेशन के शुरू और बंद होने की सूचना दें. साथ ही, एक साथ सिंगल भेजें
लौटाए गए पैरामीटर (
onEnableSession
,onDisableSession
). - अनुरोध के लिए कैप्चर पैरामीटर इंजेक्ट करें
(
PreviewExtenderImpl.getCaptureStage
,ImageCaptureExtenderImpl.getCaptureStages
). - झलक के लिए प्रोसेसर जोड़ें और फिर भी ऐसे प्रोसेसर को कैप्चर करें जिन्हें प्रोसेस किया जा सकता है
YUV_420_888
स्ट्रीम.
आइए देखते हैं कि Camera2/X, तीन चरणों को पूरा करने के लिए, extensions-interface
को कैसे शुरू करता है
ऐप्लिकेशन फ़्लो के बारे में ऊपर बताया गया है.
ऐप्लिकेशन फ़्लो 1: एक्सटेंशन की उपलब्धता देखना
तीसरी इमेज. बेसिक एक्सटेंडर पर ऐप्लिकेशन फ़्लो 1
इस फ़्लो में, Camera2/X सीधे तौर परisExtensionAvailable()
बिना कॉल किए PreviewExtenderImpl
और ImageCaptureExtenderImpl
, दोनों
init()
. एक्सटेंशन चालू करने के लिए, दोनों एक्सटेंडर क्लास को true
रिटर्न करना होगा.
आम तौर पर, यह पहला कदम होता है. इसके बाद, ऐप्लिकेशन यह जांच कर सकते हैं कि एक्सटेंशन की मदद से, टाइप, एक्सटेंशन को चालू करने से पहले दिए गए कैमरा आईडी के लिए काम करता हो. इसकी वजह यह है कि कुछ एक्सटेंशन सिर्फ़ कुछ कैमरा आईडी पर ही काम करते हैं.
ऐप्लिकेशन का फ़्लो 2: क्वेरी की जानकारी
चौथी इमेज. बेसिक एक्सटेंडर पर ऐप्लिकेशन फ़्लो 2
एक्सटेंशन उपलब्ध है या नहीं, यह तय करने के बाद ऐप्लिकेशन को क्वेरी करनी चाहिए कृपया एक्सटेंशन को सक्षम करने से पहले निम्न जानकारी को पढ़ें.
अब भी इंतज़ार का समय कैप्चर करें:
ImageCaptureExtenderImpl.getEstimatedCaptureLatencyRange
इसकी रेंज दिखाता है ऐप्लिकेशन के लिए कैप्चर में लगने वाले समय की जानकारी का आकलन करने के लिए किया जा सकता है. मौजूदा स्थिति के लिए एक्सटेंशन चालू करें.झलक और कैप्चर सरफ़ेस के लिए इस्तेमाल किए जा सकने वाले साइज़:
ImageCaptureExtenderImpl.getSupportedResolutions
औरPreviewExtenderImpl.getSupportedResolutions
इमेज के फ़ॉर्मैट की सूची दिखाता है और साइज़, जो सरफ़ेस फ़ॉर्मैट और साइज़ के लिए काम करते हैं.अनुरोध और नतीजे दिखाने वाली कुंजियां: Camera2/X, कैप्चर की जा सकने वाली फ़ाइलों को वापस पाने के लिए इन तरीकों को शुरू करता है लागू की गई कुंजियों और नतीजे कुंजियों का अनुरोध करें:
ImageCaptureExtenderImpl.getAvailableCaptureRequestKeys
ImageCaptureExtenderImpl.getAvailableCapturetResultKeys
Camera2/X, क्वेरी करने से पहले इन Extender क्लास पर हमेशा init()
को कॉल करता है
हमारा वीडियो देखें.
ऐप्लिकेशन फ़्लो 3: एक्सटेंशन चालू करके, झलक देखें/अब भी कैप्चर करें (HAL लागू करना)
पांचवी इमेज. बेसिक एक्सटेंडर पर ऐप्लिकेशन फ़्लो 3
ऊपर दिया गया डायग्राम, झलक को चालू करने के मुख्य फ़्लो को दिखाता है और किसी भी प्रोसेसर के बिना, एक्सटेंशन के साथ कैप्चर करें. इसका मतलब है कि कैमरा एचएएल एक्सटेंशन को प्रोसेस करता है.
इस फ़्लो में, Camera2/X पहले init()
को कॉल करता है और फिर onInit
को कॉल करता है. इससे आपको सूचना मिलती है
तय किए गए एक्सटेंशन के साथ कैमरा सेशन शुरू होने वाला है.
onInit()
में हेवी-लिफ़्टिंग शुरू की जा सकती है.
CameraCaptureSession
को कॉन्फ़िगर करते समय, Camera2/X शुरू हो जाता है
सेशन के पैरामीटर पाने के लिए, onPresetSession
. कैप्चर सेशन के बाद
सफलतापूर्वक कॉन्फ़िगर किया गया, Camera2/X, onEnableSession
को शुरू करता है और
CaptureStageImpl
जिसमें कैप्चर पैरामीटर मौजूद हों. कैमरा2/X
तुरंत इन कैप्चर पैरामीटर के साथ एक अनुरोध भेजता है, ताकि
हैल. इसी तरह, कैप्चर सेशन बंद होने से पहले, Camera2/X शुरू हो जाता है
onDisableSession
और फिर लौटाए गए कैप्चर के साथ एक अनुरोध भेजता है
पैरामीटर का इस्तेमाल करें.
Camera2/X से ट्रिगर किए गए बार-बार होने वाले अनुरोध में, अनुरोध के पैरामीटर शामिल हैं
PreviewExtenderImpl.getCaptureStage()
ने वापस किया. इसके अलावा, अब भी
कैप्चर अनुरोध में इसके ज़रिए लौटाए गए पैरामीटर शामिल हैं
ImageCaptureExtenderImpl.getCaptureStages()
.
आखिर में, कैमरा सेशन खत्म होने के बाद Camera2/X onDeInit()
शुरू करता है.
onDeinit()
में संसाधनों को रिलीज़ किया जा सकता है.
प्रोसेसर की झलक देखें
कैमरा एचएएल के अलावा, प्रोसेसर में भी एक्सटेंशन लागू किए जा सकते हैं.
प्रोसेसर टाइप तय करने के लिए, PreviewExtenderImpl.getProcessorType
को लागू करें
जैसा कि नीचे बताया गया है:
PROCESSOR_TYPE_NONE
: कोई प्रोसेसर नहीं. इमेज कैमरे में प्रोसेस की जाती हैं हैल.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY
: प्रोसेसर टाइप की मदद से, बार-बार होने वाले अनुरोध को कैप्चर करने के अनुरोध के नए पैरामीटर के साथ अपडेट करें. ऐसा नयाTotalCaptureResult
.PreviewExtenderImpl.getProcessor
कोRequestUpdateProcessorImpl
इंस्टेंस जोTotalCaptureResult
इंस्टेंस को प्रोसेस करता है और बार-बार होने वाले अनुरोध को अपडेट करने के लिए,CaptureStageImpl
इंस्टेंस.PreviewExtenderImpl.getCaptureStage()
में भी ये नतीजे दिखाए जाने चाहिए: प्रोसेस करेगा और नयाCaptureStageImpl
दिखाएगा.PROCESSOR_TYPE_IMAGE_PROCESSOR
: इस टाइप की मदद से,YUV_420_888
इमेज को प्रोसेस करने और आउटपुट को किसीPRIVATE
प्लैटफ़ॉर्म.लागू करने के लिए आपको
PreviewImageProcessorImpl
PreviewExtenderImpl.getProcessor
में इंस्टेंस. इसलिए, प्रोसेसरYUV_420_888
इनपुट इमेज को प्रोसेस करने के लिए. इसे आउटपुट को झलक काPRIVATE
फ़ॉर्मैट. इसके बजाय, Camera2/XYUV_420_888
प्लैटफ़ॉर्म का इस्तेमाल करता है वैल्यू कोPRIVATE
में सेCameraCaptureSession
को कॉन्फ़िगर करें.फ़्लो के लिए नीचे दिया गया उदाहरण देखें:
छठी इमेज. PreviewImageProcessorImpl
की मदद से फ़्लो की झलक देखें
PreviewImageProcessorImpl
इंटरफ़ेस ProcessImpl
तक विस्तार करता है और इसमें
तीन अहम तरीके हैं:
onOutputSurface(Surface surface, int imageFormat)
, आउटपुट प्लैटफ़ॉर्म को सेट करता है प्रोसेसर के लिए.PreviewImageProcessorImpl
के लिए,imageFormat
एक पिक्सल है फ़ॉर्मैट, जैसे किPixelFormat.RGBA_8888
.onResolutionUpdate(Size size)
इनपुट इमेज का साइज़ सेट करता है.onImageFormatUpdate(int imageFormat)
, इनपुट का इमेज फ़ॉर्मैट सेट करता है इमेज. फ़िलहाल, यह सिर्फ़YUV_420_888
हो सकता है.
इमेज कैप्चर प्रोसेसर
अभी भी कैप्चर के लिए, आप किसी
CaptureProcessorImpl
इंस्टॉल करने के लिए, ImageCaptureExtenderImpl.getCaptureProcessor
का इस्तेमाल करें. प्रोसेसर
यह कैप्चर की गई YUV_420_888
इमेज की सूची को प्रोसेस करने और
TotalCaptureResult
इंस्टेंस और आउटपुट को YUV_420_888
सरफ़ेस पर लिखें.
आप अब भी अनुरोध कैप्चर करता है.
नीचे दिए गए डायग्राम में फ़्लो देखें:
सातवीं इमेज. CaptureProcessorImpl
के साथ फ़्लो कैप्चर करें
Camera2/X,
YUV_420_888
फ़ॉर्मैट सरफ़ेस का इस्तेमाल करता है, ताकि कॉन्फ़िगर करने के लिए अब भी कैप्चर किया जा सके उस सेशन के बाद शुरू करते हैं. Camera2/X इस नंबर पर कॉल करके,CaptureProcessorImpl
को तैयार करता है:CaptureProcessorImpl.onImageFormatUpdate()
मेंYUV_420_888
की सदस्यता लें.- इनपुट इमेज के साइज़ के साथ
CaptureProcessorImpl.onResolutionUpdate()
. YUV_420_888
आउटपुट के साथCaptureProcessorImpl.onOutputSurface()
की जगह है.
ImageCaptureExtenderImpl.getCaptureStages
इनकी सूची दिखाता हैCaptureStageImpl
, जहां हर एलिमेंट कैप्चर पैरामीटर के साथCaptureRequest
इंस्टेंस को मैप करता है जिन्हें Camera2/X के ज़रिए भेजा जाता है. उदाहरण के लिए, अगर यह तीनCaptureStageImpl
इंस्टेंस, Camera2/X, कैप्चर करने के तीन अनुरोध इसके साथ भेजता है संबंधित कैप्चर पैरामीटरcaptureBurst
एपीआई.पाई गई इमेज और
TotalCaptureResult
इंस्टेंस एक साथ बंडल किए गए हैं और प्रोसेस के लिएCaptureProcessorImpl
को भेजा जाएगा.CaptureProcessorImpl
नतीजे की इमेज (YUV_420_888
फ़ॉर्मैट) कोonOutputSurface()
कॉल के ज़रिए दिया गया आउटपुट सरफ़ेस. Camera2/X इसे कन्वर्ट कर देता है इमेज को JPEG फ़ॉर्मैट में बदलें.
अनुरोध की कुंजियों और नतीजों को कैप्चर करने में मदद करने वाली सेवा
कैमरा प्रीव्यू और कैप्चर करने के अलावा, ऐप्लिकेशन ज़ूम सेट कर सकते हैं, फ़्लैश पैरामीटर, या टैप-टू-फ़ोकस ट्रिगर करना. ये पैरामीटर साथ काम करता है.
अनुमति देने के लिए, extensions-interface
के वर्शन 1.3.0 में ये तरीके जोड़े गए हैं
की मदद से उन पैरामीटर को दिखाया जा सकता है जो आपके ऐप्लिकेशन में काम करते हैं:
ImageCaptureExtenderImpl.getAvailableCaptureRequestKeys()
नतीजे के तौर पर उन अनुरोध कुंजियों को कैप्चर करें जो आपके लागू करने के साथ काम करती हैं.ImageCaptureExtenderImpl.getAvailableCaptureResultKeys()
नतीजे के तौर पर कैप्चर के नतीजे में मौजूद नतीजे कुंजियों को कैप्चर करें.
अगर कैमरा एचएएल, एक्सटेंशन को प्रोसेस करता है, तो Camera2/X कैप्चर की गई कार्रवाई को फिर से हासिल कर लेता है
नतीजे CameraCaptureSession.CaptureCallback
में मिले. हालांकि, अगर
प्रोसेसर लागू किया जाता है, तो Camera2/X कैप्चर के नतीजों को
ProcessResultImpl
, जिसे process()
को भेजा जाता है
में तरीका
PreviewImageProcessorImpl
और
CaptureProcessorImpl
.
शिकायत करने की ज़िम्मेदारी आपकी है
ProcessResultImpl
से लेकर Camera2/X तक कैप्चर किए गए नतीजे.
यहां उदाहरण के तौर पर, CaptureProcessorImpl
इंटरफ़ेस की परिभाषा देखें.
extensions-interface
के 1.3.0 या इसके बाद के वर्शन में, दूसरा process()
कॉल शुरू हो गया है:
Interface CaptureProcessorImpl extends ProcessorImpl {
// invoked when extensions-interface version < 1.3.0
void process(Map<Integer, Pair<Image, TotalCaptureResult>> results);
// invoked when extensions-interface version >= 1.3.0
void process(Map<Integer, Pair<Image, TotalCaptureResult>> results,
ProcessResultImpl resultCallback, Executor executor);
}
ज़ूम, टैप-टू-फ़ोकस, फ़्लैश, और एक्सपोज़र जैसी कैमरा कार्रवाइयों के लिए मुआवज़े के साथ-साथ, हमारा सुझाव है कि आप दोनों कैप्चर के लिए इन कुंजियों का इस्तेमाल करें अनुरोध करें और परिणाम कैप्चर करें:
- ज़ूम करना:
CaptureRequest#CONTROL_ZOOM_RATIO
CaptureRequest#SCALER_CROP_REGION
- फ़ोकस करने के लिए:
CaptureRequest#CONTROL_AF_MODE
CaptureRequest#CONTROL_AF_TRIGGER
CaptureRequest#CONTROL_AF_REGIONS
CaptureRequest#CONTROL_AE_REGIONS
CaptureRequest#CONTROL_AWB_REGIONS
- फ़्लैश:
CaptureRequest#CONTROL_AE_MODE
CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
CaptureRequest#FLASH_MODE
- एक्सपोज़र मुआवज़ा:
CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
1.2.0 या उससे पहले के वर्शन लागू करने वाले बेसिक एक्सटेंडर के लिए, CameraX
एक्सटेंशन एपीआई, ऊपर दी गई सभी कुंजियों के साथ साफ़ तौर पर काम करता है. इसके लिए
extensions-interface
1.3.0 में, CameraX और Camera2, दोनों लौटाए गए वर्शन की सूची में मौजूद हैं
और उसमें सिर्फ़ ज़रूरी कुंजियां काम करें. उदाहरण के लिए, अगर आपने
सिर्फ़ CaptureRequest#CONTROL_ZOOM_RATIO
और
CaptureRequest#SCALER_CROP_REGION
को 1.3.0 लागू करने के बाद, उसे
इसका मतलब है कि ऐप पर टैप करके फ़ोकस, फ़्लैश, और एक्सपोज़र सही होने पर सिर्फ़ ज़ूम किया जा सकता है
मुआवज़े की अनुमति नहीं है.
ऐडवांस एक्सटेंडर
ऐडवांस्ड एक्सटेंडर, Camera2 API पर आधारित एक तरह का वेंडर है.
यह एक्सटेंडर टाइप extensions-interface
के 1.2.0 वर्शन में जोड़ा गया था. इसके आधार पर
एक्सटेंशन, ऐप्लिकेशन लेयर में लागू किए जा सकते हैं.
जो इन कारकों पर निर्भर करती है:
कस्टम स्ट्रीम कॉन्फ़िगरेशन: RAW स्ट्रीम जैसी कस्टम स्ट्रीम कॉन्फ़िगर करें या अलग-अलग फ़िज़िकल कैमरा आईडी के लिए कई स्ट्रीम हों.
Camera2 अनुरोध भेजने की सुविधा: मुश्किल इंटरैक्शन की सुविधा एक ऐसा लॉजिक जो इन नतीजों के आधार पर, पैरामीटर के साथ कैप्चर करने के अनुरोध भेज सकता है पिछले अनुरोध.
ऐडवांस एक्सटेंडर एक रैपर या इंटरमीडिएट लेयर देता है. इसकी मदद से स्ट्रीम कॉन्फ़िगरेशन को कस्टमाइज़ करने और मांग पर कैप्चर करने के अनुरोध भेज सकते हैं.
ऐसी फ़ाइलें जिन्हें लागू करना है
ऐडवांस एक्सटेंडर लागू करने की सुविधा पर स्विच करने के लिए,
isAdvancedExtenderImplemented()
तरीका यहां मिला है
ExtensionVersionImpl
true
लौटाना होगा. हर तरह के एक्सटेंशन के लिए, OEM को
संबंधित एक्सटेंडर क्लास. ऐडवांस एक्सटेंडर लागू करने वाली फ़ाइलें
Advanced पैकेज में शामिल किया गया है.
लागू करने के लिए क्लास एक्सटेंडेट करें | |
---|---|
नाइट | advanced/NightAdvancedExtenderImpl.java
|
एचडीआर | advanced/HdrAdvancedExtenderImpl.java
|
अपने-आप | advanced/AutoAdvancedExtenderImpl.java
|
बोकेह | advanced/BokehAdvancedExtenderImpl.java
|
चेहरे की फ़ोटो क्वालिटी में सुधार | advanced/BeautyAdvancedExtenderImpl.java
|
हमने इस उदाहरण में, AdvancedExtenderImpl
को प्लेसहोल्डर के तौर पर इस्तेमाल किया है.
इसकी जगह पर उस एक्सटेंशन की फ़ाइल का नाम डालें जिसे
लागू करना.
आइए देखते हैं कि Camera2/X, तीन चरणों को पूरा करने के लिए, extensions-interface
को कैसे शुरू करता है
ऐप्लिकेशन फ़्लो में मिलेगा.
ऐप्लिकेशन फ़्लो 1: एक्सटेंशन की उपलब्धता देखना
आठवीं इमेज. बेहतर एक्सटेंडर पर ऐप्लिकेशन फ़्लो 1
सबसे पहले, ऐप्लिकेशन यह जांच करता है कि दिया गया एक्सटेंशन काम करता है या नहीं.
ऐप्लिकेशन का फ़्लो 2: क्वेरी की जानकारी
नौवीं इमेज. बेहतर एक्सटेंडर पर ऐप्लिकेशन फ़्लो 2
AdvancedExtenderImpl.init()
को कॉल करने के बाद, ऐप्लिकेशन
AdvancedExtenderImpl
पर दी गई जानकारी के मुताबिक:
अनुमानित अब भी कैप्चर होने में लगने वाला समय:
AdvancedExtenderImpl.getEstimatedCaptureLatencyRange()
इसकी रेंज दिखाता है ऐप्लिकेशन के लिए कैप्चर होने में लगने वाला समय तय करने की प्रोसेस के दौरान, मौजूदा स्थिति के लिए एक्सटेंशन चालू करें.झलक और कैप्चर करने के लिए इस्तेमाल किए जा सकने वाले रिज़ॉल्यूशन:
AdvancedExtenderImpl.getSupportedPreviewOutputResolutions()
, मैप दिखाता है 'इमेज फ़ॉर्मैट' को साइज़ की सूची में बदल दिया जाता है. और साइज़. OEM पर कम से कमPRIVATE
फ़ॉर्मैट काम करना चाहिए.AdvancedExtenderImpl.getSupportedCaptureOutputResolutions()
नतीजे के तौर पर स्टिल कैप्चर सरफ़ेस के लिए काम करने वाले फ़ॉर्मैट और साइज़. OEM को दोनों एट्रिब्यूट के साथ काम करना चाहिएJPEG
औरYUV_420_888
फ़ॉर्मैट आउटपुट.AdvancedExtenderImpl.getSupportedYuvAnalysisResolutions()
नतीजे के तौर पर इमेज के विश्लेषण के लिए ज़्यादाYUV_420_888
स्ट्रीम के लिए काम करने वाले साइज़. अगर इमेज विश्लेषण का YUV सरफ़ेस काम नहीं करता,getSupportedYuvAnalysisResolutions()
फ़ंक्शनnull
या एक खाली सूची देगा.
कैप्चर अनुरोध कुंजियां/नतीजे (
extensions-interface
1.3.0 में जोड़ी गईं): Camera2/X, कैप्चर की जा सकने वाली फ़ाइलों को वापस पाने के लिए इन तरीकों को शुरू करता है लागू की गई कुंजियों और नतीजे कुंजियों का अनुरोध करें:AdvancedExtenderImpl.getAvailableCaptureRequestKeys
AdvancedExtenderImpl.getAvailableCaptureResultKeys
ज़्यादा जानकारी के लिए, यह देखें कैप्चर अनुरोध कुंजियों और परिणामों में सहायता.
ऐप्लिकेशन फ़्लो 3: एक्सटेंशन चालू होने पर, झलक देखें/अब भी कैप्चर करें
10वीं इमेज. बेहतर एक्सटेंडर पर ऐप्लिकेशन फ़्लो 3
ऊपर दिए गए डायग्राम में, झलक को शुरू करने और अब भी कैप्चर करने का मुख्य फ़्लो दिखाया गया है ऐडवांस एक्सटेंडर टाइप चुनें. आइए, हर चरण पर गौर करें.
SessionProcessorImpl
इंस्टेंसमुख्य ऐडवांस एक्सटेंडर लागू करने की सुविधा
SessionProcessorImpl
में है, जो कस्टमाइज़ की गई सत्र कॉन्फ़िगरेशन उपलब्ध कराने और झलक कैप्चर करने के अनुरोधों को कैप्चर करें और फिर भी अनुरोध को कैप्चर करें.AdvancedExtenderImpl.createSessionProcessor()
को शुरू करने के लिए शुरू किया गया हैSessionProcessorImpl
इंस्टेंस.initSession
SessionProcessorImpl.initSession()
, एक्सटेंशन के लिए सेशन शुरू करता है. यहां पर संसाधन असाइन किए जाते हैं और सेशन को कॉन्फ़िगरेशन के तौर पर दिखाया जाता हैCameraCaptureSession
तैयार कर रही हूँ.इनपुट पैरामीटर के लिए, Camera2/X आउटपुट सरफ़ेस के कॉन्फ़िगरेशन की जानकारी देता है का इस्तेमाल किया जा सकता है. यह आउटपुट सरफ़ेस कॉन्फ़िगरेशन (
OutputSurfaceImpl
) में सरफ़ेस, साइज़, और इमेज शामिल है वे फ़ॉर्मैट जिन्हेंAdvancedExtenderImpl
में नीचे दिए गए तरीकों से फिर से पाया जाता है:getSupportedPreviewOutputResolutions()
getSupportedCaptureOutputResolutions()
getSupportedYuvAnalysisResolutions()
आपको
Camera2SessionConfigImpl
इंस्टेंस देना होगा, जिसमेंCamera2OutputConfigImpl
इंस्टेंस और इस्तेमाल किए गए सेशन पैरामीटर की सूचीCameraCaptureSession
को कॉन्फ़िगर करने के लिए. इसके लिए आप खुद ज़िम्मेदार हैं कैमरे से पास की गई इमेज के आउटपुट प्लैटफ़ॉर्म पर सही इमेज दिखाकर Camera2/X. आउटपुट चालू करने के लिए, यहां कुछ विकल्प दिए गए हैं:- कैमरा एचएएल में प्रोसेस किया जा रहा है: आउटपुट प्लैटफ़ॉर्म सीधे तौर पर जोड़े जा सकते हैं
SurfaceOutputConfigImpl
के साथCameraCaptureSession
के लिए लागू करना. इससे, दिया गया आउटपुट सरफ़ेस कैमरे पर कॉन्फ़िगर हो जाता है पाइपलाइन और कैमरा एचएएल को इमेज प्रोसेस करने की मंज़ूरी देता है. इंटरमीडिएट
ImageReader
सरफ़ेस (RAW, YUV वगैरह) प्रोसेस किया जा रहा है:CameraCaptureSession
के लिए बीच केImageReader
प्लैटफ़ॉर्मImageReaderOutputConfigImpl
इंस्टेंस.आपको बीच की इमेज प्रोसेस करनी होगी और नतीजों वाली इमेज को इस पर लिखना होगा की एक झलक दिखती है.
- कैमरा2 प्लैटफ़ॉर्म शेयर करने की सुविधा इस्तेमाल करना: किसी दूसरे सरफ़ेस के साथ सरफ़ेस शेयर करने की सुविधा इस्तेमाल करें
किसी भी
Camera2OutputConfigImpl
इंस्टेंस को किसी अन्य तरीके सेgetSurfaceSharingOutputConfigs()
Camera2OutputConfigImpl
इंस्टेंस. सतह का फ़ॉर्मैट और साइज़ एक जैसा.
सभी
Camera2OutputConfigImpl
, जिनमेंSurfaceOutputConfigImpl
औरImageReaderOutputConfigImpl
का यूनीक आईडी (getId()
) होना ज़रूरी है, जो इसका इस्तेमाल, टारगेट प्लैटफ़ॉर्म की जानकारी देने और इमेज को वापस पाने के लिए किया जाता हैImageReaderOutputConfigImpl
.onCaptureSessionStart
औरRequestProcessorImpl
CameraCaptureSession
के चालू होने और कैमरे का फ़्रेमवर्क चालू होने परonConfigured()
और फिर Camera2/X शुरू करता है Camera2 अनुरोध वालाSessionProcessorImpl.onCaptureSessionStart()
रैपरRequestProcessImpl
. Camera2/X,RequestProcessImpl
को लागू करता है, इसकी मदद से, कैप्चर के अनुरोध पूरे किए जा सकते हैं और अगरImageReaderOutputConfigImpl
का इस्तेमाल किया गया है, तो इमेज पाएं.RequestProcessImpl
एपीआई, Camera2 से मिलते-जुलते हैं अनुरोधों को एक्ज़ीक्यूट करने के लिएCameraCaptureSession
एपीआई. इनमें ये अंतर होते हैं:- टारगेट प्लैटफ़ॉर्म को
Camera2OutputConfigImpl
इंस्टेंस. ImageReader
की इमेज को वापस पाने की सुविधा.
RequestProcessorImpl.setImageProcessor()
को कॉल करने के लिए हैं.ImageProcessorImpl
इंस्टेंस को रजिस्टर करने के लिए,Camera2OutputConfigImpl
आईडी आपको इमेज नहीं मिल रही हैं.Camera2/X कॉल के बाद,
RequestProcessImpl
इंस्टेंस अमान्य हो जाता हैSessionProcessorImpl.onCaptureSessionEnd()
.- टारगेट प्लैटफ़ॉर्म को
झलक देखना शुरू करें और फ़ोटो लें
ऐडवांस एक्सटेंडर लागू करने पर, कैप्चर करने के अनुरोध भेजे जा सकते हैं
RequestProcessorImpl
इंटरफ़ेस के ज़रिए ऐसा किया जा सकता है. Camera2/X आपको इसके बारे में सूचना देता है पूर्वावलोकन के लिए दोहराए जाने का अनुरोध शुरू करें या फिर भी अनुक्रम कोSessionProcessorImpl#startRepeating
को कॉल किया जा रहा है औरSessionProcessorImpl#startCapture
. आपको कैप्चर करना चाहिए इन पूर्वावलोकन और स्टिल-कैप्चर अनुरोधों को पूरा करने के अनुरोध.Camera2/X इसके ज़रिए कैप्चर करने के अनुरोध का पैरामीटर भी सेट करता है
SessionProcessorImpl#setParameters
. आपको ये अनुरोध पैरामीटर सेट करने होंगे (अगर पैरामीटर काम करते हैं) दोहराए जाने वाले और एक अनुरोध, दोनों के लिए.आपको कम से कम
CaptureRequest.JPEG_ORIENTATION
औरCaptureRequest.JPEG_QUALITY
.extensions-interface
1.3.0 के साथ काम करने का अनुरोध और खोज के नतीजों वाली कुंजियां, जिन्हें नीचे दिए गए तरीकों से दिखाया जाता है:AdvancedExtenderImpl.getAvailableCaptureRequestKeys()
AdvancedExtenderImpl.getAvailableCaptureResultKeys()
जब डेवलपर
getAvailableCaptureRequestKeys
सूची में कुंजियों को सेट करते हैं, तो आपको पैरामीटर चालू करने होंगे और पक्का करना होगा कि कैप्चर नतीजे मेंgetAvailableCaptureResultKeys
सूची में कुंजियां मौजूद हैं.startTrigger
SessionProcessorImpl.startTrigger()
को ऐसे ट्रिगर को शुरू करने के लिए शुरू किया गया हैCaptureRequest.CONTROL_AF_TRIGGER
औरCaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER
. किसी भी अनुरोध से जुड़ी उन कुंजियों को कैप्चर करें जिनका विज्ञापन नहीं दिखाया गया हैAdvancedExtenderImpl.getAvailableCaptureRequestKeys()
.startTrigger()
,extensions-interface
के 1.3.0 से काम कर रहा है. यह ऐप्लिकेशन को एक्सटेंशन के साथ फ़ोकस करने और फ़्लैश लागू करने की सुविधा देता है.खाली करने के लिए जगह
कैप्चर सेशन खत्म करते समय, बंद करने से पहले
SessionProcessorImpl.onCaptureSessionEnd()
का अनुरोध किया जाता हैCameraCaptureSession
. कैप्चर सत्र बंद होने के बाद,deInitSession()
क्लीनअप करता है.
झलक, स्टिल कैप्चर, और इमेज का विश्लेषण करने की सुविधा
आपको झलक, दोनों के लिए एक्सटेंशन लागू करना चाहिए और फिर भी इस्तेमाल के उदाहरण कैप्चर करने चाहिए. हालांकि, अगर इंतज़ार का समय बहुत ज़्यादा है, तो आसानी से झलक नहीं देखी जा सकती है. सिर्फ़ स्टिल कैप्चर के लिए एक्सटेंशन लागू करें.
बेसिक एक्सटेंडर टाइप के लिए, भले ही एक्सटेंशन को झलक के लिए चालू किया गया हो,
आपको ImageCaptureExtenderImpl
और PreviewExtenderImpl
, दोनों लागू करने होंगे
दिए गए एक्सटेंशन के लिए. अक्सर, कोई ऐप्लिकेशन
इमेज का कॉन्टेंट, जैसे कि क्यूआर कोड या टेक्स्ट ढूंढना. इस्तेमाल के इस उदाहरण में बेहतर तरीके से मदद करने के लिए
के तौर पर सेट किया गया है, तो आपको प्रीव्यू, स्टिल कैप्चर, और किसी अन्य
CameraCaptureSession
को कॉन्फ़िगर करने के लिए YUV_420_888
स्ट्रीम. इसका मतलब है
कि अगर आप किसी प्रोसेसर को लागू करते हैं, तो आपको पूरी दुनिया में
तीन YUV_420_888
स्ट्रीम का मिला-जुला रूप.
ऐडवांस एक्सटेंडर के लिए, Camera2/X तीन आउटपुट प्लैटफ़ॉर्म
SessionProcessorImpl.initSession()
कॉल. इन आउटपुट प्लैटफ़ॉर्म की झलक देखी जा सकती है
, अब भी कैप्चर और इमेज विश्लेषण की सुविधा मिलती है. आपको यह पक्का करना होगा कि
और तब भी आउटपुट प्लैटफ़ॉर्म कैप्चर करें, जहां मान्य आउटपुट दिखाया जाए. हालांकि, इमेज के लिए
विश्लेषण आउटपुट की सतह मिल जाती है, तो पक्का करें कि यह सिर्फ़ तब काम करता हो, जब यह शून्य हो. अगर आपके
लागू करने की प्रक्रिया इमेज विश्लेषण स्ट्रीम पर काम नहीं कर रही है, तो आप खाली छोड़ सकते हैं
AdvancedExtenderImpl.getSupportedYuvAnalysisResolutions()
में दी गई सूची. यह
पक्का करता है कि इमेज के विश्लेषण का आउटपुट सरफ़ेस हमेशा खाली रहता है
SessionProcessorImpl.initSession()
.
वीडियो कैप्चर करने की सुविधा
कैमरा एक्सटेंशन का मौजूदा आर्किटेक्चर, सिर्फ़ झलक वाले मोड पर काम करता है और फ़ोटो
इस्तेमाल के उदाहरण कैप्चर करें. हम MediaCodec
पर एक्सटेंशन चालू करने की सुविधा नहीं देते
या वीडियो रिकॉर्ड करने के लिए MediaRecorder
प्लैटफ़ॉर्म. हालांकि, यह संभव है
इस्तेमाल किया जा सकता है.
MediaCodec
और MediaRecorder
प्लैटफ़ॉर्म के साथ काम करने की जांच जारी है.
एक्सटेंशन के लिए खास मेटाडेटा
Android 14 और उसके बाद वाले वर्शन के लिए, एक्सटेंशन के हिसाब से मेटाडेटा
कैमरा एक्सटेंशन क्लाइंट को एक्सटेंशन विशिष्ट कैप्चर सेट और प्राप्त करने देता है
सेटिंग और नतीजों के लिए अनुरोध करना. खास तौर पर, कैमरा एक्सटेंशन
क्लाइंट, कंट्रोल करने के लिए EXTENSION_STRENGTH
कैप्चर अनुरोध पैरामीटर का इस्तेमाल कर सकते हैं
एक्सटेंशन की मज़बूती और EXTENSION_CURRENT_TYPE
कैप्चर करने के नतीजे
चालू किए गए एक्सटेंशन का टाइप दिखाता है.
अनुरोध कैप्चर करें
कॉन्टेंट बनाने
EXTENSION_STRENGTH
अनुरोध पैरामीटर कैप्चर करें
यह एक्सटेंशन, पोस्ट-प्रोसेसिंग इफ़ेक्ट की स्ट्रेंथ को कंट्रोल करता है. संबंधित
अगर यह पैरामीटर सेट नहीं है, तो कैप्चर नतीजे में डिफ़ॉल्ट ताकत का मान शामिल होता है
साफ़ तौर पर बताया जा सकता है. यह पैरामीटर इनके लिए इस तरह से लागू किया जा सकता है
एक्सटेंशन प्रकार:
BOKEH
: यह कंट्रोल करता है कि वीडियो कितना धुंधला किया जाए.HDR
औरNIGHT
: फ़्यूज़न इमेज की मात्रा और इमेज की चमक को कंट्रोल करता है आखिरी इमेज.FACE_RETOUCH
: यह कंट्रोल करती है कि कॉस्मेटिक और स्किन को बेहतर बनाया जाए स्मूद करना.
EXTENSION_STRENGTH
पैरामीटर के लिए इस्तेमाल की जा सकने वाली रेंज 0
और
100
, जिसमें 0
बताया गया है कि कोई एक्सटेंशन प्रोसेसिंग या सामान्य पासथ्रू नहीं है और
100
, जो प्रोसेसिंग इफ़ेक्ट के लिए एक्सटेंशन की ज़्यादा से ज़्यादा क्षमता दिखाता है.
अगर आपको EXTENSION_STRENGTH
के लिए सहायता चाहिए, तो वेंडर का इस्तेमाल करें
एक्सटेंशन लाइब्रेरी के 1.3.0 वर्शन में खास पैरामीटर वाले एपीआई की शुरुआत की गई है
इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. ज़्यादा जानकारी के लिए, यह देखें
getAvailableCaptureRequestKeys()
.
नतीजे कैप्चर करें
कॉन्टेंट बनाने
EXTENSION_CURRENT_TYPE
कैप्चर से जुड़े नतीजों की मदद से, एक्सटेंशन लागू करने पर ग्राहकों को
एक्सटेंशन टाइप को चुनें.
क्योंकि AUTO
टाइप का इस्तेमाल करने वाले एक्सटेंशन, एक से दूसरे एक्सटेंशन पर डाइनैमिक तौर पर स्विच करते हैं
टाइप, जैसे कि HDR
और NIGHT
सीन की स्थिति के आधार पर, कैमरा
एक्सटेंशन ऐप्लिकेशन, EXTENSION_CURRENT_TYPE
का इस्तेमाल, यह जानकारी दिखाने के लिए कर सकते हैं:
AUTO
एक्सटेंशन के ज़रिए चुना गया मौजूदा एक्सटेंशन.
रीयल-टाइम में अब भी इंतज़ार के समय का अनुमान पाएं
Android 14 और उसके बाद वाले वर्शन के लिए, कैमरा एक्सटेंशन क्लाइंट
रीयल-टाइम में क्वेरी कर सकता है, फिर भी सीन के आधार पर इंतज़ार के समय का अनुमान लगा सकता है और
इसका इस्तेमाल करके,
getRealtimeStillCaptureLatency()
. यह
यह तरीका, स्टैटिक तुलना में ज़्यादा सटीक अनुमान देता है
getEstimatedCaptureLatencyRangeMillis()
तरीका. इंतज़ार के समय के अनुमान के आधार पर, ऐप्लिकेशन एक्सटेंशन को स्किप करने का फ़ैसला ले सकते हैं
उपयोगकर्ता को लंबे समय के बारे में सूचित करने के लिए संकेत देता है
काम नहीं कर रहा है.
CameraExtensionSession.StillCaptureLatency latency;
latency = extensionSession.getRealtimeStillCaptureLatency();
// The capture latency from ExtensionCaptureCallback#onCaptureStarted() until ExtensionCaptureCallback#onCaptureProcessStarted().
latency.getCaptureLatency();
// The processing latency from ExtensionCaptureCallback#onCaptureProcessStarted() until the processed frame returns to the client.
latency.getProcessingLatency();
रीयल-टाइम में इंतज़ार के समय का अनुमान लगाने के लिए, लागू करें निम्न:
- बुनियादी एक्सटेंशन:
ImageCaptureExtenderImpl.getRealtimeCaptureLatency()
- ऐडवांस एक्सटेंशन:
SessionProcessorImpl.getRealtimeCaptureLatency
प्रोसेस की प्रोसेस के कॉलबैक को कैप्चर करें
Android 14 और उसके बाद वाले वर्शन के लिए, कैमरा एक्सटेंशन क्लाइंट लंबे समय तक चल रही, अब भी कैप्चर की प्रोसेस के दौरान कॉलबैक मिल सकते हैं कार्रवाइयां. ऐप्लिकेशन, उपयोगकर्ताओं को मौजूदा प्रोग्रेस दिखा सकते हैं, ताकि उपयोगकर्ता अनुभव पर कोई असर नहीं पड़ेगा.
ऐप्लिकेशन इस सुविधा को जोड़ने के लिए इस कोड का इस्तेमाल कर सकते हैं:
import android.hardware.camera2.CameraExtensionSession.
ExtensionCaptureCallback;
{
…
class AppCallbackImpl extends ExtensionCaptureCallback {
…
@Override
public void onCaptureProcessProgressed(
@NonNull CameraExtensionSession session,
@NonNull CaptureRequest request,
@IntRange(from = 0, to = 100) int progress) {
// Update app UI with current progress
}
}
…
}
कैप्चर प्रोसेसिंग प्रोग्रेस कॉलबैक की सुविधा के लिए, आपका एक्सटेंशन वेंडर लागू करने की प्रोसेस के लिए, मौजूदा प्रोग्रेस के साथ इन कॉलबैक को कॉल करना ज़रूरी है मान:
- सामान्य एक्सटेंशन:
ProcessResultImpl.onCaptureProcessProgressed()
- ऐडवांस एक्सटेंशन:
CaptureCallback.onCaptureProcessProgressed()
पोस्टव्यू अब भी कैप्चर किया जाता है
Android 14 और उसके बाद वाले वर्शन के लिए, कैमरा एक्सटेंशन ये काम कर सकते हैं
इसका इस्तेमाल करके, पोस्टव्यू (झलक वाली इमेज) उपलब्ध कराने के लिए
setPostviewOutputConfiguration
.
उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, ऐप्लिकेशन पोस्टव्यू इमेज को
प्लेसहोल्डर जब किसी एक्सटेंशन की प्रोसेसिंग में इंतज़ार का समय ज़्यादा हो,
और जब फ़ाइनल इमेज उपलब्ध हो जाए, तब उस इमेज को बदल दें. ऐप्लिकेशन कॉन्फ़िगर कर सकते हैं
और नीचे दिए गए रेफ़रंस कोड का इस्तेमाल करके, पोस्टव्यू कैप्चर करने के अनुरोध जारी करें:
{
…
if (!CameraExtensionCharacteristics.isPostviewAvailable()) {
continue;
}
…
ExtensionSessionConfiguration extensionConfiguration = new
ExtensionSessionConfiguration(
CameraExtensionCharacteristics.EXTENSION_NIGHT,
outputConfig,
backgroundExecutor,
extensionSessionStateCallback
);
extensionConfiguration.setPostviewOutputConfiguration(
postviewImageOutput);
…
CaptureRequest.Builder captureRequestBuilder =
cameraDevice.createCaptureRequest(
CameraDevice.TEMPLATE_STILL_CAPTURE);
captureRequestBuilder.addTarget(stillImageReader.getSurface());
captureRequestBuilder.addTarget(postviewImageSurface);
CaptureRequest captureRequest = captureRequestBuilder.build();
…
}
पोस्टव्यू को अब भी कैप्चर करने की सुविधा का इस्तेमाल करने के लिए, वेंडर को लागू करने के लिए फ़ॉलो किया जा रहा है:
बुनियादी एक्सटेंशन:
CaptureProcessorImpl.onPostviewOutputSurface
औरCaptureProcessorImpl.processWithPostview
ऐडवांस एक्सटेंशन:
SessionProcessorImpl.startCaptureWithPostview
SurfaceView आउटपुट के साथ काम करता हो
Android 14 और उसके बाद वाले वर्शन के लिए, कैमरा एक्सटेंशन क्लाइंट
पावर और परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ की गई झलक रेंडर पाथ का इस्तेमाल कर सकता है. इसके लिए,
SurfaceView
का उदाहरण:
SurfaceView
आउटपुट के साथ काम करने के लिए, आपका वेंडर एक्सटेंशन लागू करना ज़रूरी है
यह SurfaceView
इंस्टेंस में झलक स्ट्रीम और आउटपुट करने की सुविधा देता है. यहां की यात्रा पर हूं
पुष्टि करें कि यह काम करता है, SurfaceViewExtensionPreviewTest.java
चलाएं
सीटीएस मॉड्यूल.
वेंडर के लिए खास तरह के सेशन
इस सुविधा की मदद से वेंडर एक्सटेंशन लागू करके, किसी वेंडर के लिए खास तरह का सेशन चुना जा सकता है. इस तरह के सेशन को डिफ़ॉल्ट वैल्यू के बजाय, इंंटरनल कैमरा कैप्चर सेशन में सेट किया जाएगा.
यह सुविधा पूरी तरह से फ़्रेमवर्क और वेंडर स्टैक में काम करती है. इससे क्लाइंट या सार्वजनिक तौर पर दिखने वाले एपीआई पर कोई असर नहीं पड़ता.
किसी वेंडर के हिसाब से सेशन टाइप चुनने के लिए, अपनी एक्सटेंशन लाइब्रेरी के लिए यह तरीका लागू करें:
* बुनियादी एक्सटेंशन के लिए ExtenderStateListener.onSessionType()
* बेहतर एक्सटेंशन के लिए Camera2SessionConfigImpl.getSessionType()
एक्सटेंशन इंटरफ़ेस वर्शन इतिहास
नीचे दी गई टेबल में, कैमरा एक्सटेंशन के इंटरफ़ेस का वर्शन इतिहास दिखाया गया है. आपने लोगों तक पहुंचाया मुफ़्त में वेंडर लाइब्रेरी को हमेशा सबसे नए वर्शन के साथ लागू करना चाहिए.
वर्शन | जोड़ी गई सुविधाएं |
---|---|
1.0.0 |
|
1.1.0 |
|
1.2.0 |
|
1.3.0 |
|
1.4.0 |
|
रेफ़रंस फ़ाइल को लागू करना
OEM वेंडर लाइब्रेरी को इन देशों में लागू करने की जानकारी दी गई है
frameworks/ex
.
advancedSample
: ऐडवांस एक्सटेंडर को बुनियादी तौर पर लागू करना.sample
: बेसिक एक्सटेंडर को बुनियादी तौर पर लागू करना.service_based_sample
: लागू करने का तरीका, जो होस्ट करने का तरीका दिखाता है इस ब्राउज़र में कैमरा एक्सटेंशनService
. इस प्रोसेस में ये कॉम्पोनेंट शामिल होते हैं:oem_library
: Camera2 और CameraX एक्सटेंशन एपीआई के लिए कैमरा एक्सटेंशन OEM लाइब्रेरी जोExtensions-Interface
को लागू करता है. यह ऐसे पासथ्रू के तौर पर काम करता है जोExtensions-Interface
से कॉल को सेवा पर फ़ॉरवर्ड करता है. यह लाइब्रेरी यह आपको बातचीत करने के लिए AIDL फ़ाइलें और रैपर क्लास भी देता है सेवा.ऐडवांस एक्सटेंडर डिफ़ॉल्ट रूप से चालू रहता है. बेसिक एक्सटेंडर चालू करने के लिए, वापस लौटाने के लिए
ExtensionsVersionImpl#isAdvancedExtenderImplemented
को बदलेंfalse
.extensions_service
: एक्सटेंशन सेवा को लागू करने का सैंपल. लागू करने की प्रक्रिया जोड़ें यहां. इस सेवा में लागू किया जाने वाला इंटरफ़ेस मिलता-जुलता हैExtensions-Interface
तक. उदाहरण के लिए,IAdvancedExtenderImpl.Stub
वही कार्रवाइयां करता है जोAdvancedExtenderImpl
.ImageWrapper
औरTotalCaptureResultWrapper
Image
औरTotalCaptureResult
को पार्स करने लायक बनाने के लिए ज़रूरी है.
किसी डिवाइस पर वेंडर लाइब्रेरी सेट अप करना
OEM वेंडर लाइब्रेरी किसी ऐप्लिकेशन में पहले से मौजूद नहीं होती है; इसे डिवाइस से लोड किया जाता है
कैमरा2/X के रनटाइम पर. CameraX में, <uses-library>
टैग
androidx.camera.extensions.impl
लाइब्रेरी, जिसकी जानकारी
AndroidManifest.xml
camera-extensions
लाइब्रेरी की फ़ाइल, CameraX पर निर्भर है और यह
और रनटाइम के दौरान लोड होता है. Camera2 में, फ़्रेमवर्क ऐसी एक्सटेंशन सेवा लोड करता है जो
यह भी बताता है कि <uses-library>
रनटाइम में androidx.camera.extensions.impl
लाइब्रेरी का इस्तेमाल किया जा सकता है.
इससे एक्सटेंशन का इस्तेमाल करने वाले तीसरे पक्ष के ऐप्लिकेशन, OEM को अपने-आप लोड होने देते हैं वेंडर लाइब्रेरी. OEM लाइब्रेरी को 'ज़रूरी नहीं' के तौर पर मार्क किया गया है, ताकि ऐप्लिकेशन को डिवाइसों पर चलाया जा सके जिनके पास डिवाइस पर लाइब्रेरी नहीं है. जब कोई ऐप्लिकेशन कैमरे का इस्तेमाल करने की कोशिश करता है, तब Camera2/X इस कार्रवाई को अपने-आप मैनेज कर लेता है एक्सटेंशन, जब तक कि डिवाइस निर्माता OEM लाइब्रेरी को ताकि ऐप्लिकेशन उसे खोज सके.
किसी डिवाइस पर OEM लाइब्रेरी सेट अप करने के लिए, यह तरीका अपनाएं:
- अनुमति वाली फ़ाइल जोड़ें, जो
<uses-library>
टैग के लिए ज़रूरी है. इसके लिए, नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करें:/etc/permissions/ANY_FILENAME.xml
. इसके लिए उदाहरण,/etc/permissions/camera_extensions.xml
. इस में मौजूद फ़ाइलें डायरेक्ट्री,<uses-library>
में मौजूद लाइब्रेरी की मैपिंग असली फ़ाइल पाथ मिलता है. फ़ाइल में ज़रूरी जानकारी जोड़ने के लिए, नीचे दिए गए उदाहरण का इस्तेमाल करें.
name
मौजूदा समय मेंandroidx.camera.extensions.impl
होना चाहिए वह लाइब्रेरी जिसे CameraX ने खोजा था.file
उस फ़ाइल का ऐब्सलूट पाथ होता है जिसमें एक्सटेंशन लागू करना (उदाहरण के लिए,/system/framework/androidx.camera.extensions.impl.jar
).
<?xml version="1.0" encoding="utf-8"?> <permissions> <library name="androidx.camera.extensions.impl" file="OEM_IMPLEMENTED_JAR" /> </permissions>
Android 12 या उसके बाद के वर्शन वाले डिवाइस, जिन पर CameraX काम करता है
एक्सटेंशन में ro.camerax.extensions.enabled
प्रॉपर्टी को true
पर सेट होना चाहिए,
जिससे यह क्वेरी की जा सकती है कि डिवाइस पर एक्सटेंशन काम करते हैं या नहीं.
ऐसा करने के लिए, डिवाइस फ़ाइल में नीचे दी गई लाइन जोड़ें:
PRODUCT_VENDOR_PROPERTIES += \
ro.camerax.extensions.enabled=true \
पुष्टि करें
इस अवधि के दौरान OEM वेंडर लाइब्रेरी के लागू होने की जांच करने के लिए
डेवलपमेंट चरण है, तो
androidx-main/camera/integration-tests/extensionstestapp/
जो अलग-अलग वेंडर एक्सटेंशन के ज़रिए चलते हैं.
लागू करने के बाद, कैमरा एक्सटेंशन की पुष्टि करने वाला टूल ऑटोमेटेड और मैन्युअल तरीके से जांच करेगा, ताकि यह पुष्टि की जा सके कि वेंडर लाइब्रेरी सही तरीके से लागू किया गया हो.
एक्सटेंडेड सीन मोड और कैमरा एक्सटेंशन की तुलना
बोकेह एक्सटेंशन के लिए, कैमरा एक्सटेंशन का इस्तेमाल करके उसे दिखाने के अलावा,
एक्सटेंडेड सीन मोड का इस्तेमाल करके, एक्सटेंशन को बिना अनुमति के सार्वजनिक कर सकता है. इस मोड को इसके ज़रिए चालू किया जाता है
यह
CONTROL_EXTENDED_SCENE_MODE
बटन दबाएं.
लागू करने के बारे में ज़्यादा जानकारी के लिए, कैमरा बोकेह देखें.
एक्सटेंशन के कैमरा एक्सटेंशन की तुलना में, एक्सटेंडेड सीन मोड में कम पाबंदियां होती हैं
कैमरा2 ऐप्लिकेशन. उदाहरण के लिए, एक्सटेंडेड सीन मोड को
सामान्य CameraCaptureSession
इंस्टेंस, जो फ़्लेक्सिबल स्ट्रीम के साथ काम करता है
का इस्तेमाल करें और अनुरोध पैरामीटर को कैप्चर करें. इसके उलट, कैमरा एक्सटेंशन
जिनमें तय की गई स्ट्रीम टाइप ही इस्तेमाल किए जा सकते हों और कॉन्टेंट कैप्चर करने के लिए सीमित तौर पर सहायता उपलब्ध हो
अनुरोध पैरामीटर.
एक्सटेंडेड सीन मोड का एक नुकसान यह है कि इसे सिर्फ़ कैमरा एचएएल का मतलब है कि सभी पर काम करने के लिए इसकी पुष्टि की जानी ज़रूरी है ऐप्लिकेशन डेवलपर के लिए उपलब्ध ऑर्थोगोनल कंट्रोल.
हमारा सुझाव है कि एक्सटेंडेड सीन मोड और कैमरे, दोनों का इस्तेमाल करके बोकेह की जानकारी दें ऐसे एक्सटेंशन क्योंकि ऐप्लिकेशन, बोकेह की सुविधा चालू करने के लिए किसी खास एपीआई का इस्तेमाल कर सकते हैं. हमारा सुझाव है कि आप पहले एक्सटेंडेड सीन मोड का इस्तेमाल करें. ऐसा इसलिए, क्योंकि यह सबसे ज़्यादा ऐप्लिकेशन के लिए बोकेह एक्सटेंशन को चालू करने का आसान तरीका. इसके बाद, आप कैमरा एक्सटेंशन इंटरफ़ेस, एक्सटेंडेड सीन मोड पर आधारित है. अगर लागू की जा रही है, तो उदाहरण के लिए, कैमरा एचएएल में बोकेह इस्तेमाल करना मुश्किल है, क्योंकि इसके लिए पोस्ट डालने की ज़रूरत होती है अगर यह प्रोसेसर ऐप्लिकेशन लेयर में चल रहा है, तो हम इमेज को प्रोसेस करने के लिए बोकेह एक्सटेंशन की मदद से बनाया गया है.
अक्सर पूछे जाने वाले सवाल
क्या एपीआई लेवल पर कोई पाबंदी है?
हां. यह Android API की सुविधा के उस सेट पर निर्भर करता है जो OEM के लिए ज़रूरी है
वेंडर लाइब्रेरी को लागू करने की सुविधा. उदाहरण के लिए,
ExtenderStateListener.onPresetSession()
SessionConfiguration.setSessionParameters()
टैग का बेसलाइन सेट सेट करने के लिए कॉल करें. यह कॉल सिर्फ़ एपीआई लेवल पर उपलब्ध है
28 और उससे ज़्यादा. इंटरफ़ेस की खास विधियों के बारे में जानने के लिए,
एपीआई के बारे में जानकारी देने वाले दस्तावेज़.