2012-01-13 19 views
5

पर आरजीबी छवियों का प्रदर्शन स्ट्रीम मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो कैमरा डिवाइस से छवियां प्राप्त करे और उन्हें जीटीके विंडो में प्रदर्शित करे।सी, जीटीके: <60 एफपीएस

कैमरा एक अलग फ्रेम दर (1-50 एफपीएस) पर कच्चे आरजीबी छवियों (3 बाइट प्रति पिक्सेल, कोई अल्फा चैनल, निश्चित आकार) प्रदान करता है।

मैंने पहले से ही सभी हार्डवेयर सामान किए हैं और अब एक कॉलबैक फ़ंक्शन है जिसे कैमरे द्वारा कैप्चर की गई हर नई छवि के साथ बुलाया जाता है।

मेरी खिड़की में उन छवियों को प्रदर्शित करने का सबसे आसान लेकिन तेज़ तरीका क्या है?

यहाँ मैं पहले से ही करने की कोशिश की है:

  • का उपयोग कर gdk_draw_rgb_image() एक जीटीके ड्राइंग क्षेत्र पर: मूल रूप से काम किया, लेकिन इतनी धीमी गति से कि ड्राइंग प्रक्रियाओं ओवरलैप और आवेदन पहले कुछ तख्ते के बाद दुर्घटनाग्रस्त हो गाया, यहां तक ​​कि 1 एफपीएस कैप्चर दर पर भी।

  • प्रत्येक नया फ्रेम के लिए एक GdkPixbuf आवंटन और एक जीटीके छवि विजेट पर gtk_image_set_from_pixbuf() बुला: केवल पहली फ्रेम प्रदर्शित करता है, तो मैं खिड़की में कोई परिवर्तन नहीं देखते हैं। मेरे कोड में एक बग हो सकता है, लेकिन यह नहीं पता कि वह पर्याप्त तेज़ होगा या नहीं।

  • काहिरा (cairo_set_source_surface(), तो cairo_paint()) का उपयोग कर: बहुत तेजी से लग रहा था, लेकिन छवि धारीदार लग रहा था, अगर छवि प्रारूप संगत है पता नहीं है।

वर्तमान में मैं gstreamer की तरह कुछ की कोशिश कर रहा है और एक वीडियो स्ट्रीम की तरह उन छवियों के इलाज के बारे में सोच रहा हूँ, लेकिन मुझे यकीन है कि क्या यह मेरे सरल तंत्र के लिए एक overkill की तरह है नहीं कर रहा हूँ।

किसी भी सलाह के लिए अग्रिम धन्यवाद!

+0

काहिरा 32 बिट शब्दों के संदर्भ में अपने CAIRO_FORMAT_RGB24 छवि सतह पिक्सल को परिभाषित करता है, इसलिए छोटी एंडियन मशीन पर स्मृति में, पिक्सेल बीजीआर 0 बीजीआर 0 होगा, आप शायद रिवर्स का उपयोग कर रहे हैं, या 0 बाइट में नहीं डाल रहे हैं, इसलिए अलग करना। – ergosys

+0

@lynix मुझे एक ही चीज़ को कोड करने की आवश्यकता है। क्या आप वेबकैम फ़ीड प्राप्त करने के लिए कैरो को कैसे साझा कर सकते हैं? – inckka

+0

@inckka: तब से यह 4 साल हो गया है, और किसी के लिए आपको एक सटीक उत्तर देने के लिए आपका प्रश्न बहुत सामान्य है। मेरी विशिष्ट समस्या हल हो गई है [इस तरह] (http://pastebin.com/QMCgaaUT)। – lynix

उत्तर

4

संपूर्ण जीडीकेआरबीबी एपीआई को बहिष्कृत किया जा रहा है, इसलिए शायद इसे हल करने का अनुशंसित तरीका नहीं है।

यह कॉल के लिए render a pixbuf पर जाता है। काहिरा में दस्तावेज बताते हैं, इसलिए समाधान जारी रखना जारी रखना प्रतीत होता है कि काहिरा द्वारा प्रदान की जाने पर आपकी छवि गलत क्यों दिखाई दे रही थी।

+0

धन्यवाद, यह बताता है कि मैं GdkRGB-stuff के लिए कोई पूर्ण ट्यूटोरियल क्यों नहीं ढूंढ सकता था। मैं अब कैरो के साथ जाऊंगा, बस सोच रहा हूं कि यह 50 एफपीएस – lynix

1

अनचाहे सही है, अगर आप जीटीके 2 और जीटीके 3 में काम करेंगे जो कुछ करना चाहते हैं तो कैरो रास्ता तय करने का तरीका है। चूंकि आपके नमूने अल्फा के बिना आरजीबी हैं, तो आपको CAIRO_FORMAT_RGB24 प्रारूप का उपयोग करना चाहिए। सुनिश्चित करें कि आपके द्वारा पेंट की गई सतह उस प्रारूप में है। यह भी सुनिश्चित करने का प्रयास करें कि यदि आप इनपुट छवि एक ही आकार में रहते हैं तो आप सतह बफर को लगातार आवंटित/नष्ट नहीं कर रहे हैं।

+0

के लिए पर्याप्त तेज़ है, धन्यवाद, मैंने कैरो के साथ कार्यान्वित करना शुरू कर दिया है। – lynix

+0

जैसा कि मैं स्टैक ओवरफ्लो के लिए नया हूं, क्या मैं यहां एक समस्या को हल करने के बारे में प्रश्न पूछूंगा जो मुझे कैरो के साथ या नए धागे में मिलती है? :) – lynix

+0

@lynix यदि आपके पास कोई नया प्रश्न है, तो एक नया प्रश्न पोस्ट करें। स्टैक ओवरफ़्लो * प्रश्न * पर आधारित है, न कि "धागे"। यह एक चर्चा मंच नहीं है। – unwind

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