कई कैमरों से ऐक्सेस करने की सुविधा

Android 9 पर, एक से ज़्यादा कैमरों के लिए एपीआई की सुविधा लॉन्च की गई दो या दो से ज़्यादा फ़िज़िकल कैमरे से बने नए लॉजिकल कैमरा डिवाइस के ज़रिए डिवाइस भी देख सकते हैं. लॉजिकल कैमरा डिवाइस है एक कैमरा डिवाइस/कैप्चरसेशन के तौर पर, ऐसे ऐप्लिकेशन में दिखाया जाता है जो HAL से इंटिग्रेट की गई एक से ज़्यादा कैमरे वाली सुविधाओं के साथ इंटरैक्शन. ऐप्लिकेशन विकल्प के तौर पर, ये काम कर सकते हैं कैमरा स्ट्रीम, मेटाडेटा, और कंट्रोल को ऐक्सेस और कंट्रोल कर सकती हैं.

कई कैमरों से ऐक्सेस करने की सुविधा

पहली इमेज. कई कैमरों से ऐक्सेस करने की सुविधा

इस डायग्राम में, अलग-अलग कैमरा आईडी को अलग-अलग कलर कोड से दिखाया गया है. ऐप्लिकेशन ये काम कर सकता है एक ही समय में हर कैमरे से चलाए जा रहे रॉ बफ़र का इस्तेमाल करें. यह भी है अलग-अलग कंट्रोल सेट किए जा सकते हैं और अलग-अलग कैमरे.

उदाहरण और सोर्स

एक से ज़्यादा कैमरे वाले डिवाइस के विज्ञापन, एक से ज़्यादा कैमरों से कनेक्ट करने की लॉजिकल क्षमता.

कैमरा क्लाइंट किसी खास डिवाइस के कैमरा आईडी से क्वेरी कर सकते हैं लॉजिकल कैमरा getPhysicalCameraIds(). इसके बाद, नतीजे के तौर पर दिखाए गए आईडी का इस्तेमाल, डिवाइसों को कंट्रोल करने के लिए किया जाता है व्यक्तिगत रूप से के माध्यम से setPhysicalCameraId(). ऐसे अलग-अलग अनुरोधों के नतीजों के लिए, पूरी तरह से क्वेरी की जा सकती है. शुरू करने से नतीजा getPhysicalCameraResults().

कैमरे के कुछ अनुरोधों के लिए, कैमरे के कुछ ही अनुरोधों का इस्तेमाल किया जा सकता है पैरामीटर का इस्तेमाल करें. इस्तेमाल किए जा सकने वाले पैरामीटर की सूची पाने के लिए, डेवलपर getAvailablePhysicalCameraRequestKeys().

फ़िज़िकल कैमरा स्ट्रीम की सुविधा, सिर्फ़ ऐसे अनुरोधों के लिए काम करती है जिन्हें फिर से प्रोसेस न किया गया हो. यह सुविधा सिर्फ़ मोनोक्रोम और बेयर सेंसर के लिए उपलब्ध है.

लागू करना

सहायता चेकलिस्ट

HAL की तरफ़ एक से ज़्यादा कैमरे वाले लॉजिकल डिवाइस जोड़ने के लिए:

  • जोड़ें ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA दो या दो से ज़्यादा फ़िज़िकल कैमरे के साथ काम करने वाले किसी भी लॉजिकल कैमरा डिवाइस की क्षमता कैमरे, जो किसी ऐप्लिकेशन के संपर्क में भी आ जाते हैं.
  • स्टैटिक वैल्यू को भरें ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS कैमरे के आईडी की सूची के साथ मेटाडेटा फ़ील्ड.
  • डेप्थ से जुड़े स्टैटिक मेटाडेटा को पॉप्युलेट करें, ताकि इनके बीच संबंध जोड़ा जा सके कैमरे से की गई लाइव स्ट्रीम' पिक्सेल: ANDROID_LENS_POSE_ROTATION ANDROID_LENS_POSE_TRANSLATION, ANDROID_LENS_INTRINSIC_CALIBRATION, ANDROID_LENS_DISTORTION, ANDROID_LENS_POSE_REFERENCE.
  • स्टैटिक सेट करें ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE मेटाडेटा फ़ील्ड को:

  • अपने-आप जानकारी भर जाना ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS जिसमें अलग-अलग कैमरों के लिए काम करने वाले पैरामीटर की सूची दी गई हो. कॉन्टेंट बनाने अगर लॉजिकल डिवाइस अलग-अलग अनुरोधों के साथ काम नहीं करता, तो सूची खाली हो सकती है.

  • अगर अलग-अलग अनुरोध स्वीकार किए जाते हैं, तो उस व्यक्ति के अनुरोध को प्रोसेस और लागू करें physicalCameraSettings जो कैप्चर अनुरोधों के हिस्से के रूप में आ सकती है और physicalCameraMetadata उसी के हिसाब से.

  • कैमरा एचएएल डिवाइस के वर्शन 3.5 के लिए (Android 10 में पेश किया गया) या इसके बाद के वर्शन के लिए, ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID परिणाम कुंजी मौजूदा सक्रिय कैमरे के आईडी का उपयोग कर रही है लॉजिकल कैमरा.

Android 9 वर्शन वाले डिवाइसों के लिए, कैमरे वाले डिवाइसों के लिए यह ज़रूरी है एक लॉजिकल YUV/RAW स्ट्रीम को एक ही साइज़ (RAW स्ट्रीम पर लागू नहीं होता) और दो फ़िज़िकल कैमरे. यह सेटिंग, Android 10 वर्शन वाले डिवाइसों पर लागू नहीं होती है.

Android 10 वर्शन वाले डिवाइसों के लिए, जहां कैमरा एचएएल डिवाइस का वर्शन है 3.5 या बाद के वर्शन के लिए, कैमरा डिवाइस को isStreamCombinationSupported का इस्तेमाल करके, यह क्वेरी की जा सकती है कि किसी स्ट्रीम के खास कॉम्बिनेशन में शामिल है या नहीं लाइव स्ट्रीम की सुविधा उपलब्ध है.

स्ट्रीम कॉन्फ़िगरेशन मैप

लॉजिकल कैमरे के लिए, इस कैमरे डिवाइस के लिए ज़रूरी स्ट्रीम संयोजन कुछ हार्डवेयर लेवल, ज़रूरतों के समान होता है CameraDevice.createCaptureSession. स्ट्रीम कॉन्फ़िगरेशन मैप में सभी स्ट्रीम, लॉजिकल स्ट्रीम होनी चाहिए.

फ़िज़िकल सब-कैमरा के साथ RAW फ़ॉर्मैट की क्षमता वाले लॉजिकल कैमरा डिवाइस के लिए ऐप्लिकेशन, लॉजिकल RAW स्ट्रीम को कॉन्फ़िगर करता है, तो लॉजिकल कैमरा डिवाइस को अलग-अलग फ़िज़िकल सब-कैमरा पर स्विच नहीं करना चाहिए सेंसर के साइज़. इससे यह पक्का होता है कि कैप्चर किए गए मौजूदा RAW ऐप्लिकेशन काम करना बंद न करें.

के बीच स्विच करके, एचएएल की मदद से लागू किए गए ऑप्टिकल ज़ूम का फ़ायदा पाने के लिए RAW कैप्चर के दौरान फ़िज़िकल सब-कैमरे इस्तेमाल किए जाते हैं, तो ऐप्लिकेशन को लॉजिकल RAW स्ट्रीम के बजाय फ़िज़िकल सब-कैमरा स्ट्रीम को कॉन्फ़िगर करें.

गारंटी के साथ स्ट्रीम का कॉम्बिनेशन

लॉजिकल कैमरा और उसमें मौजूद फ़िज़िकल कैमरे, दोनों को स्ट्रीम के ज़रूरी कॉम्बिनेशन ज़रूरी है.

लॉजिकल कैमरा डिवाइस को फ़िज़िकल कैमरे की तरह ही काम करना चाहिए जो उनके हार्डवेयर लेवल और क्षमताओं के हिसाब से तय होते हैं. हमारा सुझाव है कि सुविधा सेट, व्यक्तिगत कैमरों का सुपरसेट है.

Android 9 वर्शन वाले डिवाइसों पर, 'किराया रिफ़ंड की गारंटी' वाली हर सुविधा स्ट्रीम कॉम्बिनेशन, लॉजिकल कैमरे को इनके साथ काम करना चाहिए:

  • एक लॉजिकल YUV_420_888 या रॉ स्ट्रीम को एक अलग फ़िज़िकल कैमरे से लिया गया है. साथ ही, उस साइज़ और फ़ॉर्मैट में साइज़ और फ़ॉर्मैट फ़िज़िकल कैमरों पर काम करते हैं.

  • लॉजिकल कैमरे के हिसाब से, हर कैमरे से दो रॉ स्ट्रीम जोड़ना RAW की क्षमता का विज्ञापन नहीं करता, लेकिन बुनियादी कैमरों में काम किया जाता है. ऐसा आम तौर पर तब होता है, जब किसी कैमरे में सेंसर के साइज़ अलग-अलग होते हैं.

  • समान आकार की तार्किक स्ट्रीम के बजाय भौतिक स्ट्रीम का उपयोग करना और फ़ॉर्मैट. इससे कैप्चर की फ़्रेम रेट धीमी नहीं होनी चाहिए. फ़िज़िकल और लॉजिकल स्ट्रीम के लिए, कम से कम फ़्रेम अवधि एक जैसी है.

परफ़ॉर्मेंस और पावर से जुड़ी ज़रूरी बातें

  • परफ़ॉर्मेंस:

    • फ़िज़िकल स्ट्रीम कॉन्फ़िगर और स्ट्रीम करने से, सीमित संसाधनों की वजह से, लॉजिकल कैमरे के कैप्चर होने की दर.
    • कैमरे की फ़िज़िकल सेटिंग लागू करने पर, कैप्चर करने की दर धीमी हो सकती है: पहले से मौजूद कैमरों का फ़्रेम रेट अलग-अलग होता है.
  • पावर:

    • डिफ़ॉल्ट केस में, एचएएल का पावर ऑप्टिमाइज़ेशन काम करता रहेगा.
    • लाइव स्ट्रीम को कॉन्फ़िगर करने या उसका अनुरोध करने से, एचएएल की इंटरनल टेक्नोलॉजी बदल सकती है पावर ऑप्टिमाइज़ेशन और पावर का ज़्यादा इस्तेमाल होता है.

पसंद के मुताबिक बनाएं

नीचे दिए गए तरीकों की मदद से, डिवाइस में अपनी पसंद के मुताबिक बदलाव किए जा सकते हैं.

  • लॉजिकल कैमरा डिवाइस का फ़्यूज़ किया गया आउटपुट पूरी तरह से एचएएल पर निर्भर करता है लागू करना. फ़्यूज़्ड लॉजिकल स्ट्रीम किस तरह से बनती हैं, इस बारे में फ़ैसला कैमरे, ऐप्लिकेशन और Android कैमरे के साथ पारदर्शी हैं फ़्रेमवर्क शामिल है.
  • हर फ़िज़िकल अनुरोध और नतीजों के लिए, इस विकल्प का इस्तेमाल किया जा सकता है. कॉन्टेंट बनाने ऐसे अनुरोधों में उपलब्ध पैरामीटर का सेट पूरी तरह से एचएएल को लागू करना होगा.
  • Android 10 से, एचएएल आम तौर पर आपके ऐसे कैमरे जिन्हें कोई भी ऐप्लिकेशन, 'नहीं' चुनकर, सीधे खोल सकता है में कुछ या सभी PHYSICAL_ID का विज्ञापन करें getCameraIdList. getPhysicalCameraCharacteristics को कॉल किया जा रहा है को फ़िज़िकल कैमरे की विशेषता दिखानी होगी.

पुष्टि करें

किसी भी दूसरे सामान्य कैमरे की तरह, लॉजिकल मल्टी-कैमरे डिवाइसों वाले डिवाइसों को भी कैमरे के सीटीएस को पास करना ज़रूरी है. इस तरह के डिवाइस को टारगेट करने वाले टेस्ट केस, LogicalCameraDeviceTest मॉड्यूल का इस्तेमाल नहीं किया जाएगा.

आईटीएस की इन तीन जांचों में, एक से ज़्यादा कैमरे वाले सिस्टम टारगेट किए जाते हैं, ताकि काम के इमेज का एक साथ इस्तेमाल:

पहले सीन और 4 का टेस्ट, बॉक्स में मौजूद आईटीएस टेस्ट रिग. test_multi_camera_match परीक्षण दावा करता है कि जब दोनों कैमरे चालू हों, तब इमेज के बीच की इमेज मेल खा रही है. कॉन्टेंट बनाने test_multi_camera_alignment जांच में पाया गया है कि कैमरे के बीच के स्पेस, ओरिएंटेशन, और डिस्टॉर्शन पैरामीटर सही तरीके से लोड होते हैं. अगर कई कैमरों वाला सिस्टम एक वाइड एफ़ओवी कैमरा (>90o) शामिल है, तो आईटीएस बॉक्स का Rev2 वर्शन ज़रूरी है.

Sensor_fusion, दूसरी टेस्ट रिग है, जो फ़ोन नंबर को बार-बार टेस्ट करने की सुविधा देती है से पता चलता है कि जाइरोस्कोप और इमेज सेंसर के टाइमस्टैंप एक-दूसरे से मेल खाते हैं और कई कैमरों वाले फ़्रेम सिंक हो रहे हैं.

सभी बॉक्स Acuspec, Inc. के ज़रिए उपलब्ध हैं. (www.acuspecinc.com, fred@acuspecinc.com) और MYWAY मैन्युफ़ैक्चरिंग (www.myway.tw, sales@myway.tw). इसके अलावा, Rev1 ITS बॉक्स को West-Mark को खरीदा जा सकता है (www.west-mark.com, (जैसे, dgoodman@west-mark.com) को भेजा गया था.

सबसे सही तरीके

एक से ज़्यादा कैमरों से चालू की गई सुविधाओं का पूरा फ़ायदा पाने के लिए, साथ काम करने के लिए, ऐप्लिकेशन के साथ काम करने के लिए लॉजिकल तरीके को लागू करते समय, इन सबसे सही तरीकों को अपनाएं कई कैमरों वाला डिवाइस:

  • (Android 10 या उसके बाद वाले वर्शन के लिए) से फ़िज़िकल सब-कैमरे छिपाएं getCameraIdList. इससे उन कैमरों की संख्या कम हो जाती है जिन्हें सीधे खोला जा सकता है साथ ही, ऐप्लिकेशन के लिए कैमरा चुनने के लॉजिक की ज़रूरत को खत्म कर दिया जाता है.
  • (Android 11 या उसके बाद का वर्शन) लॉजिकल मल्टी-कैमरे के लिए ऑप्टिकल ज़ूम की सुविधा देने वाला डिवाइस, ANDROID_CONTROL_ZOOM_RATIO लागू करें एपीआई, और ANDROID_SCALER_CROP_REGION का इस्तेमाल करें का इस्तेमाल करें. ANDROID_CONTROL_ZOOM_RATIO इससे डिवाइस को ज़ूम आउट करने और बेहतर सटीक जानकारी पाने में मदद मिलती है. इस मामले में, एचएएल को ANDROID_SCALER_CROP_REGION के कोऑर्डिनेट सिस्टम को अडजस्ट करना होगा, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, और ANDROID_STATISTICS_FACE_LANDMARKS को ठीक करने के लिए, सेंसर के ऐक्टिव अरे के तौर पर, फ़ील्ड ऑफ़ व्यू (कैमरे से दिख रहा व्यू) का इस्तेमाल करें. ज़्यादा जानकारी पाने के लिए, ANDROID_SCALER_CROP_REGION ANDROID_CONTROL_ZOOM_RATIO के साथ मिलकर काम करता है, camera3_crop_reprocess#cropping देखें.
  • अलग-अलग कैमरों वाले एक से ज़्यादा कैमरों के लिए सुविधाओं के लिए, पक्का करें कि डिवाइस एक तय वैल्यू के लिए सपोर्ट करता हो या कंट्रोल की रेंज सिर्फ़ तब, जब पूरी ज़ूम रेंज, या श्रेणी. उदाहरण के लिए, अगर लॉजिकल कैमरा अल्ट्रावाइड से बना है, तो ये काम करें:
    • अगर फ़िज़िकल कैमरों के चालू अरे साइज़ अलग-अलग हैं, तो कैमरा HAL को फ़िज़िकल कैमरों के चालू अरे से मैपिंग ANDROID_SCALER_CROP_REGION के लिए लॉजिकल कैमरा ऐक्टिव अरे, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, और ANDROID_STATISTICS_FACE_LANDMARKS ताकि ऐप्लिकेशन के नज़रिए से, निर्देशांक सिस्टम, लॉजिकल कैमरे का ऐक्टिव अरे साइज़ होता है.
    • अगर चौड़े और टेलीफ़ोटो कैमरे से ऑटोफ़ोकस की सुविधा मिलती है, लेकिन अल्ट्रावाइड लेंस के साथ कैमरे में फ़ोकस फ़िक्स है. पक्का करें कि लॉजिकल कैमरा, ऑटोफ़ोकस के विज्ञापन दिखाता हो सहायता. अल्ट्रावाइड लेंस के लिए, एचएएल को ऑटोफ़ोकस स्टेट मशीन की तरह काम करना चाहिए ताकि जब ऐप अल्ट्रावाइड लेंस को ज़ूम आउट करे, तो डिवाइस में मौजूद कैमरे का फ़ोकस ऐप में साफ़ तौर पर दिख रहा है, साथ ही, काम करने वाले एएफ़ मोड के लिए ऑटोफ़ोकस स्टेट मशीनें इस तरह काम करती हैं उम्मीद है.
    • अगर चौड़े और टेलीफ़ोटो कैमरे 4K @ 60 एफ़पीएस (फ़्रेम प्रति सेकंड) पर काम करते हैं और अल्ट्रावाइड कैमरा सिर्फ़ 4K @ 30 FPS (फ़्रेम प्रति सेकंड) या 1080 पिक्सल @ 60 FPS (फ़्रेम प्रति सेकंड) पर काम करता है, लेकिन 4K @ 60 FPS (फ़्रेम प्रति सेकंड) नहीं, पक्का करें कि लॉजिकल कैमरा, 4k @ का विज्ञापन न दिखाता हो 60 एफ़पीएस (फ़्रेम प्रति सेकंड) तक ट्रैक किए जा सकते हैं. इससे गारंटी के साथ लॉजिकल कैमरा की क्षमताओं की पूरी सुरक्षा देता है, ताकि यह पक्का किया जा सके कि ऐप पर 4k @ 60 FPS (फ़्रेम प्रति सेकंड) की दर से कनेक्ट न होने की समस्या का सामना करना पड़ता है ANDROID_CONTROL_ZOOM_RATIO वैल्यू 1 से कम होनी चाहिए.
  • Android 10 से शुरू किया गया, एक लॉजिकल मल्टी-कैमरा ज़रूरी नहीं है कि लाइव स्ट्रीम के कॉम्बिनेशन में फ़िज़िकल स्ट्रीम बनाई जा सकें. अगर एचएएल में फ़िज़िकल स्ट्रीम एक साथ इस्तेमाल की जा सकती हैं, तो:
    • (Android 11 या इसके बाद वाले वर्शन) ऐप्लिकेशन के इस्तेमाल को बेहतर तरीके से मैनेज करने के लिए जैसे स्टीरियो और मोशन ट्रैकिंग से डेप्थ की जानकारी पाने के लिए, फ़ील्ड ऑफ़ व्यू (कैमरे से दिख रहा व्यू) से मिलने वाली फ़िज़िकल स्ट्रीम आउटपुट मिलने की संभावना 50% है. हालांकि, अगर कोई भौतिक स्ट्रीम और तार्किक स्ट्रीम एक ही फ़िज़िकल कैमरा, हार्डवेयर की सीमाएं, किसी फ़िज़िकल स्ट्रीम को लॉजिकल स्ट्रीम जैसी रखें.
    • कई बार लाइव स्ट्रीम करने की वजह से, मेमोरी में होने वाले दबाव को ठीक करने के लिए, पक्का करें कि ऐप्लिकेशन discardFreeBuffers का इस्तेमाल करते हों फ़्री बफ़र को बंद करने के लिए, हालाँकि, निर्माता ने उसे अभी तक मंज़ूरी नहीं दी है) अगर लाइव स्ट्रीम कुछ समय के लिए इस्तेमाल में नहीं है.
    • अगर अलग-अलग कैमरे से की जाने वाली लाइव स्ट्रीम आम तौर पर उसी अनुरोध के साथ अटैच किया गया है, तो पक्का करें कि ऐप्लिकेशन surface group का इस्तेमाल करते हों इससे एक बफ़र सूची का इस्तेमाल, ऐप्लिकेशन के सामने वाले दो प्लैटफ़ॉर्म का बैक अप लेने के लिए किया जा सकेगा, इससे मेमोरी कम खर्च होती है.