2012-10-02 16 views
12

मैं कैमरा ऐप बना रहा हूं और यह ऐप उपयोगकर्ताओं को कुछ फ़िल्टर प्रदान करेगा। वर्तमान में मेरा कोड एनडीके पर है और यह ठीक काम करता है, हालांकि मैं इसे थोड़ा तेज़ बनाना चाहता हूं। ऐसा लगता है कि जीपीयू और ओपनजीएल एएस 2.0 जाने का रास्ता है। जीपीयू के साथ मेरी एकमात्र चिंता यह है कि उनकी याददाश्त सीमा। चूंकि आधुनिक कैमरे 5-10 एमपी छवियों को लेते हैं जबकि GPU स्मृति सीमा उस से बहुत कम है। मैं सोच रहा था कि उस सीमा के आसपास काम करने का कोई तरीका है या नहीं। मुझे लगता है कि एकमात्र तार्किक विकल्प छवि को छोटे हिस्से को विभाजित कर रहा है, और फिर उन्हें GPU पर संसाधित कर रहा है और अंत में उन्हें अंतिम छवि में एकत्रित कर रहा है। मेरा सवाल यह है कि, यदि यह दृष्टिकोण अभी भी प्रदर्शन के लिए अच्छा होगा और मोबाइल जीपीयू पर छवि प्रसंस्करण उच्च रिज़ॉल्यूशन छवियों के लिए कोई अन्य विकल्प भी है।जीपीयू पर उच्च रिज़ॉल्यूशन छवि प्रसंस्करण के लिए जीपीयू की स्मृति सीमा को कैसे संभालें?

संपादित करें: मुझे यह स्पष्ट करने की आवश्यकता है कि मैं छवि प्रसंस्करण के लिए जीपीयू का उपयोग करना चाहता हूं, इसलिए मेरा लक्ष्य स्क्रीन पर परिणाम प्रस्तुत नहीं करना है। मैं इसे एक और बनावट में प्रस्तुत कर दूंगा और इसे डिस्क पर सहेज दूंगा।

+1

यह वास्तव में निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। जीपीयू की पेशकश यह है कि वे बेहद समानांतर हैं, लेकिन उन पर अधिक कोर फेंकने से सभी समस्याओं को आसान नहीं बनाया जा सकता है। – thecoshman

+0

मैं एक सामान्य समस्या का सामान्य समाधान प्राप्त करना चाहता था, हालांकि वर्तमान में मैं "लैपलासीन पिरामिड" कोड करने की कोशिश कर रहा हूं जो सीपीयू पर होने पर बहुत महंगा है। – dirhem

+0

अच्छी तरह से, यदि आप किसी छवि को टिंट लगाने की तरह कुछ कर रहे हैं, जहां आप सभी बिट्स पर एक ही ऑपरेशन लागू करना चाहते हैं, तो GPU को लोड करने का एक स्पष्ट समाधान है। एक छवि धुंधला करने जैसे कार्य थोड़ा सा ट्रिकियर होते हैं, क्योंकि प्रत्येक पिक्सल का नया मान पिक्सेल की एक श्रृंखला पर निर्भर करता है। हालांकि, आपके मामले में, आपको हार्डवेयर के बीच बहुत अंतर हैं, जैसे कि वे कितने रैम का समर्थन करते हैं, एक बनावट कितनी बड़ी है, आप उन्हें कितना डेटा भेज सकते हैं। हो सकता है कि वे ओपनसीएल स्टाइल प्रसंस्करण – thecoshman

उत्तर

2

आपका टाइलिंग विचार निंटेंडो एंटरटेनमेंट सिस्टम के बाद से उपयोग किया गया है, जिसमें रिको 2 ए03 1.79 मेगाहट्र्ज पर है, इसलिए यह एक अच्छा तरीका है। Google नक्शा डिस्प्ले प्रबंधित करने के लिए टाइलिंग का उपयोग करता है, और यहां तक ​​कि क्रिस्टिस जैसे गेम 1024x1024 (1 मेगापिक्सेल) जैसे कुछ अपने बनावट के बनावट आकार को सीमित करते हैं। और हाँ, 10 मेगापिक्सल के लिए 30 मेगाहर्ट्ज रैम की आवश्यकता होती है, इसलिए कुछ उपकरणों में समस्याएं हो सकती हैं, खासकर जब आप एक स्रोत और एक dest texture का उपयोग करते हैं, तो इसका मतलब होगा कि 60 मेगा रैम की आवश्यकता है।

बस ध्यान रखें कि बनावट के आकार 2 (2, 4, 8, 16, 32, 64, आदि) की शक्ति का उपयोग करते हैं। यदि आप इसे काटते हैं और छवि को टाइल करते हैं तो आपको कभी-कभी बेहतर गुणवत्ता मिल जाएगी।

2

आपको 10 एमपी छवियों में रीयल-टाइम फ़िल्टर लागू करने की आवश्यकता नहीं है ... क्योंकि ऐसे डिस्प्ले नहीं हैं (या शायद हमारे बीच लोकप्रिय उपयोग में नहीं हैं)। :)

तो आपको केवल प्रदर्शित होने वाले पिक्सल पर फ़िल्टर लागू करने की आवश्यकता है (1 9 00x1280?)। आपके द्वारा उल्लिखित टाइलिंग तकनीक का उपयोग अभी भी कुछ परिदृश्यों के साथ किया जाएगा। स्थगित प्रतिपादन ऐसा एक उदाहरण है। एक्स-बॉक्स 360 ने दैनिक आधार पर दोनों तकनीकों (स्थगित टाइलिंग) को नियोजित किया। टाइल किए बिना स्थगित तकनीक के लिए उच्च स्मृति आवश्यकताओं के कारण यह संभव नहीं होगा।

+0

मैंने यह स्पष्ट करने के लिए प्रश्न संपादित किया कि मैं स्क्रीन पर छवियों को प्रस्तुत करने के लिए जीपीयू का उपयोग नहीं करूंगा। मेरे पास स्क्रीन और इसके रिज़ॉल्यूशन के साथ कुछ भी नहीं है। छवि प्रसंस्करण पृष्ठभूमि किया जाएगा और स्क्रीन केवल एक प्रगति पट्टी दिखाएगी। तो GPU स्मृति सीमा अभी भी मेरे लिए है। – dirhem

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