Android, डिवाइसों को एक साथ कई कैमरे डिवाइसों से स्ट्रीम करने की सुविधा देता है. उदाहरण के लिए, इससे किसी डिवाइस में सामने और पीछे के कैमरे एक साथ काम कर सकते हैं. Android 11 में, Camera2 API में ये तरीके शामिल हैं. इनका इस्तेमाल करके ऐप्लिकेशन यह पता लगा सकते हैं कि कैमरे एक साथ स्ट्रीमिंग की सुविधा के साथ काम करते हैं या नहीं. साथ ही, यह भी पता लगाया जा सकता है कि कैमरे किन स्ट्रीम कॉन्फ़िगरेशन के साथ काम करते हैं.
getConcurrentCameraIds
: हाल ही में कनेक्ट किए गए कैमरा डिवाइस के कॉम्बिनेशन का सेट फ़ेच करता है ऐसे आइडेंटिफ़ायर जो कैमरे के डिवाइस के सेशन को एक साथ कॉन्फ़िगर करने की सुविधा देते हैं.isConcurrentSessionConfigurationSupported
: यह जांच करता है कि कैमरा डिवाइसों के दिए गए सेट और उनके सेशन कॉन्फ़िगरेशन को एक साथ कॉन्फ़िगर किया जा सकता है या नहीं.
स्ट्रीम के ऐसे ज़रूरी कॉम्बिनेशन का सेट जिन्हें एक साथ स्ट्रीम के दौरान इस्तेमाल किया जाना चाहिए
में स्ट्रीमिंग की सुविधा होती है. इसकी मदद से,
SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS
प्रॉपर्टी.
getConcurrentStreamingCameraIds()
के ज़रिए विज्ञापन किए गए हर कैमरा डिवाइस के लिए, यह ज़रूरी है कि
एक ही समय पर होने वाली स्ट्रीम के लिए, नीचे दी गई गारंटी के साथ कॉन्फ़िगरेशन की सुविधा काम करती हो.
टारगेट 1 | टारगेट 2 | |||
---|---|---|---|---|
टाइप | ज़्यादा से ज़्यादा साइज़ | टाइप | ज़्यादा से ज़्यादा साइज़ | इस्तेमाल के उदाहरण |
YUV | एस1440 पिक्सल | इन-ऐप्लिकेशन वीडियो या इमेज प्रोसेसिंग | ||
प्राइवसी | s1440p | ऐप्लिकेशन में व्यूफ़ाइंडर का विश्लेषण | ||
JPEG | एस1440 पिक्सल | व्यूफ़ाइंडर से स्टिल इमेज कैप्चर नहीं की जा सकती | ||
YUV / PRIV | s720p | JPEG | s1440p | स्टैंडर्ड स्टिल इमेज |
YUV / PRIV | s720p | YUV / PRIV | s1440p | इन-ऐप्लिकेशन वीडियो या झलक के साथ प्रोसेसिंग |
MONOCHROME
सुविधा वाले डिवाइस
(CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
शामिल हैं
CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
)
Y8 के साथ काम करने वाले
अलग-अलग स्ट्रीम के कॉम्बिनेशन उपलब्ध हैं.
s720p
का मतलब 720 पिक्सल (1280 x 720) या StreamConfigurationMap.getOutputSizes()
से मिले किसी फ़ॉर्मैट के लिए, इस्तेमाल किए जा सकने वाले ज़्यादा से ज़्यादा रिज़ॉल्यूशन से है.
s1440p
का मतलब 1440 पिक्सल (1920 x 1440) या StreamConfigurationMap.getOutputSizes()
से दिखाए गए किसी फ़ॉर्मैट के लिए, काम करने वाले ज़्यादा से ज़्यादा रिज़ॉल्यूशन से है.
जिन डिवाइसों में ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
की सुविधाएं शामिल नहीं हैं उनमें एक साथ काम करने के दौरान, कम से कम एक Y16 स्ट्रीम, Dataspace::DEPTH
के साथ sVGA रिज़ॉल्यूशन का होना ज़रूरी है. यहां sVGA, इन दोनों रिज़ॉल्यूशन में से छोटा होना चाहिए:
- दिए गए फ़ॉर्मैट के लिए ज़्यादा से ज़्यादा आउटपुट रिज़ॉल्यूशन
- 640 x 480
लागू करना
ऐप्लिकेशन को किसी डिवाइस से क्वेरी करने की अनुमति देने के लिए, यह पता लगाया जा सकता है कि उसके कैमरे एक साथ स्ट्रीमिंग की सुविधा के साथ काम करते हैं या नहीं. इसके लिए, ICameraProvider@2.6
एचएएल इंटरफ़ेस लागू करें. इसमें ये तरीके शामिल हैं:
ICameraProvider@2.6
एचएएल इंटरफ़ेस को लागू करने के बारे में जानने के लिए, EmulatedCameraProviderHWLImpl.cpp
पर जाकर, एमुलेट की गई कैमरा एचएएल लाइब्रेरी देखें.
पुष्टि करें
इस सुविधा को लागू करने के बाद, यह जांच करने के लिए कि यह आपकी उम्मीद के मुताबिक काम कर रही है या नहीं, ConcurrentCameraTest.java
के CTs टेस्ट का इस्तेमाल करें. साथ ही, किसी ऐसे ऐप्लिकेशन का इस्तेमाल करके जांच करें जो कई कैमरे खोलकर काम करता हो
साथ-साथ इस्तेमाल कर सकते हैं.
संसाधनों के बंटवारे से जुड़े सवाल
अगर कैमरा एचएएल, साथ ही, उन्हें संसाधनों के बंटवारे से जुड़ी समस्याएं हो सकती हैं. खास तौर पर, ऐसा ऐसे मामले में जहां इमेज सिग्नल प्रोसेसर (आईएसपी) के संसाधन, फ़ोन को आगे और पीछे (या दूसरे) कैमरे से एक साथ स्ट्रीम किया जा सकता है, लेकिन पूरा नहीं कर सकते. इस मामले में, कैमरा एचएएल को हर कैमरा डिवाइस के लिए सीमित हार्डवेयर संसाधनों को आवंटित करना होगा.
उदाहरण के तौर पर
इस समस्या के बारे में यहां बताया गया है.
समस्या
डिवाइस का कॉन्फ़िगरेशन यह है:
- कैमरा आईडी
0
एक लॉजिकल कैमरा है, जो वाइड और अल्ट्रा-वाइड डिज़ाइन वाला है के लिए इस्तेमाल किया जाता है, जिसमें से हर एक इंटरनेट इंटरनेट सेवा देने वाली कंपनी (आईएसपी) के संसाधन का इस्तेमाल करता है. - कैमरा आईडी
1
ऐसा कैमरा है जो एक इंटरनेट सेवा देने वाली कंपनी (आईएसपी) के संसाधन की मदद लेता है.
डिवाइस (फ़ोन) में दो आईएसपी हैं. अगर कैमरा आईडी 0
खोला गया है और कोई सेशन कॉन्फ़िगर किया गया है, तो हो सकता है कि कैमरा एचएएल, अल्ट्रा-वाइड और वाइड कैमरे, दोनों के इस्तेमाल की उम्मीद में दो आईएसपी को रिज़र्व कर ले.
अगर ऐसा है, तो सामने वाला कैमरा (आईडी 1
) किसी भी स्ट्रीम को कॉन्फ़िगर नहीं कर सकता, क्योंकि दोनों आईएसपी का इस्तेमाल किया जा रहा है.
समाधान
इस समस्या को ठीक करने के लिए, फ़्रेमवर्क 0
और 1
कैमरा आईडी को खोल सकता है
करने से पहले, कैमरा एचएएल को यह संकेत देने के लिए सेशन को कॉन्फ़िगर किया है कि
संसाधनों का बंटवारा किया जा सकता है (क्योंकि अब कैमरे एक साथ काम कर सकते हैं).
हालांकि, इससे कुछ सुविधाएं सीमित हो सकती हैं. उदाहरण के लिए, हो सकता है कि ज़ूम करने पर, ज़ूम की पूरी रेंज का अनुपात मैनेज न हो पाए. इसकी वजह यह है कि फ़िज़िकल कैमरे के आईडी स्विच करने में समस्या आ सकती है.
इस समाधान को लागू करने के लिए, ये अपडेट करें:
provider@2.6::ICameraProvider::getConcurrentCameraStreamingCameraIds
.
मैंडेट के मुताबिक कैमरों के एक साथ काम करने के लिए, फ़्रेमवर्क को
@3.2::ICameraDevice::open
कैमरा डिवाइसों पर किसी भी सेशन को कॉन्फ़िगर करती है. इससे कैमरा ऐक्सेस करने की अनुमति मिलती है देने वालों को उसी के हिसाब से संसाधन असाइन करने होंगे.पूरी तरह से काम न कर पाने की समस्या को हल करने के लिए ज़ूम सीमा अनुपात, पक्का करें कि कैमरे का एक साथ उपयोग करते समय कैमरा ऐप्लिकेशन,
ZOOM_RATIO
की कंट्रोल सेटिंग को सिर्फ़ 1x सेMAX_DIGITAL_ZOOM
पूरीZOOM_RATIO_RANGE
के बजाय (यह आंतरिक रूप से कैमरे के स्विच को रोकता है, जो को इंटरनेट सेवा देने वाली अन्य कंपनियों की ज़रूरत है).
TestDualCameraPreview में समस्या
ऊपर दिए गए अपडेट करने पर, MultiViewTest.java#testDualCameraPreview
टेस्ट की अनुमति वाले व्यवहार में समस्या आ सकती है.
टेस्ट testDualCameraPreview
, सेशन को सिर्फ़ खोलने के बाद कॉन्फ़िगर नहीं करता है
सभी कैमरे. यह इस क्रम के बाद आता है:
for each camera in cameraDevices :
device = openCamera(camera)
createCaptureSession(device);
हालांकि, ERROR_MAX_CAMERAS_IN_USE [1]
के साथ कैमरा खोलने में आने वाली समस्याओं को सहन किया जाता है. तीसरे पक्ष के ऐप्लिकेशन इस तरीके से काम कर सकते हैं.
क्योंकि कैमरा एचएएल को खोले जा रहे कैमरा आईडी के पूरे सेट की जानकारी नहीं मिलेगी से पहले, एक साथ काम करने की ज़रूरत नहीं होती. इसलिए, हो सकता है कि यह मानते हुए कि हार्डवेयर संसाधन उपलब्ध कराए जाएंगे (यह मानते हुए कि उनके लिए थोड़ी प्रतिस्पर्धा हो सकती है).
इस समस्या को हल करने के लिए, पुराने सिस्टम के साथ काम करने के साथ-साथ
एक ही समय पर स्ट्रीम करने की सुविधा का इस्तेमाल करते समय, कैमरा एचएएल से openCamera
कॉल पूरे नहीं होंगे
अगर फ़ुल स्ट्रीम कॉन्फ़िगरेशन की सुविधा काम नहीं करती, तो ERROR_MAX_CAMERAS_IN_USE
को
सभी कैमरे एक साथ चल रहे हैं.