अध्याय 23: ज़ीरो शटर लैग और रीप्रोसेसिंग (Zero Shutter Lag & Reprocessing)
कैमरा ऐप्स में सबसे बड़ी समस्या शटर लैग (shutter lag) है: आप बटन दबाते हैं, लेकिन फोटो तब खिंचती है जब पल बीत चुका होता है। ज़ीरो शटर लैग (ZSL) इस देरी को खत्म करता है।
Android Camera Parameters ऐप में आप चेक कर सकते हैं कि आपका डिवाइस 'Reprocessing' सपोर्ट करता है या नहीं।
ZSL कैसे काम करता है?
सामान्य कैमरे में: शटर बटन दबाएं → नया एक्सपोज़र शुरू करें → फोटो लें। इसमें 200-800ms की देरी होती है। ZSL में: कैमरा लगातार फोटो ले रहा होता है और उन्हें एक सर्कुलर बफर (circular buffer) में रखता है। जब आप शटर दबाते हैं, तो कैमरा भविष्य की फोटो लेने के बजाय, बफर से उस फोटो को उठा लेता है जो आपके बटन दबाने के ठीक पहले खींची गई थी।
रीप्रोसेसिंग (Reprocessing) क्या है?
जब आप बफर से एक फोटो उठाते हैं, तो वह शायद उतनी अच्छी न हो क्योंकि वह प्रीव्यू क्वालिटी की थी। Reprocessing API आपको उस फोटो को वापस ISP (Image Signal Processor) में भेजने की अनुमति देता है। इस बार ISP उस पर भारी शोर कम करने (noise reduction) और शार्पनिंग एल्गोरिदम चलाता है, जिससे वह एक बेहतरीन फोटो बन जाती है।
4-स्टेप ZSL वर्कफ्लो
स्टेप 1: सर्कुलर बफर बनाना
एक ImageReader बनाएं जो लगातार फ्रेम इकट्ठा करे। हर रिक्वेस्ट में CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG सेट करें। यह HAL को बताता है कि उसे हाई-क्वालिटी प्रीव्यू देना है।
स्टेप 2: रीप्रोसेसेबल सेशन (Reprocessable Session) बनाना
सामान्य सेशन के बजाय createReprocessableCaptureSession का उपयोग करें। इसमें एक इनपुट (Input) सर्फेस होता है जहाँ से हम फोटो वापस भेजेंगे।
स्टेप 3: शटर टैप और फ्रेम चयन
जब यूजर बटन दबाए, तो बफर में मौजूद फोटो में से वह फोटो चुनें जिसका टाइमस्टैम्प (timestamp) बटन दबाने के समय के सबसे करीब हो। ImageWriter का उपयोग करके इस फोटो को वापस HAL को भेजें।
स्टेप 4: रीप्रोसेस रिक्वेस्ट सबमिट करना
createReprocessCaptureRequest(result) का उपयोग करें। इसमें आप NOISE_REDUCTION_MODE_HIGH_QUALITY जैसे पैरामीटर सेट कर सकते हैं ताकि फोटो की क्वालिटी बढ़ जाए।
switchToOffline(): बैकग्राउंड प्रोसेसिंग
Android 12 में एक नया फीचर आया है। अगर यूजर फोटो खींचकर तुरंत ऐप बंद कर देता है, तो switchToOffline() काम को बैकग्राउंड में HAL को सौंप देता है। इससे ऐप बंद होने के बावजूद फोटो सही से सेव हो जाती है।
सारांश (Summary)
- ZSL: बटन दबाने के तुरंत बाद की फोटो के बजाय, सही समय वाली फोटो कैप्चर करना।
- Circular Buffer: पिछले कुछ फ्रेम को याददाश्त (memory) में रखना।
- Reprocessing: बफर की फोटो को फिर से ISP में भेजकर उसकी क्वालिटी सुधारना।
- ImageWriter: पिक्सेल डेटा को वापस कैमरे में इंजेक्ट करने का टूल।
आगे क्या है
बधाई हो! आपने Android Camera2 API के सभी प्रमुख फीचर्स सीख लिए हैं। अब आप एक ऐसा कैमरा ऐप बना सकते हैं जो प्रोफेशनल लेवल की फोटो और वीडियो कैप्चर कर सके।