기본 콘텐츠로 건너뛰기

How to use turbojpeg library Android App

안드로이드앱에서 TurboJpeg library를 사용하기


방법

Android Framework에 포함시키기 위해서는 Android.mk Application.mk 작업이 필요함.
GitHub등에서서 소개되는 방식이나 소개되는 version이 1.1.x 대로 1.4.x version을 적용하려고 함.

사전준비

NDK 설치 Linux Machine
StandAlone NDK 설치된 Linux Machine

ndk-build를 이용하는 경우 Android.mk 필요


$NDK/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk APP_ABI=armeabi-v7a
or
$NDK/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk APP_ABI=armeabi
Android.mk
# Makefile for libjpeg-turbo

ifneq ($(TARGET_SIMULATOR),true)

##################################################
###                simd                        ###
##################################################
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)

ifeq ($(ARCH_ARM_HAVE_NEON),true)
        LOCAL_CFLAGS += -D__ARM_HAVE_NEON
endif

# From autoconf-generated Makefile
EXTRA_DIST = simd/nasm_lt.sh simd/jcclrmmx.asm simd/jcclrss2.asm simd/jdclrmmx.asm simd/jdclrss2.asm \
        simd/jdmrgmmx.asm simd/jdmrgss2.asm simd/jcclrss2-64.asm simd/jdclrss2-64.asm \
        simd/jdmrgss2-64.asm simd/CMakeLists.txt

libsimd_SOURCES_DIST = simd/jsimd_arm_neon.S \
                       simd/jsimd_arm.c

LOCAL_SRC_FILES := $(libsimd_SOURCES_DIST)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \
                    $(LOCAL_PATH)/android

AM_CFLAGS := -march=armv7-a -mfpu=neon
AM_CCASFLAGS := -march=armv7-a -mfpu=neon

LOCAL_MODULE_TAGS := debug

LOCAL_MODULE := libsimd

include $(BUILD_STATIC_LIBRARY)

######################################################
###           libjpeg.so                       ##
######################################################

include $(CLEAR_VARS)

# From autoconf-generated Makefile
libjpeg_SOURCES_DIST =  jcapimin.c jcapistd.c jccoefct.c jccolor.c \
        jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
        jcomapi.c jcparam.c jcphuff.c jcprepct.c jcsample.c jctrans.c \
        jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \
        jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \
        jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c \
        jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c \
        jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c \
        jaricom.c jcarith.c jdarith.c \
        turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c \
        turbojpeg-mapfile

LOCAL_SRC_FILES:= $(libjpeg_SOURCES_DIST)

#LOCAL_SHARED_LIBRARIES := libcutils
LOCAL_STATIC_LIBRARIES := libsimd

LOCAL_C_INCLUDES := $(LOCAL_PATH)

standalone toolchain 을 사용하는 경우

ToolChain 위치
aarch64 : /opt/crosstools/ndkr16b64/
arm : /opt/crosstools/ndkr16b32/
aarch64용
./configure --host=aarch64-linux-android --build=x86_64-linux-gnu --target=aarch64-linux-android CC=/opt/crosstools/ndkr16b64/bin/aarch64-linux-android-gcc AR=/opt/crosstools/ndkr16b64/bin/aarch64-linux-android-ar  STRIP=/opt/crosstools/ndkr16b64/bin/aarch64-linux-android-strip RANLIB=/opt/crosstools/ndkr16b64/bin/aarch64-linux-android-ranlib    --prefix=/home/jhlim SYSROOT=/opt/crosstools/ndkr16b64
arm(32bit)용
./configure --host=aarch64-linux-android --build=x86_64-linux-gnu --target=arm-linux-androideabi CC=/opt/crosstools/ndkr16b32/bin/arm-linux-androideabi-gcc AR=/opt/crosstools/ndkr16b32/bin/arm-linux-androideabi-ar  STRIP=/opt/crosstools/ndkr16b32/bin/arm-linux-androideabi-strip RANLIB=/opt/crosstools/ndkr16b32/bin/arm-linux-androideabi-ranlib    --prefix=/home/jhlim SYSROOT=/opt/crosstools/ndkr16b32
빌드결과 libturbojpeg.so


Android Studio 적용

CMakeLists.txt 
# turbojpeg
add_library(jpeg-lib SHARED IMPORTED)
set_target_properties(jpeg-lib PROPERTIES IMPORTED_LOCATION ${CPP_DIR}/libs/${ANDROID_ABI}/libturbojpeg.so)
정리

  1. BSP에 포함시키려면 Android.mk를 작성하는것이 필요함.
  2. Apk에 포함시키려면 StandAlone Toolchain으로 crosscompile하는것이 용이함

댓글

이 블로그의 인기 게시물

TUF Z390-PLUS GAMING 보드 불편한점

2018년 11월말에 PC를 새로 셋업했습니다. 사무실에서 사용하는 조건이라 구성은 단촐하게 CPU + BOARD + Memory 컴파일용이라 그래픽카드는 없습니다. CPU는 i7 9700K이고, Mainboard Model 은 TUF Z390-PLUS GAMING 입니다. 전에사용하던 CPU가 Haswell i5였었기 때문에 비교하면 2배는 좋아서 성능은 좋습니다. 이틀정도 설정하고 사용후 불편한점 0. 기존 DVI-I 인터페이스가 없어져서 구형 모니터의 DVI 포트를 사용하지 못합니다. DVI + VGA 조합이었는데 .. 변경후 DP + HDMI 조합이라서 애매하게 되었습니다. 1. 설치후에 ASUS Q-installer가 실행되고 설치가 끝나지 않는 현상이 있습니다. 혹시나 해서 BIOS는 현재 기준으로 최신버젼인 1004로 업데이트했습니다. 부팅때마다 저러고 있어서 , 일단 ASUS 홈페이지를 통해서 문의를 넣어놓은 상태입니다. 참고로 ASUS에 문의를 넣을때 MotherBoard 시리얼 번호가 필요합니다. cpuZ 프로그램으로 Report.txt를 출력해서 Ctrl+f로 찾아보면 Serial Number 와 문의시 필요한 CPU정보, DDR정보를 알아낼 수 있으니 cpuZ로 report.txt를 먼저 생성한후에 ASUS 문의를 시작하면 시간이 단축됩니다. Processors Information ------------------------------------------------------------------------- Socket 1 ID = 0 Number of cores 8 (max 8) Number of threads 8 (max 8) Name Intel Core i7 9700K Codename Coffee Lake Specification Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz Package

DELL의 새게이밍 노트북, Inspiron 15 7000 Gaming, Dual Display 문제

Dell New 게이밍노트북 7567  I7 Notebook http://www.dell.com/kr/p/inspiron-15-7567-laptop/pd?ref=PD_OC 7th Generation Intel® Core™ i7 프로세서 8GB 메모리 1TB 하드 드라이브 + 128GB 솔리드 스테이트 드라이브 NVIDIA® GeForce® GTX 1050 Ti (4GB GDDR5 그래픽 메모리 포함) 상세 사양 리눅스 개발환경이 필요해서 여러대 구매한 노트북입니다. 기본적으로 ubuntu 16.04 가 설치되어 있는데, 필요한 개발환경이 ubuntu 이고 별도의 windows 개발용 PC가 있기 때문에 구매를 결정하게 되었습니다. Slim하지 않지만 I7 HQ CPU와 1050TI spec 이 결정하는데 주요했고, 받은 후에 빌드환경 구축후 8 thread compile을 만끽하던중 치명적인 문제를 Display쪽 문제를 발견하고, Dell express 쪽과 전화통화도 하고 문의 메일도 보내서 지원을 받고(진행)중입니다. 추가 :  시간낭비하지 말라고 중간에 업데이트합니다.  해결되었고, 해결방법은  Windows 을 설치한 후 Fn+F8을 눌러서 모드를 확장모드를 선택합니다. 디스플레이 설정이나 드라이버 재설치 같은 방법으로는 조정이 불가능했습니다. --------------------------------------------------------------------- 요즘 다들 Dual monitor 환경일텐데, Dual Monitor를 복제형태로만 지원을 합니다. 14.04 설치후 업데이트시 375.66 Driver가 설치됩니다. nVidia driver가 설치되었으나, 모니터 인식에 문제가 있어서 해상도 확장설정자체를 할 수 없습니다. 기본 ubuntu라서 driver 문제인가 확인하기 위해서 우분투 64bit 환경 NVIDIA 최신(최신부터 하나 하나 뒤로 가면서 적용해봄)

UVC Camera 참고 Link

http://erutaso.tistory.com/100   출처 : http://www.rasplay.org/?p=2673 라즈베리파이에서 UVC camera 이용하는 예제인데 PC Linux에서도 동일하게적용   Ubuntu + UVC Camera(Eva Corelogic) motion package설치만으로 jpeg stream windows pc에서는 vlc로 확인가능   Streaming 시작 sudo service motion start sudo service motion stop network스트림에서 http://192.168.141.61:8081 이라고 입력해서 확인     : motion 패키지는 이름에서 알 수 있듯이 비디오 결과물의 영상에서 모션의 움직임을 포착하여 이벤트를 발생시켜주는 프로그램 유명하다. 특화된 기능이외에도 기본적으로 USB 이미지 촬영, 전송, 웹스트리밍 등이 가능하다. sudo apt-get install motion 5. motion 패키지 설정 : 웹 스트리밍 기능을 사용할 수 있도록 /etc/motion/motion.conf 의 설정 파일을 수정하도록 하자. sudo nano /etc/motion/motion.conf 1) daemon = off 에서 on 으로 설정 : daemon 옵션을 프로그램을 백그라운드에서 별도로 돌리기 위한 옵션 설정이다. 2) webcam_localhost = on 에서 off 으로 설정 : 웹캠을 로칼에서만 사용할지를 설정하는 것으로 우리는 다른 컴퓨터 및 장비로부터 접속할 예정이기에 Off로 설정하도록 하자. 위 두 옵션은 웹 스트리밍을 위한 최소한의 조건이고, 그 이외에 웹캠의 이미지의 넓이, 높이, 프레임레이트 설정, 웹캠 포트 설정 등이 있다. 또한, 필자가 언급한 설정 이외에도 많은 설정을 포함하고 있으니, /etc/motion/motion.conf 의 부가 설명을 읽어보고 자신이 원하는 설정으로 바꿔도 된