अनुरोध
ऐप्लिकेशन फ़्रेमवर्क, कैमरे के सबसिस्टम में कैप्चर किए गए नतीजों के लिए अनुरोध जारी करता है. एक अनुरोध, नतीजों के एक सेट के लिए काम करता है. अनुरोध में सभी शामिल होते हैं उन नतीजों को कैप्चर और प्रोसेस करने के बारे में कॉन्फ़िगरेशन की जानकारी. इसमें रिज़ॉल्यूशन और पिक्सल फ़ॉर्मैट जैसी चीज़ें शामिल हैं; मैन्युअल सेंसर, लेंस, और फ़्लैश कंट्रोल मिले; 3A ऑपरेटिंग मोड; RAW से YUV प्रोसेसिंग कंट्रोल; और आंकड़े जनरेट करना. इससे परिणामों पर अधिक नियंत्रण मिलता है' आउटपुट और प्रोसेसिंग. एक बार में एक से ज़्यादा अनुरोध दिखाए जा सकते हैं और अनुरोध सबमिट करने से ब्लॉक नहीं हो रहा है. और अनुरोध हमेशा प्रोसेस किए जाते हैं ऑर्डर मिलने का क्रम तय कर दिया जाता है.
एचएएल और कैमरा सबसिस्टम
कैमरा सबसिस्टम में कैमरे के कॉम्पोनेंट को लागू करने की प्रोसेस शामिल होती है पाइपलाइन जैसे कि 3A एल्गोरिदम और प्रोसेसिंग कंट्रोल. कैमरा एचएएल आपके लिए इंटरफ़ेस उपलब्ध कराता है. इसकी मदद से, इन कॉम्पोनेंट के वर्शन लागू किए जा सकते हैं. यहां की यात्रा पर हूं अलग-अलग डिवाइस मैन्युफ़ैक्चरर और अलग-अलग प्लैटफ़ॉर्म पर काम करने की सुविधा को बनाए रखना इमेज सिग्नल प्रोसेसर (आईएसपी या कैमरा सेंसर) वेंडर, कैमरा पाइपलाइन यह मॉडल वर्चुअल है और सीधे इंटरनेट सेवा देने वाली किसी कंपनी (आईएसपी) से सीधे तौर पर जुड़ा नहीं है. हालांकि, यह वास्तविक प्रोसेसिंग पाइपलाइन के समान होता है, ताकि आप इसे अपने बेहतर तरीके से काम करता है. साथ ही, यह एक ऐसा एआई है जिसमें कई किसी भी टूल से समझौता किए बिना, अलग-अलग एल्गोरिदम और काम करने के क्रम और क्रॉस-डिवाइस के साथ काम करता है.
कैमरा पाइपलाइन उन ट्रिगर का भी इस्तेमाल करती है जिन्हें ऐप्लिकेशन फ़्रेमवर्क शुरू कर सकता है ऑटो-फ़ोकस जैसी चीज़ें चालू करने के लिए. इससे सूचनाएं भी वापस ऐप्लिकेशन का फ़्रेमवर्क, ऑटो-फ़ोकस लॉक या गड़बड़ियों जैसे इवेंट के बारे में ऐप्लिकेशन को सूचना देता है.
कृपया ध्यान दें कि ऊपर दिए गए डायग्राम में इमेज प्रोसेसिंग के कुछ ब्लॉक को नहीं दिखाया गया है अच्छी तरह से परिभाषित किया गया है. कैमरा पाइपलाइन इन कामों को करती है अनुमान:
- RAW बेयर आउटपुट को इंटरनेट सेवा देने वाली कंपनी (आईएसपी) के अंदर किसी भी तरह की प्रोसेसिंग नहीं की जाती.
- आंकड़े, सेंसर डेटा के आधार पर जनरेट किए जाते हैं.
- रॉ सेंसर डेटा को YUV में बदलने वाले अलग-अलग प्रोसेसिंग ब्लॉक का इस्तेमाल करें.
- हालांकि, एक से ज़्यादा स्केल और क्रॉप की यूनिट दिखाई गई हैं, लेकिन सभी स्केलर यूनिट आउटपुट क्षेत्र कंट्रोल (डिजिटल ज़ूम). हालांकि, हर यूनिट के लिए उसकी अलग-अलग वैल्यू हो सकती हैं आउटपुट रिज़ॉल्यूशन और पिक्सल फ़ॉर्मैट.
एपीआई के इस्तेमाल के बारे में खास जानकारी
इस खास जानकारी में, Android Camera API इस्तेमाल करने का तरीका बताया गया है. ज़्यादा जानकारी के लिए,
स्टार्टअप और अनुमानित ऑपरेशन का क्रम सेक्शन, जहां प्रॉडक्ट की पूरी जानकारी देखी जा सकती है
साथ ही, एपीआई कॉल की भी ज़रूरत पड़ेगी.
- कैमरा डिवाइसों को सुनें और उनकी गिनती करें.
- डिवाइस खोलें और लिसनर को कनेक्ट करें.
- टारगेट के इस्तेमाल के उदाहरण के लिए, आउटपुट कॉन्फ़िगर करना. जैसे, अब भी कैप्चर करना, रिकॉर्ड करना, वगैरह).
- टारगेट किए जाने वाले इस्तेमाल के उदाहरण के लिए अनुरोध तैयार करें.
- अनुरोधों और बर्स्ट को कैप्चर/दोहराना.
- नतीजे का मेटाडेटा और इमेज का डेटा पाएं.
- इस्तेमाल के उदाहरण स्विच करते समय, तीसरे चरण पर वापस जाएं.
एचएएल से जुड़ी कार्रवाइयों के बारे में खास जानकारी
- कैप्चर के लिए एसिंक्रोनस अनुरोध, फ़्रेमवर्क से आते हैं.
- HAL डिवाइस को अनुरोधों को क्रम से प्रोसेस करना होगा. और हर अनुरोध के लिए, आउटपुट के नतीजे का मेटाडेटा, और एक या एक से ज़्यादा आउटपुट इमेज बफ़र.
- अनुरोधों और नतीजों के लिए फ़र्स्ट-इन, फ़र्स्ट-आउट, और इनसे जुड़ी स्ट्रीम के लिए को ब्लॉक कर दिया जाएगा.
- किसी अनुरोध के सभी आउटपुट के लिए टाइमस्टैंप एक जैसे होने चाहिए, ताकि फ़्रेमवर्क ज़रूरत पड़ने पर उनका एक साथ मिलान कर सकता है.
- 3A रूटीन को छोड़कर, सभी कैप्चर कॉन्फ़िगरेशन और स्थिति अनुरोधों और नतीजों में शामिल किया जाता है.
शुरुआती चरण और अनुमानित कार्रवाई का क्रम
इस सेक्शन में पूरी जानकारी दी गई है कि कैमरा एपीआई. कृपया देखें HIDL इंटरफ़ेस के लिए प्लैटफ़ॉर्म/हार्डवेयर/इंटरफ़ेस/कैमरा/ परिभाषाएं.
गिनती करें, कैमरा डिवाइस खोलें, और कोई चालू सेशन बनाएं
- शुरू करने के बाद, फ़्रेमवर्क किसी भी उपहार को सुनना शुरू कर देता है
कैमरा मुहैया कराने वाली कंपनियां, जो
ICameraProvider
इंटरफ़ेस. अगर सेवा देने वाली कंपनी या प्रोवाइडर मौजूद हैं, तो फ़्रेमवर्क एक-दूसरे से कनेक्ट करने की कोशिश करेगा. - फ़्रेमवर्क, कैमरा डिवाइसों की गिनती इसके ज़रिए करता है:
ICameraProvider::getCameraIdList()
. - यह फ़्रेमवर्क, संबंधित
ICameraDevice
ICameraProvider::getCameraDeviceInterface_VX_X()
. - फ़्रेमवर्क, नई इमेज बनाने के लिए
ICameraDevice::open()
को कॉल करता है सक्रिय कैप्चर सत्र ICameraDeviceसेशन.
किसी चालू कैमरा सेशन का इस्तेमाल करें
- फ़्रेमवर्क,
ICameraDeviceSession::configureStreams()
को कॉल करता है के साथ-साथ HAL डिवाइस पर इनपुट/आउटपुट स्ट्रीम की सूची के साथ. - फ़्रेमवर्क, कस्टम सेटिंग के साथ काम करने के कुछ उदाहरणों के लिए, डिफ़ॉल्ट सेटिंग का अनुरोध करता है
ICameraDeviceSession::constructDefaultRequestSettings()
पर किए गए कॉल. ऐसाICameraDeviceSession
के बाद किसी भी समय हो सकता हैICameraDevice::open
ने बनाया. - फ़्रेमवर्क, पहले कैप्चर अनुरोध को बनाता है और एचएएल को इसके साथ भेजता है
डिफ़ॉल्ट सेटिंग के किसी सेट के आधार पर और कम से कम एक
ऐसी आउटपुट स्ट्रीम जिसे फ़्रेमवर्क में पहले रजिस्टर किया जा चुका है. यह भेज दिया गया है
ICameraDeviceSession::processCaptureRequest()
के साथ एचएएल पर पहुंच जाएंगे. एचएएल को इस कॉल को तब तक ब्लॉक करना होगा, जब तक यह अगले कॉल के लिए तैयार नहीं हो जाता को भेजने का अनुरोध करता है. - यह फ़्रेमवर्क, अनुरोध और कॉल सबमिट करना जारी रखता है
पाने के लिए
ICameraDeviceSession::constructDefaultRequestSettings()
ज़रूरत के हिसाब से इस्तेमाल के अन्य उदाहरणों के लिए, डिफ़ॉल्ट सेटिंग बफ़र होती हैं. - जब किसी अनुरोध को कैप्चर करना शुरू होता है (सेंसर,
कैप्चर करें), तो HAL
ICameraDeviceCallback::notify()
को SHUTTER मैसेज, जिसमें फ़्रेम नंबर और शुरू होने का टाइमस्टैंप शामिल है को खतरा हो सकता है. इस सूचना कॉलबैक की ज़रूरत, पहली बार आने से पहले नहीं होनी चाहिए अनुरोध करने के लिएprocessCaptureResult()
कॉल किया गया, लेकिन कोई नतीजा नहीं मिला इस तारीख तक कैप्चर करने के लिए, ऐप्लिकेशन पर डिलीवर किया जाएगा इस कैप्चर के लिएnotify()
को कॉल किया जाता है. - पाइपलाइन में कुछ देर होने पर, एचएएल उन कैप्चर डेटा को लौटाना शुरू कर देता है जो पूरे हो चुके हैं
फ़्रेमवर्क को बेहतर बनाने के लिए,
ICameraDeviceCallback::processCaptureResult()
के साथ इस्तेमाल किया जा सकता है. इन्हें उसी क्रम में लौटाया जाता है जिस क्रम में अनुरोध सबमिट किए गए थे. एक से ज़्यादा अनुरोध एक साथ चल सकते हैं, जो कि पाइपलाइन की गहराई पर निर्भर करते हैं कैमरा एचएएल डिवाइस.
कुछ समय बाद, इनमें से कोई एक समस्या होगी:
- फ़्रेमवर्क नए अनुरोध सबमिट करना बंद कर सकता है. इंतज़ार करें
पूरा किए जाने वाले मौजूदा कैप्चर (सभी बफ़र भरे गए, सभी परिणाम
वापस करें) और फिर
ICameraDeviceSession::configureStreams()
पर कॉल करें फिर से. इससे कैमरा हार्डवेयर और पाइपलाइन को नए सेट के लिए रीसेट किया जाता है इनपुट/आउटपुट स्ट्रीम. कुछ स्ट्रीम पिछली स्ट्रीम का फिर से इस्तेमाल की जा सकती हैं कॉन्फ़िगरेशन. इसके बाद, फ़्रेमवर्क पहले कैप्चर अनुरोध से जारी रहता है को HAL को भेजना होगा, अगर कम से कम एक रजिस्टर की गई आउटपुट स्ट्रीम सेव रहेगी. (अन्यथा, सबसे पहले,ICameraDeviceSession::configureStreams()
को भरना ज़रूरी है.) - फ़्रेमवर्क
ICameraDeviceSession::close()
को कॉल कर सकता है कैमरा सेशन को खत्म करने के लिए. इसे किसी भी समय कॉल किया जा सकता है, जब कोई और कॉल न हो फ़्रेमवर्क से चालू होते हैं, हालांकि कॉल तब तक ब्लॉक हो सकता है, जब तक इन-फ़्लाइट कैप्चर पूरे हो गए हैं (सभी नतीजे लौटाए गए, सभी बफ़र भरा गया).close()
कॉल के बाद, इन्हें कोई और कॉल नहीं किया जाएगा एचएएल सेICameraDeviceCallback
की अनुमति है. एक बारclose()
कॉल चल रहा है, हो सकता है कि फ़्रेमवर्क किसी अन्य को कॉल न करे HAL डिवाइस के फ़ंक्शन. - किसी गड़बड़ी या एसिंक्रोनस इवेंट में शामिल होने पर, एचएएल को कॉल करना चाहिए
उचित के साथ
ICameraDeviceCallback::notify()
कोई गड़बड़ी या इवेंट मैसेज भेज सकता है. पूरे डिवाइस पर गंभीर गड़बड़ी की सूचना मिलने पर, एचएएल को इस तरह से काम करना चाहिए जैसे किclose()
को कॉल किया गया हो. हालांकि, एचएएल को या तो रद्द कर दो याnotify()
को कॉल करने से पहले सभी बकाया कैप्चर पूरे करें, ताकि एक बारnotify()
को गंभीर गड़बड़ी के साथ कॉल किया जाता है, फ़्रेमवर्क डिवाइस से अन्य कॉलबैक पाएं. इसके अलावा दूसरे तरीकेclose()
वापस आना चाहिए -notify()
तरीके के अमान्य नतीजे से मिलने के बाद, ENODEV या नल गड़बड़ी का मैसेज दिखना चाहिए.
हार्डवेयर लेवल
कैमरा डिवाइस, अपने हिसाब से कई हार्डवेयर लेवल लागू कर सकते हैं सुविधाएं. ज़्यादा जानकारी के लिए, यह देखें काम करता है.
ऐप्लिकेशन कैप्चर करने के अनुरोध, 3A कंट्रोल, और प्रोसेस करने वाली पाइपलाइन के बीच इंटरैक्शन
3A कंट्रोल ब्लॉक की सेटिंग के आधार पर, कैमरा पाइपलाइन अनदेखा करती है ऐप्लिकेशन के कैप्चर अनुरोध के कुछ पैरामीटर और उन वैल्यू का इस्तेमाल करता है इसके बजाय, 3A कंट्रोल रूटीन से मिलता है. उदाहरण के लिए, जब ऑटो-एक्सपोज़र यह होता है के चालू होने, एक्सपोज़र समय, फ़्रेम अवधि, और संवेदनशीलता पैरामीटर सेंसर को प्लैटफ़ॉर्म 3A एल्गोरिदम और ऐप्लिकेशन की तय की गई वैल्यू से कंट्रोल किया जाता है नज़रअंदाज़ किए जाते हैं. 3A रूटीन से फ़्रेम के लिए चुनी गई वैल्यू, रिपोर्ट की जानी चाहिए आउटपुट मेटाडेटा में. नीचे टेबल में, 3A कंट्रोल ब्लॉक और वे प्रॉपर्टी जिन्हें इन मोड से कंट्रोल किया जाता है. यहां जाएं: Platform/system/media/camera/docs/docs.html फ़ाइल का इस्तेमाल करके इन प्रॉपर्टी की परिभाषाएं जान सकते हैं.
पैरामीटर | राज्य | प्रॉपर्टी कंट्रोल की गईं |
---|---|---|
android.control.aeMode | बंद | कोई नहीं |
चालू है | android.sensor.exposureTime android.sensor.frame अवधि android.sensor.sensitivity android.lens.aperture (अगर यह सुविधा काम करती है) android.Lens.filterDensity (अगर यह सुविधा काम करती है) | |
अपने-आप चालू होने की सुविधा चालू करें | सब कुछ चालू है. साथ ही, android.flash.firingPower, android.flash.firingTime, और android.flash.mode | |
चालू_ALWAYS_FLASH | ON_AUTO_FLASH के समान | |
ऑन_ऑटो_FLASH_RED_EYE | ON_AUTO_FLASH के समान | |
android.control.awbMode | बंद | कोई नहीं |
WHITE_बैलेंस_* | android.colorसुधार.transform में शामिल करना. अगर android.color पिछलेion.mode FAST या HIGH_QUALITY है, तो प्लैटफ़ॉर्म के हिसाब से खास बदलाव. | |
android.control.afMode | बंद | कोई नहीं |
फ़ोकस_मोड_* | android.Lens.focusडिस्टेंस | |
android.control.videoStabilization | बंद | कोई नहीं |
चालू है | वीडियो स्टेबलाइज़ेशन लागू करने के लिए, android.Scaler.CrpRegion को अडजस्ट किया जा सकता है | |
android.control.mode | बंद | AE, AWB, और AF अक्षम हैं |
ऑटो | व्यक्तिगत AE, AWB, और AF सेटिंग का उपयोग किया जाता है | |
सीनिंग_मोड_* | ऊपर दिए गए सभी पैरामीटर को बदल सकता है. अलग-अलग 3A नियंत्रण अक्षम हैं. |
इमेज 2 में इमेज प्रोसेसिंग ब्लॉक के सभी कंट्रोल, है और आम तौर पर हर ब्लॉक में तीन मोड होते हैं:
- बंद: यह प्रोसेसिंग ब्लॉक बंद है. मोज़ेक, रंग में सुधार करने की सुविधा, और टोन कर्व अडजस्टमेंट ब्लॉक बंद नहीं किए जा सकते.
- तेज़: इस मोड में, हो सकता है कि प्रोसेसिंग ब्लॉक आउटपुट फ़्रेम को धीमा न करे बंद मोड की तुलना में दर, लेकिन इसे इस्तेमाल करने पर सबसे अच्छी क्वालिटी अपने आउटपुट के हिसाब से कैसे काम करता है. आम तौर पर, इसका इस्तेमाल इन चीज़ों के लिए किया जाएगा झलक या वीडियो रिकॉर्डिंग मोड या स्टिल इमेज के लिए बर्स्ट कैप्चर. कुछ पर यह बंद मोड जैसा हो सकता है (इसके बिना कोई प्रोसेसिंग नहीं की जा सकती फ़्रेम रेट को धीमा कर देता है), और कुछ डिवाइसों पर यह दर हाई_क्वालिटी मोड (सबसे अच्छी क्वालिटी अब भी फ़्रेम रेट को कम नहीं करती).
- हाई_क्वालिटी: इस मोड में, प्रोसेसिंग ब्लॉक से सबसे अच्छी क्वालिटी साथ ही, ज़रूरत के हिसाब से आउटपुट फ़्रेम रेट को धीमा कर दें. आम तौर पर, इसका इस्तेमाल अच्छी क्वालिटी वाले स्टिल कैप्चर के लिए किया जाएगा. कुछ ब्लॉक मैन्युअल नियंत्रण शामिल करें, जिसे FAST के बजाय वैकल्पिक रूप से चुना जा सकता है या HIGH_QUALITY. उदाहरण के लिए, रंग में सुधार करने की सुविधा वाले ब्लॉक, रंग में बदलाव करने की सुविधा देता है आव्यूह में बदलाव करना, जबकि टोन कर्व अडजस्टमेंट आर्बिट्रेरी ग्लोबल टोन मैपिंग कर्व.
ज़्यादा से ज़्यादा फ़्रेम रेट, जो कैमरा सबसिस्टम के साथ काम कर सकता है वह एक फ़ंक्शन है कई फ़ैक्टर होते हैं:
- आउटपुट इमेज स्ट्रीम के अनुरोध किए गए रिज़ॉल्यूशन
- इमेजर पर बिनिंग/स्किपिंग मोड की उपलब्धता
- इमेजर इंटरफ़ेस की बैंडविड्थ
- अलग-अलग इंटरनेट सेवा देने वाली कंपनी (आईएसपी) के प्रोसेसिंग ब्लॉक की बैंडविथ
अलग-अलग इंटरनेट सेवा देने वाली कंपनियों (आईएसपी) और सेंसर के बीच ये कारक काफ़ी अलग-अलग हो सकते हैं, इसलिए कैमरा एचएएल इंटरफ़ेस, बैंडविथ की पाबंदियों को आसान बनाने की कोशिश करता है मॉडल को प्राथमिकता दें. दिखाए गए मॉडल में ये विशेषताएं होती हैं:
- इमेज सेंसर को हमेशा सबसे छोटे रिज़ॉल्यूशन में इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है जो ऐप्लिकेशन के अनुरोध किए गए आउटपुट स्ट्रीम साइज़ के हिसाब से हो सकते हैं. सबसे छोटा रिज़ॉल्यूशन का मतलब है, कम से कम अनुरोध किए गए सबसे बड़े अनुरोध आउटपुट स्ट्रीम आकार.
- कोई भी अनुरोध, हाल ही में कॉन्फ़िगर की गई किसी एक या सभी आउटपुट स्ट्रीम का इस्तेमाल कर सकता है, इसलिए सेंसर और इंटरनेट सेवा देने वाली कंपनी (आईएसपी) को इस तरह कॉन्फ़िगर किया जाना चाहिए कि वे एक साथ सभी स्ट्रीम देखने के लिए करें.
- JPEG स्ट्रीम, अनुरोधों के लिए प्रोसेस की गई YUV स्ट्रीम की तरह काम करती हैं शामिल नहीं है; उन अनुरोधों में जिनमें सीधे तौर पर बताया गया है, वे इस तरह काम करते हैं JPEG स्ट्रीम.
- JPEG प्रोसेसर बाकी कैमरा पाइपलाइन के साथ-साथ चल सकता है लेकिन एक बार में एक से ज़्यादा कैप्चर प्रोसेस नहीं कर सकता.