1. 程式人生 > >Android上libjpeg-turbo編譯筆記

Android上libjpeg-turbo編譯筆記

#####學習libjpeg-turbo的原因,最近專案中需要解碼1080p的圖片轉為yuv進行視訊預覽,原本的ffmpeg實現解碼及縮放圖片,但是在大部分主流Android機型上效率不高,android手機發熱會有明顯降頻現象,導致速率降低,偶爾在網上看到libjpeg-turbo庫比libjpeg快2-3倍,故而測試##### #### 參考文獻,謝謝指引: #### * [Android圖片壓縮庫——libjpeg-turbo](http://blog.csdn.net/talkxin/article/details/50696511) * 一篇很詳細講解壓縮和解壓圖片的庫,參考[libjpeg-turbo解壓與壓縮JPEG影象原理](http://blog.csdn.net/gdp12315_gu/article/details/45061947) #### libjpeg-turbo下載及編譯靜態庫 #### 1. clone android 分支: git clone git://git.linaro.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linaro-android 2. 改名為jni檔案目錄 mv libjpeg-turbo jni 3. ndk編譯,該步驟需要配置ndk的環境變數,可能導致的問題,部分語法不支援或者libcutils庫找不到情況,請使用ndk-r11c版本編譯 ndk-build APP_ABI=armeabi-v7a,armeabi #### libjpeg-turbo碰到的問題 #### 1. error: use of undeclared identifier 'CENTERJSAMPLE'  rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i    + CBCR_OFFSET + ONE_HALF-1; MAXJSAMPLE 都是ifdef判斷控制代碼獲取不到導致,可以直接去jmorrecfg.h中修改,可以直接把他從判斷語句中提出 typedef char JSAMPLE; #ifdef __CHAR_UNSIGNED__ #define GETJSAMPLE(value)  ((int) (value)) #else #define GETJSAMPLE(value)  ((int) (value) & 0xFF) #endif /* __CHAR_UNSIGNED__ */ //#endif /* HAVE_UNSIGNED_CHAR */ #endif /* BITS_IN_JSAMPLE == 8 */ #define MAXJSAMPLE      255 #define CENTERJSAMPLE   128 2. /jcmaster.c:638:26: eerror: use of undeclared identifier 'PACKAGE_NAME'  master->jpeg_version = PACKAGE_NAME " version " VERSION " (build " BUILD ")";  從jconfig.txt中可以看到,需要手動指定jconfig.h和jconfigint.h