आउटपुट स्ट्रीम, उन्हें काटना, और ज़ूम करना

आउटपुट स्ट्रीम

कैमरा सबसिस्टम, इसके लिए पूरी तरह से ANativeWindow-आधारित पाइपलाइन पर काम करता है सभी रिज़ॉल्यूशन और आउटपुट फ़ॉर्मैट में उपलब्ध हैं. एक से ज़्यादा स्ट्रीम कॉन्फ़िगर की जा सकती हैं एक बार में एक ही फ़्रेम को कई टारगेट को भेजना होगा, जैसे कि जीपीयू, वीडियो एन्कोडर, RenderScript, या ऐप्लिकेशन को दिखने वाले बफ़र (RAW Bayer, प्रोसेस किया गया YUV) बफ़र या JPEG कोड में बदले गए बफ़र).

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

गारंटी वाले स्ट्रीम के आउटपुट कॉम्बिनेशन के बारे में ज़्यादा जानकारी पाने के लिए जो समर्थित हार्डवेयर स्तर पर निर्भर करते हैं, वहां देखें. createCaptureSession().

काट-छांट करना

पूरे पिक्सल कलेक्शन में काट-छांट करना (डिजिटल ज़ूम और अन्य इस्तेमाल के उदाहरणों के लिए जहां छोटे FOV की मांग की जाती है) सेटिंग. यह हर अनुरोध की सेटिंग है. इसे हर अनुरोध के आधार पर बदला जा सकता है, जो डिजिटल ज़ूम को आसान बनाने के लिए ज़रूरी है.

क्षेत्र एक रेक्टैंगल (x, y, चौड़ाई, ऊंचाई) से तय होता है. इसमें (x, y) दिखेगा जो आयत के ऊपरी बाएं कोने का विवरण देती है. रेक्टैंगल का मतलब सेंसर चालू पिक्सल अरे का कोऑर्डिनेट सिस्टम, जिसमें (0,0) का मतलब ऐक्टिव पिक्सल कलेक्शन में सबसे ऊपर बाईं ओर मौजूद पिक्सल. इसलिए, लंबाई और चौड़ाई में ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY में रिपोर्ट किए गए डाइमेंशन से बड़ा होना चाहिए स्टैटिक जानकारी फ़ील्ड. एचएएल ने कम से कम चौड़ाई और ऊंचाई की जानकारी देने की अनुमति दी है स्थैतिक जानकारी फ़ील्ड के माध्यम से ANDROID_SCALER_MAX_DIGITAL_ZOOM से तय की गई सीमा तक ज़ूम किया जा सकता है. इसलिए, फ़सल क्षेत्र की कम से कम चौड़ाई और ऊंचाई है:

  {width, height} =
   { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM),
     floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM) }

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

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

सभी मामलों में, स्ट्रीम को काटे जाने वाले हिस्से के बीच में होना चाहिए और हर स्ट्रीम को पूरी स्ट्रीम के बराबर या तो हॉरिज़ॉन्टल तौर पर या वर्टिकल तौर पर काटा जाता है नहीं, दोनों का इस्तेमाल करें.

उदाहरण के लिए, अगर दो स्ट्रीम तय की गई हैं, तो 640x480 स्ट्रीम (4:3 आसपेक्ट रेशियो) और 1280x720 स्ट्रीम (16:9 आसपेक्ट रेशियो) नीचे दी गई है. इसमें अनुमानित आउटपुट क्षेत्र दिखाए गए हैं काल्पनिक 3 एमपी (2000 x) पर कुछ सैंपल क्रॉप क्षेत्रों के लिए हर स्ट्रीम के लिए 1500 पिक्सल अरे) सेंसर.

काटने का क्षेत्र: (500, 375, 1000, 750) (4:3 का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात))
640x480 स्ट्रीम क्रॉप: (500, 375, 1000, 750) (काटने वाले क्षेत्र के बराबर)
1280x720 स्ट्रीम क्रॉप: (500, 469, 1000, 562)

क्रॉप-क्षेत्र-43-अनुपात

पहला डायग्राम. 4:3 पक्षानुपात

काटने का क्षेत्र: (500, 375, 1333, 750) (16:9 आसपेक्ट रेशियो या लंबाई-चौड़ाई का अनुपात)
640x480 स्ट्रीम क्रॉप: (666, 375, 1000, 750)
1280x720 स्ट्रीम क्रॉप: (500, 375, 1333, 750) (काटने वाले क्षेत्र के बराबर)

क्रॉप-क्षेत्र-169-अनुपात

दूसरा डायग्राम. 16:9 का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

काटने का क्षेत्र: (500, 375, 750, 750) (1:1 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात))
640x480 स्ट्रीम क्रॉप: (500, 469, 750, 562)
1280x720 स्ट्रीम क्रॉप: (500, 543, 750, 414)

क्रॉप क्षेत्र-11-अनुपात

तीसरी इमेज. 1:1 का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

आखिरी उदाहरण, 480p के बजाय 1024x1024 के स्क्वेयर आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) वाली स्ट्रीम स्ट्रीम:
काटने का क्षेत्र: (500, 375, 1000, 750) (4:3 का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात))
1024x1024 स्ट्रीम क्रॉप: (625, 375, 750, 750)
1280x720 स्ट्रीम क्रॉप: (500, 469, 1000, 562)

क्रॉप-क्षेत्र-43-स्क्वेयर-अनुपात

चौथी इमेज. 4:3 का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात), स्क्वेयर

फिर से प्रोसेस हो रहा है

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

Zoom

Android 11 या उसके बाद के वर्शन वाले डिवाइसों के लिए, ऐप्लिकेशन कैमरे के ज़ूम का इस्तेमाल कर सकता है (डिजिटल और ऑप्टिकल) ANDROID_CONTROL_ZOOM_RATIO सेटिंग के ज़रिए.

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

एक से ज़्यादा कैमरों वाले सिस्टम में, एक से ज़्यादा लेंस हो सकते हैं. फ़ोकल लंबाई देखी जा सकती है. साथ ही, उपयोगकर्ता लेंस के बीच स्विच करके ऑप्टिकल ज़ूम का इस्तेमाल कर सकता है. यहां दिए गए मामलों में, ANDROID_CONTROL_ZOOM_RATIO का इस्तेमाल करने के फ़ायदे हैं:

  • वाइड लेंस से टेलीफ़ोटो लेंस तक ज़ूम इन करना: फ़्लोटिंग पॉइंट का अनुपात के पूर्णांक मानों की तुलना में ज़्यादा सटीक ANDROID_SCALER_CROP_REGION.
  • वाइड लेंस से अल्ट्रावाइड लेंस तक ज़ूम आउट करना: ANDROID_CONTROL_ZOOM_RATIO पर ज़ूम आउट करने की सुविधा काम करती है (<1.0f) जबकि ANDROID_SCALER_CROP_REGION में नहीं होता.

उदाहरण के लिए, यहां अलग-अलग ज़ूम अनुपातों, क्रॉप क्षेत्रों, और आउटपुट के अलग-अलग उदाहरण दिए गए हैं. स्ट्रीम करने के लिए किया जाता है.

ज़ूम अनुपात: 2.0; ओरिजनल फ़ील्ड ऑफ़ व्यू का 1/4 हिस्सा
काटे गए क्षेत्र: (0, 0, 2000, 1500) (4:3 आसपेक्ट रेशियो या लंबाई-चौड़ाई का अनुपात)
640x480 स्ट्रीम क्रॉप: (0, 0, 2000, 1500) (काट-छांट वाले क्षेत्र के बराबर)
1280x720 स्ट्रीम क्रॉप: (0, 187, 2000, 1125)

ज़ूम-अनुपात-2-क्रॉप-43

पांचवी इमेज. 2.0 ज़ूम, 4:3 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

ज़ूम अनुपात: 2.0; ओरिजनल फ़ील्ड ऑफ़ व्यू का 1/4 हिस्सा
काटने का क्षेत्र: (0, 187, 2000, 1125) (16:9 आसपेक्ट रेशियो या लंबाई-चौड़ाई का अनुपात)
640x480 स्ट्रीम क्रॉप: (250, 187, 1500, 1125) (पिलरबॉक्स किया गया)
1280x720 स्ट्रीम क्रॉप: (0, 187, 2000, 1125) (काटने वाले क्षेत्र के बराबर)

ज़ूम-अनुपात-2-क्रॉप-169

छठी इमेज. 2.0 ज़ूम, 16:9 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

ज़ूम रेशियो: 0.5; ओरिजनल फ़ील्ड ऑफ़ व्यू का 4x (वाइड लेंस से अल्ट्रावाइड लेंस में बदला गया)
काटने का क्षेत्र: (250, 0, 1500, 1500) (1:1 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात))
640x480 स्ट्रीम क्रॉप: (250, 187, 1500, 1125) (लेटरबॉक्स किया गया)
1280x720 स्ट्रीम क्रॉप: (250, 328, 1,500, 844) (लेटरबॉक्स किया गया)

इमेज/ज़ूम-अनुपात-0.5-क्रॉप-11

सातवीं इमेज. 0.5 ज़ूम, 1:1 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात)

जैसा कि ऊपर दिए गए ग्राफ़ में देखा गया है, फ़सल के क्षेत्र की कोऑर्डिनेट सिस्टम, असरदार व्यू के बाद ज़ूम वाला फ़ील्ड शामिल है और इसे इन डाइमेंशन के साथ रेक्टैंगल से दिखाया गया है: (0, 0, activeArrayWith, activeArrayHeight). यही बात AE/AWB/AF क्षेत्रों और चेहरों पर भी लागू होती है. यह निर्देशांक सिस्टम परिवर्तन लागू नहीं होता है RAW कैप्चर और उससे जुड़ा मेटाडेटा, जैसे कि intrinsicCalibration और lensShadingMap.

ऊपर दिए गए काल्पनिक उदाहरण का इस्तेमाल करते हुए और यह मान लीजिए कि आउटपुट स्ट्रीम #1 (640x480) व्यूफ़ाइंडर स्ट्रीम, 2.0x ज़ूम इन दो में से किसी एक तरीके से हासिल किया जा सकता है:

  • zoomRatio = 2.0, scaler.cropRegion = (0, 0, 2000, 1500)
  • zoomRatio = 1.0 (डिफ़ॉल्ट), scaler.cropRegion = (500, 375, 1000, 750)

ऐप्लिकेशन के लिए, android.control.aeRegions को सबसे ऊपर बाईं ओर सेट करने का तरीका व्यूफ़ाइंडर फ़ील्ड ऑफ़ व्यू का चौथाई हिस्सा, सेट android.control.aeRegions से (0, 0, 1000, 750) तक android.control.zoomRatio को 2.0 पर सेट किया गया. इसके अलावा, ऐप्लिकेशन, android.control.aeRegions को इसके बराबर सेट कर सकता है इसके लिए (500, 375, 1000, 750) का इलाका 1.0 में से android.control.zoomRatio.