Camera HAL

Android का कैमरा हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल), android.hardware.camera2 में मौजूद, कैमरा फ़्रेमवर्क के हायर लेवल वाले एपीआई को आपके कैमरा ड्राइवर और हार्डवेयर से कनेक्ट करता है. Android 13 से, कैमरा एचएएल इंटरफ़ेस डेवलपमेंट के लिए एआईडीएल का इस्तेमाल किया जाता है. Android 8.0 में Treble को पेश किया गया था. इससे Camera HAL API को एचएएल इंटरफ़ेस डेफ़िनिशन लैंग्वेज (एचआईडीएल) के ज़रिए तय किए गए स्टेबल इंटरफ़ेस पर स्विच किया गया था. अगर आपने Android 7.0 और इससे पहले के वर्शन के लिए, कैमरा HAL मॉड्यूल और ड्राइवर पहले ही बना लिया है, तो कैमरा पाइपलाइन में हुए अहम बदलावों के बारे में जान लें.

एआईडीएल कैमरा एचएएल

Android 13 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों के लिए, कैमरा फ़्रेमवर्क में AIDL कैमरा HAL के लिए सहायता शामिल है. कैमरा फ़्रेमवर्क, एचआईडीएल कैमरा एचएएल को भी सपोर्ट करता है. हालांकि, Android 13 या इसके बाद के वर्शन में जोड़ी गई कैमरा सुविधाएं, सिर्फ़ एआईडीएल कैमरा एचएएल इंटरफ़ेस के ज़रिए उपलब्ध होती हैं. Android 13 या इसके बाद वाले वर्शन पर अपग्रेड किए जा रहे डिवाइसों पर ऐसी सुविधाएं लागू करने के लिए, डिवाइस बनाने वाली कंपनियों को एचआईडीएल कैमरा इंटरफ़ेस का इस्तेमाल करने वाली अपनी एचएएल प्रोसेस को एआईडीएल कैमरा इंटरफ़ेस पर माइग्रेट करना होगा.

एआईडीएल के फ़ायदों के बारे में जानने के लिए, एचएएल के लिए एआईडीएल लेख पढ़ें.

एआईडीएल कैमरा एचएएल लागू करना

एआईडीएल कैमरा एचएएल को लागू करने के रेफ़रंस के लिए, hardware/google/camera/common/hal/aidl_service/ देखें.

कैमरा एचएएल के लिए AIDL की खास बातें यहां दी गई हैं:

AIDL पर माइग्रेट करने वाले डिवाइसों के लिए, डिवाइस बनाने वाली कंपनियों को कोड स्ट्रक्चर के आधार पर, Android SELinux नीति (sepolicy) और आरसी फ़ाइलों में बदलाव करना पड़ सकता है.

एआईडीएल कैमरा एचएएल की पुष्टि करना

AIDL कैमरा HAL को लागू करने की जांच करने के लिए, पक्का करें कि डिवाइस ने सभी सीटीएस और वीटीएस टेस्ट पास कर लिए हों. Android 13 में, एआईडीएल वीटीएस टेस्ट VtsAidlHalCameraProvider_TargetTest.cpp की सुविधा जोड़ी गई है.

Camera HAL3 की सुविधाएं

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

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

यह एपीआई, कैमरा सबसिस्टम को एक पाइपलाइन के तौर पर मॉडल करता है. यह पाइपलाइन, फ़्रेम कैप्चर करने के लिए आने वाले अनुरोधों को फ़्रेम में बदलती है. ऐसा 1:1 के आधार पर किया जाता है. इन अनुरोधों में, फ़्रेम को कैप्चर और प्रोसेस करने से जुड़ी सभी कॉन्फ़िगरेशन जानकारी शामिल होती है. इसमें रिज़ॉल्यूशन और पिक्सल फ़ॉर्मैट, सेंसर, लेंस, और फ़्लैश को मैन्युअल तरीके से कंट्रोल करना, 3A ऑपरेटिंग मोड, RAW->YUV प्रोसेसिंग कंट्रोल, आंकड़े जनरेट करना वगैरह शामिल है.

आसान शब्दों में कहें, तो ऐप्लिकेशन फ़्रेमवर्क, कैमरा सबसिस्टम से फ़्रेम का अनुरोध करता है. इसके बाद, कैमरा सबसिस्टम, आउटपुट स्ट्रीम को नतीजे दिखाता है. इसके अलावा, हर नतीजे के सेट के लिए मेटाडेटा जनरेट किया जाता है. इसमें रंग की जगहें और लेंस शेडिंग जैसी जानकारी शामिल होती है. कैमरे के वर्शन 3 को, कैमरे के वर्शन 1 की एकतरफ़ा स्ट्रीम के लिए पाइपलाइन के तौर पर देखा जा सकता है. यह कैप्चर करने के हर अनुरोध को सेंसर से कैप्चर की गई एक इमेज में बदलता है. इसके बाद, इसे इन फ़ॉर्मैट में प्रोसेस किया जाता है:

  • कैप्चर के बारे में मेटाडेटा वाला नतीजा ऑब्जेक्ट.
  • इमेज डेटा के एक से लेकर N बफ़र तक, हर बफ़र अपने डेस्टिनेशन सर्फ़ेस में होता है.

आउटपुट के लिए उपलब्ध प्लैटफ़ॉर्म का सेट पहले से कॉन्फ़िगर किया गया है:

  • हर डिसप्ले, तय रिज़ॉल्यूशन वाले इमेज बफ़र की स्ट्रीम के लिए एक डेस्टिनेशन होता है.
  • एक बार में सिर्फ़ कुछ डिवाइसों को आउटपुट के तौर पर कॉन्फ़िगर किया जा सकता है. इनकी संख्या करीब तीन होती है.

अनुरोध में, कैप्चर करने की सभी ज़रूरी सेटिंग और आउटपुट सर्फ़ेस की सूची होती है. इस सूची में, कॉन्फ़िगर किए गए सेट में से उन सर्फ़ेस को शामिल किया जाता है जहां इमेज बफ़र को पुश करना है. अनुरोध एक बार (capture() के साथ) किया जा सकता है या इसे बार-बार (setRepeatingRequest() के साथ) दोहराया जा सकता है. बार-बार किए जाने वाले अनुरोधों के मुकाबले, कैप्चर किए गए अनुरोधों को प्राथमिकता दी जाती है.

कैमरे का डेटा मॉडल

पहली इमेज. कैमरे के मुख्य ऑपरेशन का मॉडल

Camera HAL1 की खास जानकारी

कैमरा सबसिस्टम के पहले वर्शन को ब्लैक बॉक्स के तौर पर डिज़ाइन किया गया था. इसमें हाई-लेवल कंट्रोल और ये तीन ऑपरेटिंग मोड थे:

  • झलक देखें
  • वीडियो रिकॉर्ड करें
  • स्टिल कैप्चर

हर मोड में थोड़ी अलग और मिलती-जुलती सुविधाएं होती हैं. इस वजह से, बर्स्ट मोड जैसी नई सुविधाओं को लागू करना मुश्किल हो गया. बर्स्ट मोड, दो ऑपरेटिंग मोड के बीच में आता है.

कैमरे का ब्लॉक डायग्राम

दूसरी इमेज. कैमरे के कॉम्पोनेंट

Android 7.0 में, कैमरा एचएएल1 का इस्तेमाल किया जा सकता है. ऐसा इसलिए, क्योंकि अब भी कई डिवाइसों में इसका इस्तेमाल किया जाता है. इसके अलावा, Android कैमरा सेवा, दोनों एचएएल (1 और 3) को लागू करने की सुविधा देती है. यह तब काम आती है, जब आपको कैमरा एचएएल1 के साथ कम क्षमता वाले फ्रंट-फ़ेसिंग कैमरे और कैमरा एचएएल3 के साथ ज़्यादा बेहतर बैक-फ़ेसिंग कैमरे का इस्तेमाल करना हो.

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