Android की कैमरा हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल), android.hardware.camera2 में मौजूद कैमरा फ़्रेमवर्क एपीआई को आपके कैमरे के ड्राइवर और हार्डवेयर से जोड़ती है. Android 13 से, कैमरे के एचएएल इंटरफ़ेस के डेवलपमेंट में एआईडीएल का इस्तेमाल किया जाता है. Android 8.0 में Treble की सुविधा लॉन्च की गई थी. इसकी मदद से, Camera HAL API को HAL इंटरफ़ेस की जानकारी देने वाली भाषा (HIDL) से तय किए गए एक स्थिर इंटरफ़ेस पर स्विच किया गया. अगर आपने पहले Android 7.0 और उससे पहले के वर्शन के लिए, कैमरा एचएएल मॉड्यूल और ड्राइवर डेवलप किया है, तो कैमरा पाइपलाइन में हुए अहम बदलावों के बारे में जानें.
एआईडीएल कैमरा एचएएल
Android 13 या इसके बाद के वर्शन वाले डिवाइसों के लिए, कैमरा फ़्रेमवर्क में एआईडीएल कैमरा एचएएल के लिए सहायता शामिल है. कैमरा फ़्रेमवर्क, HIDL कैमरा एचएएल के साथ भी काम करता है. हालांकि, Android 13 या इसके बाद के वर्शन में जोड़ी गई कैमरे की सुविधाएं, सिर्फ़ एआईडीएल कैमरा एचएएल इंटरफ़ेस के ज़रिए उपलब्ध हैं. Android 13 या इसके बाद के वर्शन पर अपग्रेड करने वाले डिवाइसों पर ऐसी सुविधाएं लागू करने के लिए, डिवाइस बनाने वाली कंपनियों को अपनी एचएएल प्रोसेस को एचआईडीएल कैमरा इंटरफ़ेस से एआईडीएल कैमरा इंटरफ़ेस पर माइग्रेट करना होगा.
AIDL के फ़ायदों के बारे में जानने के लिए, HAL के लिए AIDL देखें.
एआईडीएल कैमरा एचएएल लागू करना
AIDL कैमरा एचएएल को लागू करने का रेफ़रंस पाने के लिए,
hardware/google/camera/common/hal/aidl_service/
देखें.
AIDL कैमरा एचएएल की खास जानकारी यहां दी गई है:
- कैमरा मुहैया कराने वाली कंपनी:
hardware/interfaces/camera/provider/aidl/
- कैमरा डिवाइस:
hardware/interfaces/camera/device/aidl/
- कैमरे का मेटाडेटा:
hardware/interfaces/camera/metadata/aidl/
- सामान्य डेटा टाइप:
hardware/interfaces/camera/common/aidl/
जिन डिवाइसों को AIDL पर माइग्रेट किया जा रहा है उनके लिए, डिवाइस बनाने वाली कंपनियों को कोड के स्ट्रक्चर के आधार पर, Android SELinux नीति (sepolicy) और आरसी फ़ाइलों में बदलाव करना पड़ सकता है.
AIDL कैमरा एचएएल की पुष्टि करना
एआईडीएल कैमरा एचएएल लागू करने की जांच करने के लिए, पक्का करें कि डिवाइस ने सभी सीटीएस और वीटीएस टेस्ट को पास कर लिया हो. Android 13 में पेश है एआईडीएल वीटीएस टेस्ट,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Camera HAL3 की सुविधाएं
Android Camera API को फिर से डिज़ाइन करने का मकसद, Android डिवाइसों पर कैमरा सबसिस्टम को कंट्रोल करने के लिए, ऐप्लिकेशन की क्षमता को काफ़ी बढ़ाना है. साथ ही, एपीआई को फिर से व्यवस्थित करके उसे ज़्यादा असरदार और मैनेज करने लायक बनाना है. ज़्यादा कंट्रोल की मदद से, Android डिवाइसों पर अच्छी क्वालिटी के कैमरा ऐप्लिकेशन बनाना आसान हो जाता है. ये ऐप्लिकेशन कई प्रॉडक्ट पर भरोसेमंद तरीके से काम कर सकते हैं. साथ ही, क्वालिटी और परफ़ॉर्मेंस को बेहतर बनाने के लिए, जब भी हो सके, डिवाइस के हिसाब से एल्गोरिद्म का इस्तेमाल करते हैं.
कैमरा सबसिस्टम के वर्शन 3 में, ऑपरेशन मोड को एक ही यूनिफ़ाइड व्यू में व्यवस्थित किया गया है. इसका इस्तेमाल, पिछले किसी भी मोड और बर्स्ट मोड जैसे कई अन्य मोड को लागू करने के लिए किया जा सकता है. इससे फ़ोकस और एक्सपोज़र के लिए उपयोगकर्ता को बेहतर कंट्रोल मिलता है. साथ ही, पोस्ट-प्रोसेसिंग के ज़्यादा विकल्प मिलते हैं. जैसे, शोर कम करना, कंट्रास्ट बढ़ाना, और इमेज को शार्प करना. साथ ही, इस आसानी से समझ में आने वाले व्यू की मदद से, ऐप्लिकेशन डेवलपर कैमरे के अलग-अलग फ़ंक्शन आसानी से इस्तेमाल कर सकते हैं.
यह एपीआई, कैमरे के सबसिस्टम को एक पाइपलाइन के तौर पर मॉडल करता है. यह पाइपलाइन, फ़्रेम कैप्चर करने के लिए आने वाले अनुरोधों को 1:1 के आधार पर फ़्रेम में बदल देती है. इन अनुरोधों में, किसी फ़्रेम को कैप्चर और प्रोसेस करने के बारे में कॉन्फ़िगरेशन की सारी जानकारी शामिल होती है. इसमें रिज़ॉल्यूशन और पिक्सल फ़ॉर्मैट, मैन्युअल सेंसर, लेंस, और फ़्लैश कंट्रोल, 3A ऑपरेटिंग मोड, RAW->YUV प्रोसेसिंग कंट्रोल, आंकड़ों का जनरेशन वगैरह शामिल हैं.
आसान शब्दों में कहें, तो ऐप्लिकेशन फ़्रेमवर्क, कैमरे के सबसिस्टम से फ़्रेम का अनुरोध करता है और कैमरा सबसिस्टम, आउटपुट स्ट्रीम में नतीजे दिखाता है. इसके अलावा, नतीजों के हर सेट के लिए ऐसा मेटाडेटा जनरेट होता है जिसमें रंग के स्पेस और लेंस शेडिंग जैसी जानकारी शामिल होती है. कैमरे के वर्शन 3 को, कैमरे के वर्शन 1 की एकतरफ़ा स्ट्रीम के लिए पाइपलाइन के तौर पर देखा जा सकता है. यह हर कैप्चर के अनुरोध को सेंसर से कैप्चर की गई एक इमेज में बदल देता है. इसे इनमें प्रोसेस किया जाता है:
- कैप्चर के बारे में मेटाडेटा के साथ नतीजा ऑब्जेक्ट.
- इमेज डेटा के एक से ज़्यादा बफ़र, हर एक अपने डेस्टिनेशन प्लैटफ़ॉर्म पर.
आउटपुट के लिए उपलब्ध प्लैटफ़ॉर्म का सेट पहले से कॉन्फ़िगर किया गया है:
- हर प्लैटफ़ॉर्म, तय रिज़ॉल्यूशन वाले इमेज बफ़र की स्ट्रीम के लिए एक डेस्टिनेशन होता है.
- एक बार में सिर्फ़ कुछ ही प्लैटफ़ॉर्म को आउटपुट के तौर पर कॉन्फ़िगर किया जा सकता है (~3).
किसी अनुरोध में, कैप्चर की गई वे सभी सेटिंग शामिल होती हैं जो आपके काम की हैं. साथ ही, इस अनुरोध के लिए इमेज बफ़र को पुश करने के लिए, आउटपुट प्लैटफ़ॉर्म की सूची होती है (कॉन्फ़िगर की गई कुल सेटिंग में से). अनुरोध एक बार किया जा सकता है (capture()
के साथ) या इसे बार-बार किया जा सकता है (setRepeatingRequest()
के साथ). कैप्चर करने के अनुरोधों को, बार-बार किए जाने वाले अनुरोधों के मुकाबले प्राथमिकता दी जाती है.
Camera HAL1 के बारे में खास जानकारी
कैमरा सबसिस्टम के वर्शन 1 को हाई-लेवल कंट्रोल वाले ब्लैक बॉक्स के तौर पर डिज़ाइन किया गया था. साथ ही, इसमें ये तीन ऑपरेटिंग मोड शामिल थे:
- झलक देखें
- वीडियो रिकॉर्ड
- स्टिल कैप्चर
हर मोड में कुछ अलग और ओवरलैप होने वाली सुविधाएं होती हैं. इस वजह से, बर्स्ट मोड जैसी नई सुविधाओं को लागू करना मुश्किल हो गया. दो ऑपरेटिंग मोड के बीच में ही यह सुविधा काम करती है.
Android 7.0 पर कैमरा एचएएल1 की सुविधा काम करती रहेगी, क्योंकि कई डिवाइस अब भी इस पर निर्भर हैं. इसके अलावा, Android कैमरा सेवा, एचएएल (1 और 3) दोनों को लागू करने की सुविधा देती है. यह तब काम आता है, जब आपको कैमरा एचएएल 1 के साथ कम सुविधाओं वाले सामने वाले कैमरे और कैमरा एचएएल 3 के साथ बेहतर सुविधाओं वाले पीछे वाले कैमरे का इस्तेमाल करना हो.
इसमें एक कैमरा HAL मॉड्यूल (अपने वर्शन नंबर के साथ) होता है. इसमें कई अलग-अलग कैमरा डिवाइसों की जानकारी होती है. हर डिवाइस का अपना वर्शन नंबर होता है. Android 2 या इसके बाद के वर्शन वाले डिवाइसों के साथ काम करने के लिए, कैमरा मॉड्यूल 2 या इसके बाद के वर्शन का होना ज़रूरी है. साथ ही, ऐसे कैमरा मॉड्यूल में कैमरा डिवाइस के अलग-अलग वर्शन हो सकते हैं. जब हम यह कहते हैं कि Android, दोनों एचएएल को लागू करने की सुविधा देता है, तो हमारा यही मतलब होता है.