2013-02-05 28 views
7

मैं एंड्रॉइड के लिए GPUImage(ios) से GPUImageTwoPassFilter को फिर से बनाने की कोशिश कर रहा हूं। मैं GPUImage के एंड्रॉइड पोर्ट के लिए the work done here पर काम कर रहा हूं। पोर्ट वास्तव में कई फ़िल्टरों के लिए बहुत अच्छा काम करता है। मैंने कई शेडर्स पर पोर्ट किया है, मूल रूप से बड़ी सफलता के साथ लाइन के लिए लाइन।वास्तव में दोपैसफ़िल्टर GPUImage क्या करता है?

समस्या यह है कि कुछ फ़िल्टरों को पोर्ट करने के लिए, आपको GPUImage से GPUImageTwoPassFilter से विस्तार करना होगा, जो एंड्रॉइड संस्करण के लेखक ने अभी तक लागू नहीं किया है। मैं इसे लिखने में एक स्टैब लेना चाहता हूं, लेकिन दुर्भाग्यवश आईओएस संस्करण बहुत अनियंत्रित है इसलिए मुझे सच में यकीन नहीं है कि टूपास फ़िल्टर क्या करना है।

क्या किसी के पास इसके बारे में जाने के लिए कोई सुझाव है? मेरे पास ओपनजीएल का सीमित ज्ञान है, लेकिन एंड्रॉइड और आईओएस का बहुत अच्छा ज्ञान है। मैं निश्चित रूप से यहां बहुत ही psudocode वर्णन की तलाश कर रहा हूं

+0

+1 हमें एंड्रॉइड के लिए इस पर काम करने वाले लोगों की आवश्यकता है! यह एक भयानक ओपन सोर्स प्रोजेक्ट है, जिसने इसे आईओएस पर इस्तेमाल किया है और इसे एंड्रॉइड –

+0

पर खो दिया है, अगर यह फ़िल्टर मौजूद है, तो यह परियोजना एंड्रॉइड – Jameo

+0

पर तत्काल मूल्यवान होगी। 'GPUImageMovieWriter' भी उपयोग के मामले के आधार पर बेहद मूल्यवान है, लेकिन यह एक ऐसा क्षेत्र है जहां एंड्रॉइड को पोर्ट करना ** बहुत ** कठिन हो सकता है –

उत्तर

6

मुझे लगता है कि मुझे अपनी सोच को समझाने की आवश्यकता है।

जैसा कि नाम इंगित करता है, इनपुट इनपुट में केवल एक ही ऑपरेशन को लागू करने के बजाय, यह उस छवि के खिलाफ शेडर्स के दो पास चलाता है, एक दूसरे के बाद। गॉसियन ब्लर्स जैसे संचालन के लिए इसकी आवश्यकता है, जहां मैं एक लंबवत कर्नेल का उपयोग एक लंबवत धुंध पास करने के लिए करता हूं और फिर क्षैतिज एक (9-हिट धुंध पर बनावट को 81 से 18 तक पढ़ता है)। मैं छवियों को किनारे का पता लगाने के लिए उनके ल्यूमिनेंस घटक में कम करने के लिए इसका उपयोग करता हूं, हालांकि मैंने हाल ही में फिल्टर को यह पता लगाने के लिए बनाया है कि क्या वे उस वैकल्पिक बनाने के लिए मोनोक्रोम सामग्री प्राप्त कर रहे थे।

इसलिए, यह बेस GPUImageFilter को दो फ्रेमबफर और दो शेडर प्रोग्रामों का उपयोग करने के बजाय प्रत्येक में से एक के लिए विस्तारित करता है। पहले पास में, प्रतिपादन एक मानक GPUImageFilter के साथ ऐसा होता है। हालांकि, इसके अंत में, परिणामस्वरूप बनावट को श्रृंखला में अगले फ़िल्टर में भेजने की बजाय, यह बनावट दूसरे रेंडर पास के लिए इनपुट के रूप में ली जाती है। फिल्टर दूसरे शेडर प्रोग्राम में स्विच करता है और दूसरे आउटपुट बनावट के उत्पादन के लिए पहले आउटपुट बनावट के खिलाफ चलता है, जिसे अंततः इस फ़िल्टर के आउटपुट के रूप में पास किया जाता है।

फ़िल्टर GPUImageFilter के केवल विधियों को ओवरराइड करता है जो ऐसा करने के लिए आवश्यक है। देखने के लिए एक मुश्किल बात यह है कि मैं फिल्टर के पहले चरण में इनपुट छवि के घूर्णन के लिए सही हूं, लेकिन दूसरे चरण को फिर से छवि को घुमाए जाने की आवश्यकता नहीं है। यही कारण है कि पहले और दूसरे चरणों के लिए उपयोग किए गए बनावट निर्देशांक में एक अंतर है। इसके अलावा, एक ही दिशा में नमूने वाले ब्लर्स जैसे फ़िल्टरों को उनके नमूना इनपुट फ़्लिप करने की आवश्यकता हो सकती है, इस पर निर्भर करता है कि पहला चरण छवि को घुमा रहा है या नहीं।

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

+0

फ़्रेमबफर में दो बार (प्रत्येक पास के लिए एक) को निर्देशांक घुमाने या अनुवाद करने के अलावा, क्या यह दो फ़िल्टरों को एक साथ जोड़कर अलग है फिल्टर समूह? – Jameo

+0

@Jameo - महत्वपूर्ण नहीं, नहीं। मैंने फिल्टर समूहों को अवधारणा के रूप में बनाने से पहले इसे लिखा था। यह शायद थोड़ा कम ओवरहेड की वजह से एक बाल तेज हो सकता है, लेकिन एक समझनीय राशि से नहीं। यह ऐसा करता है ताकि आपको समूहों में उप-संचालन के लिए कस्टम फ़िल्टर प्रकार बनाने की आवश्यकता न हो, इसलिए यह ढांचे को थोड़ा क्लीनर बना सकता है। –

संबंधित मुद्दे