Google 致力于为黑人社区推动种族平等。查看具体举措
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

कैमरा

Android कैमरा HAL आइकन

एंड्रॉइड का कैमरा हार्डवेयर एब्स्ट्रेक्शन लेयर (HAL) कैमरा 2 में उच्च-स्तरीय कैमरा फ्रेमवर्क एपीआई को आपके अंतर्निहित कैमरा ड्राइवर और हार्डवेयर से जोड़ता है। कैमरा सबसिस्टम में कैमरा पाइपलाइन घटकों के लिए कार्यान्वयन शामिल हैं जबकि कैमरा HAL इन घटकों के आपके संस्करण को लागू करने में उपयोग के लिए इंटरफेस प्रदान करता है।

आर्किटेक्चर

निम्नलिखित आंकड़ा और सूची एचएएल घटकों का वर्णन करती है।

Android कैमरा वास्तुकला

चित्र 1. कैमरा वास्तुकला

ऐप फ्रेमवर्क
ऐप फ्रेमवर्क स्तर पर ऐप का कोड है, जो कैमरा हार्डवेयर के साथ बातचीत करने के लिए कैमरा 2 एपीआई का उपयोग करता है। आंतरिक रूप से, यह कोड उसी बाइंडर इंटरफेस को कॉल करता है जो कैमरे के साथ बातचीत करने वाले मूल कोड को एक्सेस करता है।
AIDL
CameraService जुड़े बाइंडर इंटरफ़ेस को चौखटे / एवी / कैमरा / सहायता / एंड्रॉयड / हार्डवेयर में पाया जा सकता है। उत्पन्न कोड भौतिक स्तर तक पहुंच प्राप्त करने के लिए निचले स्तर के मूल कोड को कॉल करता है और डेटा का उपयोग करता है जो कि फ्रेमवर्क स्तर पर CameraDevice और अंततः CameraCaptureSession ऑब्जेक्ट बनाने के लिए उपयोग किया जाता है।
मूल ढाँचा
frameworks/av/ में रहने वाला यह ढांचा CameraDevice और CameraCaptureSession वर्गों के बराबर मूल निवासी प्रदान करता है। एनडीके कैमरा 2 संदर्भ भी देखें।
बाइंडर IPC इंटरफ़ेस
IPC बाइंडर इंटरफ़ेस प्रक्रिया सीमाओं पर संचार की सुविधा प्रदान करता है। कई कैमरा बाइंडर कक्षाएं frameworks/av/camera/camera/aidl/android/hardware निर्देशिका में स्थित हैं जो कैमरा सेवा में कॉल करती हैं। ICameraService कैमरा सेवा के लिए इंटरफ़ेस है; ICameraDeviceUser एक विशिष्ट ओपन कैमरा डिवाइस का इंटरफ़ेस है; और ICameraServiceListener और ICameraDeviceCallbacks संबंधित CameraService और CameraDevice कॉलबैक के लिए एप्लिकेशन फ्रेमवर्क हैं।
कैमरा सेवा
कैमरा सेवा, frameworks/av/services/camera/libcameraservice/CameraService.cpp में स्थित, वास्तविक कोड है जो HAL के साथ सहभागिता करता है।
एचएएल
हार्डवेयर अमूर्त परत मानक इंटरफ़ेस को परिभाषित करती है जिसे कैमरा सेवा कॉल करती है और जिसे आपको अपने कैमरा हार्डवेयर फ़ंक्शन को सही ढंग से लागू करना होगा।

एचएएल को लागू करना

HAL कैमरा ड्राइवर और उच्च-स्तरीय एंड्रॉइड फ्रेमवर्क के बीच बैठता है और एक इंटरफ़ेस को परिभाषित करता है जिसे आपको लागू करना चाहिए ताकि ऐप सही ढंग से कैमरा हार्डवेयर को संचालित कर सकें। कैमरा HAL के लिए HIDL इंटरफेस को हार्डवेयर / इंटरफेस / कैमरा में परिभाषित किया गया है।

एक विशिष्ट बांधने वाली HAL को निम्नलिखित HIDL इंटरफेस को लागू करना चाहिए:

  • ICameraProvider : व्यक्तिगत उपकरणों की गणना और उनकी स्थिति के प्रबंधन के लिए।
  • ICameraDevice : कैमरा डिवाइस इंटरफ़ेस।
  • ICameraDeviceSession : सक्रिय कैमरा डिवाइस सत्र इंटरफ़ेस।

संदर्भ HIDL कार्यान्वयन के लिए उपलब्ध हैं CameraProvider.cpp , CameraDevice.cpp , और CameraDeviceSession.cpp । कार्यान्वयन पुराने एचएएल को लपेटता है जो अभी भी विरासत एपीआई का उपयोग करते हैं। Android 8.0 के साथ शुरू, कैमरा HAL कार्यान्वयन HIDL API का उपयोग करना चाहिए; विरासत इंटरफ़ेस का उपयोग समर्थित नहीं है।

विरासत एचएएल घटक

इस खंड में विरासत एचएएल घटकों की वास्तुकला और एचएएल को कैसे लागू किया जाए, इसका वर्णन किया गया है। एंड्रॉइड 8.0 और उससे अधिक पर कैमरा एचएएल कार्यान्वयन ऊपर वर्णित के बजाय, एचआईडीएल एपीआई का उपयोग करना चाहिए।

वास्तुकला (विरासत)

निम्नलिखित आंकड़ा और सूची विरासत कैमरा एचएएल घटकों का वर्णन करती है।

Android कैमरा वास्तुकला

चित्रा 2. विरासत कैमरा वास्तुकला

ऐप फ्रेमवर्क
ऐप फ्रेमवर्क स्तर पर ऐप का कोड है, जो कैमरा हार्डवेयर के साथ बातचीत करने के लिए android.hardware.Camera API का उपयोग करता है। आंतरिक रूप से, यह कोड उस संबंधित जेएनआई गोंद वर्ग को कॉल करता है जो कैमरे के साथ इंटरेक्ट करता है।
JNI
android.hardware.Camera से जुड़ा JNI कोड frameworks/base/core/jni/android_hardware_Camera.cpp । यह कोड भौतिक कैमरे तक पहुंच प्राप्त करने के लिए निचले स्तर के मूल कोड को कॉल करता है और डेटा का उपयोग android.hardware.Camera है जो कि फ्रेमवर्क स्तर पर android.hardware.Camera ऑब्जेक्ट बनाने के लिए उपयोग किया जाता है।
मूल ढाँचा
नेटिव फ्रेमवर्क frameworks/av/camera/Camera.cpp में परिभाषित मूल ढांचा android.hardware.Camera वर्ग के बराबर मूल प्रदान करता है। यह वर्ग कैमरा सेवा तक पहुँच प्राप्त करने के लिए IPC बाइंडर प्रॉक्सि को कहता है।
बाइंडर IPC परदे के पीछे
IPC बाइंडर प्रॉक्सी प्रक्रिया की सीमाओं पर संचार की सुविधा प्रदान करती है। तीन कैमरा बाइंडर कक्षाएं हैं जो frameworks/av/camera निर्देशिका में स्थित हैं जो कैमरा सेवा में कॉल करती हैं। ICameraService कैमरा सेवा के लिए इंटरफ़ेस है, ICamera एक विशिष्ट ओपन कैमरा डिवाइस के लिए इंटरफ़ेस है, और ICameraClient डिवाइस का इंटरफ़ेस ऐप फ्रेमवर्क पर वापस है।
कैमरा सेवा
कैमरा सेवा, frameworks/av/services/camera/libcameraservice/CameraService.cpp में स्थित, वास्तविक कोड है जो HAL के साथ सहभागिता करता है।
एचएएल
हार्डवेयर अमूर्त परत मानक इंटरफ़ेस को परिभाषित करती है जिसे कैमरा सेवा कॉल करती है और जिसे आपको अपने कैमरा हार्डवेयर फ़ंक्शन को सही तरीके से लागू करना होगा।
कर्नेल ड्राइवर
कैमरे का चालक वास्तविक कैमरा हार्डवेयर और एचएएल के आपके कार्यान्वयन के साथ सहभागिता करता है। कैमरा और ड्राइवर को प्रदर्शन और वीडियो रिकॉर्डिंग पर कैमरा छवि का पूर्वावलोकन करने के लिए समर्थन प्रदान करने के लिए YV12 और NV21 छवि स्वरूपों का समर्थन करना चाहिए।

HAL (विरासत) को लागू करना

एचएएल कैमरा चालक और उच्च-स्तरीय एंड्रॉइड फ्रेमवर्क के बीच बैठता है और एक इंटरफ़ेस को परिभाषित करता है जिसे आपको लागू करना चाहिए ताकि ऐप सही ढंग से कैमरा हार्डवेयर को संचालित कर सकें। एचएएल इंटरफ़ेस को hardware/libhardware/include/hardware/camera.h और hardware/libhardware/include/hardware/camera_common.h हेडर फाइलें शामिल हैं।

camera_common.h परिभाषित करता है camera_module , कैमरा के बारे में सामान्य जानकारी प्राप्त करने के लिए एक मानक संरचना, जैसे कैमरा ID और सभी कैमरों के लिए सामान्य गुण (जो कि, चाहे वह सामने वाला हो या बैक-फेसिंग कैमरा हो)।

camera.h में वह कोड होता है जो android.hardware.Camera मेल खाता है। यह हेडर फ़ाइल एक camera_device संरचना की घोषणा करती है, जिसमें HAL इंटरफ़ेस को लागू करने वाले फ़ंक्शन के साथ camera_device_ops साथ एक camera_device_ops संरचना होती है। कैमरा मापदंडों पर प्रलेखन के लिए डेवलपर्स सेट कर सकते हैं, frameworks/av/include/camera/CameraParameters.h । ये पैरामीटर int (*set_parameters)(struct camera_device *, const char *parms) द्वारा int (*set_parameters)(struct camera_device *, const char *parms) गए फंक्शन के साथ सेट किए गए हैं।

HAL कार्यान्वयन के एक उदाहरण के लिए, hardware/ti/omap4xxx/camera में Galaxy Nexus HAL के लिए कार्यान्वयन का संदर्भ लें।

साझा लाइब्रेरी को कॉन्फ़िगर करना

Android निर्माण प्रणाली को HAL कार्यान्वयन को एक साझा लाइब्रेरी में सही ढंग से पैकेज करने के लिए सेट करें और Android.mk फ़ाइल बनाकर उपयुक्त स्थान पर कॉपी Android.mk :

  1. अपनी लाइब्रेरी की स्रोत फ़ाइलों को शामिल करने के लिए एक device/<company_name>/<device_name>/camera निर्देशिका बनाएं।
  2. साझा लाइब्रेरी बनाने के लिए Android.mk फ़ाइल बनाएँ। सुनिश्चित करें कि मेकफाइल में निम्न पंक्तियाँ हैं:
    LOCAL_MODULE := camera.<device_name>
    LOCAL_MODULE_RELATIVE_PATH := hw
    

    आपकी लाइब्रेरी का नाम camera.<device_name> होना चाहिए camera.<device_name> ( .so स्वचालित रूप से जोड़ा जाता है), इसलिए एंड्रॉइड लाइब्रेरी को सही ढंग से लोड कर सकता है। उदाहरण के लिए, hardware/ti/omap4xxx/Android.mk में स्थित गैलेक्सी नेक्सस कैमरा के लिए hardware/ti/omap4xxx/Android.mk

  3. निर्दिष्ट करें कि आपके डिवाइस में कैमरा फीचर्स हैं, जो आपके डिवाइस के मेकफाइल के साथ frameworks/native/data/etc डायरेक्टरी में आवश्यक फीचर XML फाइलों को कॉपी करके करता है। उदाहरण के लिए, अपने डिवाइस को निर्दिष्ट करने के लिए एक कैमरा फ्लैश है और ऑटोफोकस कर सकता है, अपने डिवाइस के <device>/<company_name>/<device_name>/device.mk में निम्न पंक्तियाँ जोड़ें:
    PRODUCT_COPY_FILES := \ ...
    
    PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
    

    डिवाइस मेकफाइल के उदाहरण के लिए, device/samsung/tuna/device.mk देखिए।

  4. device/<company_name>/<device_name>/media_profiles.xml और device/<company_name>/<device_name>/media_codecs.xml XML फ़ाइलों में अपने कैमरा के मीडिया कोडेक, प्रारूप और रिज़ॉल्यूशन क्षमताओं की घोषणा करें। विवरण के लिए, कोडिंग को फ्रेमवर्क में देखें
  5. अपने डिवाइस के device/<company_name>/<device_name>/device.mk में निम्नलिखित पंक्तियों को जोड़ें device/<company_name>/<device_name>/device.mk makefile को उपयुक्त स्थान पर media_profiles.xml और media_codecs.xml फ़ाइलों की प्रतिलिपि बनाने के लिए: 0daa5bee70
  6. अपने डिवाइस की सिस्टम छवि में कैमरा ऐप को शामिल करने के लिए, इसे अपने डिवाइस के device/<company>/<device>/device.mk के PRODUCT_PACKAGES वेरिएबल में निर्दिष्ट करें device/<company>/<device>/device.mk makefile:
    PRODUCT_PACKAGES := \
    Gallery2 \
    ...