अध्याय 25: नेटिव कैमरा विकास (Native Camera Development)
सारांश (Summary)
अब तक हमने Kotlin या Java (managed code) में काम किया है। सामाजिक ऐप्स के लिए यह पर्याप्त है। लेकिन AR इंजन, रीयल-टाइम कंप्यूटर विज़न, या इन-कार रियर-व्यू कैमरों के लिए, जहाँ हर फ्रेम के लिए केवल 16ms का बजट होता है, वहां नेटिव विकास (Native Development) की आवश्यकता होती है।
नेटिव कैमरा विकास पूरे कैमरा लूप को C/C++ में ले जाता है। इसका सबसे बड़ा लाभ JNI ओवरहेड का शून्य होना और AHardwareBuffer के माध्यम से ज़ीरो-कॉपी (zero-copy) डेटा ट्रांसफर है।
नेटिव क्यों जाएं?
- शून्य JNI ओवरहेड: हर फ्रेम के लिए Java और C++ के बीच स्विच करने में समय बर्बाद नहीं होता।
- AHardwareBuffer: यह पिक्सेल डेटा को सीधे GPU (Vulkan या OpenGL) को सौंपने की अनुमति देता है बिना किसी मेमोरी कॉपी के।
- AR और 3D इंजन: Unity या Unreal जैसे इंजन C++ में लिखे गए हैं; उनके रेंडर लूप के अंदर कैमरा चलाना बहुत आसान होता है।
- Automotive EVS: कारों के रियर-व्यू कैमरों को कोल्ड बूट के बाद 2 सेकंड के भीतर इमेज दिखाना अनिवार्य है (FMVSS 111 नियम)। इसके लिए नेटिव कोड ही एकमात्र रास्ता है।
ACameraManager: Java का NDK समकक्ष
NDK कैमरा API (<camera/NdkCameraManager.h>) काफी हद तक Java API जैसा ही है। हर Java क्लास के लिए एक नेटिव स्ट्रक्चर और फंक्शन उपलब्ध है।
| Java | NDK हैंडल |
|---|---|
CameraManager | ACameraManager |
CameraDevice | ACameraDevice |
CaptureRequest | ACaptureRequest |
CameraCaptureSession | ACameraCaptureSession |
यहाँ लाइफसाइकिल भी वैसी ही है: कैमरों को एन्युमरेट करें → विशेषताएं पढ़ें → खोलें → सेशन बनाएं → कैप्चर करें। मुख्य अंतर यह है कि आपको मैन्युअल रूप से हर रिसोर्स को फ्री करना होगा, वरना मेमोरी लीक हो जाएगी।
AHardwareBuffer: ज़ीरो-कॉपी क्रिटिकल पाथ
यही नेटिव जाने का असली कारण है। AHardwareBuffer वह हैंडल है जो कैमरा सेंसर से आने वाले पिक्सेल को सीधे GPU टेक्सचर (Vulkan VkImage) में बदल देता है। बीच में कोई 'memcpy' या CPU प्रोसेसिंग की ज़रूरत नहीं होती। इससे गीगाबाइट्स प्रति सेकंड की बैंडविड्थ बचती है।
ऑटोमोटिव (Automotive) संदर्भ
Android 10 से, कारों के कैमरा सिस्टम (External View System - EVS) को मानक Camera2 NDK स्टैक पर ले जाया गया है। यदि आप कारों के लिए कैमरा कोड लिख रहे हैं, तो नेटिव API का उपयोग करना आपके लिए अनिवार्य है ताकि 2-सेकंड की बूट-टू-फ्रेम आवश्यकता को पूरा किया जा सके।
सारांश (Summary)
नेटिव कैमरा विकास अधिकतम परफॉर्मेंस और सीधे हार्डवेयर स्वामित्व (ownership) के लिए मैनेज्ड कोड के आराम को छोड़ देता है। AHardwareBuffer के माध्यम से कैमरा आउटपुट को सीधे Vulkan या OpenGL टेक्सचर में फीड करना 60fps AR पाइपलाइन के लिए क्रांतिकारी है। कारों के मामले में, यह सुरक्षा मानकों को पूरा करने के लिए ज़रूरी है।
आगे क्या है
चाहे Kotlin हो या C++, Camera2 एक असिंक्रोनस API है। अध्याय 26 में हम Kotlin Coroutines और Flow का उपयोग करके इस जटिल कॉलबैक-आधारित दुनिया को एक साफ और सरल पाइपलाइन में बदलेंगे।