2009-05-15 16 views
10

किसी को भी सी/सी ++ के लिए एक मुक्त ओपन-सोर्स जेपीईजी एन्कोडिंग लाइब्रेरी पता है? वर्तमान में मैं ImageMagick का उपयोग कर रहा हूं, जो उपयोग करना आसान है, लेकिन यह बहुत धीमी है। मैंने इसे इंटेल प्रदर्शन प्राइमेटिव्स के मूल्यांकन के साथ तुलना की और आईपीपी की गति पागल है। दुर्भाग्यवश यह 200 डॉलर भी खर्च करता है, और मुझे 99% आईपीपी की आवश्यकता नहीं है)। इसके अलावा यह केवल इंटेल पर तेजी से काम करेगा।फास्ट जेपीईजी एन्कोडिंग लाइब्रेरी

कोई भी कोई परीक्षण करता है? ImageMagick से कहीं भी कोई अन्य अच्छी पुस्तकालय?

संपादित करें: मैं ImageMagick के 8 बिट संस्करण का उपयोग कर रहा था जो तेजी से माना जाता है।

+1

वास्तव में क्या "धीमी" है: हम 64-बिट और 32-बिट संस्करण जो संपीड़ित करने में लगभग के रूप में तेजी से कर रहे हैं IPP के रूप में/decompressing आधारभूत जेपीईजी अनुकूलित किया है? क्या आप संख्या दे सकते हैं? – lothar

+0

इस बिंदु पर नहीं।मुझे पता है कि% CPU उपयोग तब होता है जब मैं इसे छवियों का एक गुच्छा एन्कोड करने के लिए कहता हूं। मैं कहूंगा कि आईपीपी तीव्रता का क्रम है। लेकिन मैं कुछ वास्तविक संख्या प्राप्त करने की प्रक्रिया में हूं। – Budric

उत्तर

2

ImageMagick libjpeg (a.k.a स्वतंत्र जेपीईजी समूह पुस्तकालय) का उपयोग करता है। यदि आप libjpeg की गति में सुधार करते हैं, तो ImageMagick जेपीईजी गति में वृद्धि होगी।

  1. एक अनुकूलित libjpeg संकलित करें:

    कुछ ही विकल्प हैं। यदि आपके पास आधुनिक जीसीसी और कम से कम एक पेंटियम 4 है, तो आप -O3 -msse2 आज़मा सकते हैं और देख सकते हैं कि यह आपकी गति को बढ़ा सकता है या नहीं। फिर आप सिस्टम के बजाय LD_LIBRARY_PATH या अपने libjpeg को लोड करने के किसी अन्य तरीके का उपयोग कर सकते हैं।

  2. libjpeg-mmx को आजमाएं। यह अनजान है, और माना जाता है कि बदसूरत और सुरक्षा त्रुटियों के साथ, लेकिन यह आपके मामले में तेजी से बढ़ावा दे सकता है।
+2

libjpeg-turbo बहुत स्थिर है, और आजकल अधिकांश ब्राउज़रों द्वारा उपयोग किया जाता है। आईजेजी libjpeg से परेशान मत करो। –

1

यदि आप आसपास देखते हैं तो आपको इंटेल जेपीईजी लाइब्रेरी का पुराना संस्करण मिल सकता है। यह ओपनसोर्स नहीं है लेकिन यह तेज़ है। यह 733MHz पी-III पर 25fps प्राप्त करने के लिए पर्याप्त तेज़ था।

+1

दुर्भाग्य से मैं नहीं कर सकता। हर कोई इंटेल को संदर्भित करता है जो निश्चित रूप से इसे और अधिक प्रदान नहीं करता है। यदि आपके पास कोई लिंक है, तो मैं इसे प्राप्त करना चाहता हूं। – Budric

3

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

+0

धन्यवाद, मैं उस को याद करता हूं भले ही मैं बूस्ट का उपयोग करता हूं। – Budric

+0

मुझे यकीन नहीं है, लेकिन जीआईएल डीपीओडी और एन्कोडिंग जेपीईजी के लिए libjpeg का उपयोग करता है, तो यहां क्या मायने रखता है libjpeg का प्रदर्शन है .. – Qubeuc

+0

जीआईएल एक सामान्य छवि मैनिपुलेशन लाइब्रेरी है, यह किसी भी I/O और संपीड़न को मूल रूप से कार्यान्वित नहीं करता है। इसके बजाए, क्यूबेक ने उल्लेख किया है, यह तीसरे पक्ष के पुस्तकालयों पर निर्भर करता है। वर्तमान में, जीआईएल आईओ एक्सटेंशन libpng का उपयोग कर libjpeg और पीएनजी का उपयोग कर जेपीईजी के लिए लागू किया गया है। शायद टीआईएफएफ (libtiff) भी उपलब्ध है, मुझे यकीन नहीं है। – mloskot

3

एएमडी Framewave प्रदान करता है, जो आईपीपी के लिए खुले सोर्स विकल्प है।

+0

संक्षेप में एपीआई को देखते हुए ऐसा लगता है कि वे डीसीटी ट्रांसफॉर्म जैसे जेपीईजी बुनियादी सिद्धांत प्रदान करते हैं, लेकिन मुझे वास्तविक लेखन फ़ंक्शन नहीं दिख रहा है जो मुझे एक वैध जेपीईजी छवि देगा। क्या आपने इसका इस्तेमाल किया है? क्या आप मुझे सही काम पर इंगित कर सकते हैं? – Budric

+2

आईपीपी की तरह, फ़्रेमवेव "श्रृंखला योग्य" कोड ब्लॉक की एक लाइब्रेरी है, पूर्ण टूल फ़ंक्शंस नहीं। आपको अपने आप को बाइनरी डेटा लिखना/पढ़ना होगा। यह कहा गया है कि आईपीपी के साथ जेपीईजी पढ़ने और लिखने के लिए कोड उपलब्ध है: http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-code-samples फ़्रेमवेव " एपीआई-संगत "आईपीपी के साथ, इसलिए सभी की आवश्यकता होनी चाहिए आईपीपी-कॉल को फ्रेमवेव-कॉल के साथ बदलना। कॉल अलग-अलग उपसर्गों के साथ सटीक समान नामकरण का उपयोग करते हैं (fwiEncodeHuffman8x8_JPEG_16s1u_C1 बनाम ippiEncodeHuffman8x8_JPEG_16s1u_C1)। – Tobiesque

1

Independent JPEG Group भी है जो काफी पुराना है और मैं इसकी गति के लिए झुकाव नहीं कर सकता। लेकिन यह स्थिर होना चाहिए।

this page के माध्यम से मिला।

+0

यही वह है जिसका हम उपयोग करते हैं। यह हमारे लिए उपयोग किए जाने वाले कार्यों के लिए ठीक काम करता है। –

1

मैंने 100% गुणवत्ता का उपयोग करके 512x512 जेपीईजी को कुछ समय एन्कोडिंग किया (मुझे पता है कि 100% लापरवाही नहीं है)। मूल रूप से ImageMagick libjpeg से थोड़ा धीमा था। 100 छवियों के लिए अंतर एक सेकंड के 10 वें क्रम के क्रम में था। तब मुझे सिम एक्सटेंशन (http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html#source) के साथ libjpeg मिला और यह बात 6-10 गुना तेज है। ध्यान दें कि यह वास्तव में छवि के प्रकार पर निर्भर करता है। बहुत सारे काले रंग वाली छवियां वास्तव में तेज़ हैं, हर जगह विस्तार से छवियां वास्तव में धीमी हैं - मेरा मानना ​​है कि यह एन्कोडिंग एल्गोरिदम है। मुझे libjpeg-mmx को आज़मा देना पड़ सकता है क्योंकि मुझे जापानी संस्करण की तुलना में अधिक रखरखाव दिखता है कि मुझे यह भी नहीं पता कि लाइसेंस क्या है।

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

6

टाइगर वीएनसी (http://www.tigervnc.com) के ट्रंक में libjpeg/SIMD देखें।

http://www.mail-archive.com/[email protected]/msg00403.html

+0

मैंने अपने विकी में विभिन्न आर्किटेक्चर के लिए इसे बनाने के तरीके के बारे में एक लेख जोड़ा: http://www.virtualgl.org/DeveloperInfo/Libjpeg – DRC

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