2012-04-20 20 views
7

पर बिटमैप ड्राइंग के प्रदर्शन को बढ़ाने के लिए कैसे मैंने एफएफएमपीईजी के आधार पर एक मूवी प्लेयर बनाया। यह बढ़िया काम करता है। एलजी पी 9 70 (नियॉन के साथ कॉर्टेक्स ए 8) पर डिकोडिंग काफी तेज है, मेरे पास 640 x 424 रिज़ॉल्यूशन वीडियो स्ट्रीम के साथ औसत 70 एफपीएस है जिसमें यूयूवी 2 आरजीबी रूपांतरण शामिल है। हालांकि, एक बाधा है। यह कैनवास पर चित्रित कर रहा है।एंड्रॉइड

मैं देशी डेटा में बिटमैप में चित्र डेटा भरने के लिए जेनिग्राफिक्स मूल पुस्तकालय का उपयोग करता हूं और फिर मैं SurfaceView में कैनवास पर इस बिटमैप को खींचता हूं। यह काफी सरल और सामान्य दृष्टिकोण है, लेकिन ड्राइंग 640 x 424 रिज़ॉल्यूशन के साथ बिटमैप के लिए 44 एमएस लेता है जो एफपीएस को 23 तक कम करता है और इस तकनीक को अनुपयोगी बनाता है ... पूरे ए/वी फ्रेम डिकोडिंग में बहुत कुछ लगता है!

क्या कोई तरीका है कि बिटमैप्स को तेज़ी से कैसे आकर्षित किया जाए? मैं OpenGLES 2 का उपयोग कर मूल कोड में पूरी तरह से प्रस्तुत करना पसंद करूंगा, लेकिन मैंने इसे पढ़ा है slow भी हो सकता है। तो अब क्या? ...

मैं जितनी जल्दी हो सके बिटमैप्स प्रस्तुत कर सकता हूं?

+0

मूल कोड से सीधे SurfaceView के बफर तक पहुंचने का कोई तरीका नहीं है? कैमरा पूर्वावलोकन यह afaik करता है। – zapl

+0

AFAIK नहीं, कम से कम कोई मानक तरीका एनडीके का उपयोग कर नहीं। बेशक, एंड्रॉइड स्रोतों से लिंक करना संभव है, लेकिन यह संगतता के साथ परेशानियों का कारण बन जाएगा ... – vitakot

उत्तर

3

उन्हें GLES1.x में खींचें। आपको GLES2 का उपयोग करने की आवश्यकता नहीं है क्योंकि आपके पास कोई प्रश्न नहीं है, या कम से कम आपके प्रश्न के संदर्भ में नहीं, शेडर्स के लिए जो GLES2.x का उपयोग करने का सामान्य प्राथमिक कारण होगा। तो सादगी के लिए, GLES1.x आदर्श होगा। आपको बस इतना करना है कि स्क्रीन पर बाइटबफर खींचें। मेरे गैलेक्सी एस (वाइब्रेंट) पर यह लगभग 3ms लगता है। मेरे वॉलपेपर में बाइट [] का आकार 800x480x3 या 1152000 है जो आप काम कर रहे हैं उससे काफी बड़ा है।

मुझे विश्वास है कि इस गाइड को आपको सही दिशा में इंगित करना चाहिए।

http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html

मूल कोड से कैनवास तक पहुँचने की धारणा का सवाल है, मैं सिर्फ इतना है कि पूरी तरह से बचने और जितना संभव हो उतना GPU के लिए सब कुछ उतारने से एक ओपन कार्यान्वयन का अनुसरण करेगी।

+0

धन्यवाद, आप सही हैं; मैं OpenGLES1.x पर वापस आ जाऊंगा। मुझे ओपन जीएल के साथ कोई अनुभव नहीं है, इसलिए मेरी धारणा थी कि नया बेहतर होगा। मैंने आपके द्वारा प्रदान किए गए लिंक में लेख पहले से ही पढ़ा है। असल में, मुझे लगता है कि मैंने उन सभी संबंधित लेखों को पढ़ना होगा जो Google मेरे लिए आईओएस मंच के लिए भी ढूंढने में सक्षम था ... शोध के पूरे दिन के बाद भी मैं थोड़ा सा खो गया हूं। – vitakot

+0

दोनों संस्करण एक ही हार्डवेयर तक पहुंचते हैं। 2.0 में पावर अतिरिक्त हार्डवेयर से आती है जिसे आप एक्सेस करते हैं (शेडर प्रोसेसर)। तो उस रोशनी में मुझे लगता है कि यह कहना मुश्किल है कि कोई बेहतर या बदतर है, यह आमतौर पर यह तय करने के लिए सरल है कि आपको क्या हासिल करने की आवश्यकता है। –

2

मैं GoogleIO दौरान प्रतिकृति द्वीप प्रस्तुति के दौरान याद डिजाइनर ने कहा कि ओपन 'draw_texture' एक्सटेंशन glDrawTexfOES का उपयोग कर स्क्रीन पर Blit का सबसे तेज़ तरीका था, और काफी तेजी (मैं कर रहा हूँ संलग्न बनावट के साथ बस नियमित quads ड्राइंग से मानते हुए कि आप OpenGL का उपयोग कर रहे हैं)।

आप बनावट को घुमा नहीं सकते हैं, लेकिन ऐसा लगता है कि आपको इसकी आवश्यकता नहीं है।

+0

आप सही हैं, मुझे रोटेशन की परवाह नहीं है। मुझे OpenGLES1.x (https://github.com/richq/glbuffer) का उपयोग करके कुछ अच्छा उदाहरण मिला जो आपके द्वारा वर्णित फ़ंक्शन का उपयोग करता है। – vitakot