기본 콘텐츠로 건너뛰기

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하는것이 용이함

댓글

이 블로그의 인기 게시물

llama 계열 gguf 제공되는 경우 가져와서 사용하는 예제

llama 계열의 모델이 친절하게 gguf 형태로 제공되는 경우 어떻게 다운받고 어떻게 ollama에 추가하는지 예전에 gguf 파일을 등록하는 유튜브 강의를 보고 메모해두것을 기반으로 2024년 12월31일 추운 겨울 밤 기억을 백업해 봅니다 수동으로 작성한 것은 지우고 copilot으로 포맷을 정리해서 업데이트합니다. Bllossom/llama-3.2-Korean-Bllossom-3B-gguf-Q4_K_M 한국어 모델 추가하기 시작 : MS Copilot과의 질의응답 중 llama 3.2 기반의 한국어 학습 모델을 발견. 현재 사용 모델 : EEVE-Korean-10.8B (약 7.7 GB) 모델 사용 중. llama 3.2 기반 한국어 모델 소개 : 모델 설명 링크 gguf 파일 다운로드 링크 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B  기반 한국어 모델 소개 : 모델 설명 링크 gguf 파일 다운로드 링크 모델 설정 파일 (Modelfile) : FROM llama-3.2-Korean-Bllossom-3B-gguf-Q4_K_M.gguf PARAMETER temperature 0.6 PARAMETER top_p 0.9 TEMPLATE """<|start_header_id|>system<|end_header_id|> Cutting Knowledge Date : December 2023 {{ if .System }}{{ .System }} {{- end }} {{- if .Tools }} When you receive a tool call response, use the output to format an answer to the orginal user question. You are a helpful assistant with tool calling capabilities. {{- end }} <|eot_id|> {{- range $i , $_ := .Messa...

OS가 설치된 PM981A (512GB)를 A440Pro(2TB)로 NVME 마이그레이션 과정

조립대행으로 마춘 컴퓨터라 NVME 마이그레이션을 처음인데 무사히 마쳐서 2~3년뒤에 혹시 찾아볼까 싶어 기록으로 남깁니다. 사용하는 제품은 NVME 제품은 삼성전자 PM Pm981a M.2 NVME 512GB 인데 국내에서는 삼성전자 내장 SSD 970 EVO Plus NVMe M.2 500 GBMZ-V7S500BW https://www.samsung.com/sec/memory-storage/970-evo-plus-nvme-m2-ssd/MZ-V7S500BW/ 기존시스템 AMD 라이젠 3600 (마티스) MSI B450M 박격포 맥스 M2_1 은 PCI e3.0 M2_2 는 PCIe 2.0 삼성전자 PM Pm981a M.2 NVME 512GB C 드라이브가 점점 차올라서 TeamGroup A440 Pro PCIe 4.0x4 2TB 구입 11월25일 주문, 12월2일 배송 JEYI 방열패드 조립 https://youtu.be/idZ3ctqlpwo?si=Ade03n0afuMKTD9q 존스보 방열판보다는 더 두꺼우나 장착에는 문제가 없음. M.2 2nd slot에 장착 Migration Program 준비 여기서 시간소요 많이함, Free 버젼에서 Clone기능이 막혀있거나 Trial에서도 안되는 복제기능이 지원되지 않음. AOMEI backup Std Clone 미지원 AOMEI backup Pro Tirla Clone 미지원 Samsung Disk_Mirgration (지원하지 않는다는 이야기가 있어서 Skip) refect home trial 지원 refect home trial로 clone시 21분소요 PCIe 3.0 x4 에서 PCIe 2.0 x4 로 clone C: Pm981a spec상 속도가 3500MB/s, 쓰기 속도는 3200MB/s F: A440 Pro spec상 속도가 7400MB/s, 쓰기 속도는 7000MB/s 복제완료후 PCIe 3.0 의 PM981A와 PCIe 2.0 의 A440 Pro를 스왑 해매는 포인트 여기서 약간 해맸...

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...