मुख्य कंटेंट तक स्किप करें

अध्याय 20: मल्टी-कैमरा (Multi-Camera)

आधुनिक स्मार्टफोन 3-5 रियर कैमरों के साथ आते हैं - अल्ट्रा-वाइड, वाइड, टेलीफोटो आदि। Android 9 से पहले, हर लेंस एक स्वतंत्र कैमरे के रूप में दिखता था। Android 9 ने लॉजिकल कैमरा (logical camera) की अवधारणा पेश की: एक वर्चुअल कैमरा आईडी जो कई फिजिकल कैमरों को समूहबद्ध करती है और ज़ूम के दौरान उनके बीच बिना किसी रुकावट के स्विच करती है।

Android Camera Parameters ऐप में आप देख सकते हैं कि कौन से कैमरे 'लॉजिकल' हैं और उनके अंदर कौन सी 'फिजिकल' आईडी शामिल हैं।

लॉजिकल बनाम फिजिकल कैमरा टोपोलॉजी

एक लॉजिकल कैमरा एक वर्चुअल डिवाइस है जिसके पीछे 2 या अधिक फिजिकल कैमरे होते हैं। जब आप CONTROL_ZOOM_RATIO सेट करते हैं, तो HAL अपने आप सही लेंस (जैसे 1x वाइड से 3x टेलीफोटो) पर स्विच कर देता है और आपको पता भी नहीं चलता।

  • getPhysicalCameraIds(): लॉजिकल आईडी के पीछे छिपे फिजिकल कैमरों की सूची देता है (जैसे {"0", "5", "8"}).
  • सेंसर ओरिएंटेशन: लॉजिकल आईडी के गुण वर्तमान में सक्रिय लेंस का प्रतिनिधित्व करते हैं।

सेंसर सिंक्रोनाइज़ेशन: APPROXIMATE बनाम CALIBRATED

जब आप दो कैमरों से एक साथ फोटो लेते हैं (जैसे डेप्थ के लिए), तो उनके बीच का समय अंतराल (time delta) महत्वपूर्ण होता है:

  • APPROXIMATE: एक्सपोज़र का समय ±33 ms (एक फ्रेम अंतराल) के भीतर मिलता है। यह सामान्य पोर्ट्रेट मोड (बोकेह) के लिए ठीक है।
  • CALIBRATED: एक्सपोज़र का समय ±1 ms के भीतर होता है। यह AR (Augmented Reality) और सटीक डेप्थ मैप के लिए ज़रूरी है।

केवल फ्लैगशिप फोन ही आमतौर पर CALIBRATED सिंक सपोर्ट करते हैं।

स्ट्रीम रिप्लेसमेंट नियम (Stream Replacement Rule)

HAL एक महत्वपूर्ण नियम लागू करता है: यदि आप एक लॉजिकल स्ट्रीम (जैसे 1080p YUV) जोड़ते हैं, तो आप उसे 2 समान साइज की फिजिकल स्ट्रीम से बदल सकते हैं (जैसे 1080p वाइड + 1080p टेली)। 3 या अधिक फिजिकल स्ट्रीम जोड़ने पर सेशन फेल हो सकता है।

कार्यान्वयन: एक साथ दो फिजिकल कैमरों से कैप्चर करना

स्टेप 1: लॉजिकल और फिजिकल आईडी पहचानें

लेंस की फोकल लेंथ (focal length) के आधार पर पहचानें कि कौन सा अल्ट्रा-वाइड है और कौन सा टेलीफोटो।

स्टेप 2: OutputConfiguration बनाएं

प्रत्येक फिजिकल कैमरे के लिए OutputConfiguration बनाएं और setPhysicalCameraId(id) कॉल करें। नियम: दोनों का साइज और फॉर्मेट एक ही होना चाहिए।

स्टेप 3: सेशन बनाएं और कैप्चर करें

दोनों फिजिकल सर्फेस को एक ही CaptureRequest में जोड़ें। अगर सेंसर सिंक 'CALIBRATED' है, तो दोनों फोटो के टाइमस्टैम्प बिल्कुल एक जैसे होंगे।

सीमलेस ज़ूम (Seamless Zoom)

आपको मैन्युअल रूप से लेंस बदलने की ज़रूरत नहीं है। बस CaptureRequest.CONTROL_ZOOM_RATIO का उपयोग करें और HAL ज़ूम थ्रेशोल्ड पर अपने आप लेंस स्विच कर देगा।

सारांश (Summary)

  • लॉजिकल कैमरा: कई फिजिकल लेंसों का एक वर्चुअल समूह।
  • सेंसर सिंक: APPROXIMATE (±33ms) बनाम CALIBRATED (±1ms)।
  • स्ट्रीम रिप्लेसमेंट: 1 लॉजिकल स्ट्रीम = 2 समान फिजिकल स्ट्रीम।
  • setPhysicalCameraId: एक साथ कई लेंसों से फोटो लेने के लिए इस्तेमाल किया जाता है।

आगे क्या है

अगले अध्याय में, हम 8-bit की दुनिया से बाहर निकलेंगे और अध्याय 21: HDR और Ultra HDR के बारे में जानेंगे, जिसमें Android 14 का नया JPEG_R फॉर्मेट शामिल है।