서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.

안녕하십니까?

1. 교재의 내용대로 ffmpeg 0.10.2와 Android.mk를 다운 빌드 하였으나 
avcodec과 avutil쪽에 링크에러가 여럿이 나와 몇개의 파일을 첨부하였습니다.
그랬더니 빌드가 끝나 보니 
out/target/product/odroidx/obj/lib 에는libffmpeg 만 있고
out/target/product/odroidx/system/lib 에는 libffmpeg.so 생성이 되었습니다.

out/target/product/odroidx/obj/lib 에 libffmpeg.so 로 만들어지지 않은 이유는 무엇인가요?

2. 어쨌든 위에 만들어진 libffmpeg.so 를 가지고 

hoffplay를 빌드하니 다음과 같은 메시지가 나왔습니다.

root@ubuntu:/media/dev_linux/Hardkernel/4412_a32/android/external/hoffplay# mm
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.4
TARGET_PRODUCT=odroidx
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=IMM76L
============================================
make: Entering directory `/media/dev_linux/Hardkernel/4412_a32/android'
target thumb C++: libhoffplay <= external/hoffplay/hoplayer_core/audioflinger_wrapper.cpp
target thumb C++: libhoffplay <= external/hoffplay/hoplayer_core/surfaceflinger_wrapper.cpp
target thumb C: libhoffplay <= external/hoffplay/hoplayer_core/hoffplay.c
external/hoffplay/hoplayer_core/hoffplay.c:31: warning: initialization makes integer from pointer without a cast
external/hoffplay/hoplayer_core/hoffplay.c: In function 'decode_audio':
external/hoffplay/hoplayer_core/hoffplay.c:108: warning: 'avcodec_decode_audio3' is deprecated (declared at external/ffmpeg/libavcodec/avcodec.h:3658)
external/hoffplay/hoplayer_core/hoffplay.c:108: warning: passing argument 2 of 'avcodec_decode_audio3' from incompatible pointer type
external/ffmpeg/libavcodec/avcodec.h:3658: note: expected 'int16_t *' but argument is of type 'uint8_t *'
external/hoffplay/hoplayer_core/hoffplay.c: In function 'engine_start':
external/hoffplay/hoplayer_core/hoffplay.c:212: warning: passing argument 4 of 'avformat_open_input' from incompatible pointer type
external/ffmpeg/libavformat/avformat.h:1335: note: expected 'struct AVDictionary **' but argument is of type 'struct AVDictionary *'
external/hoffplay/hoplayer_core/hoffplay.c:218: warning: 'av_find_stream_info' is deprecated (declared at external/ffmpeg/libavformat/avformat.h:1357)
external/hoffplay/hoplayer_core/hoffplay.c:226: warning: comparison between signed and unsigned integer expressions
external/hoffplay/hoplayer_core/hoffplay.c:274: warning: 'avcodec_open' is deprecated (declared at external/ffmpeg/libavcodec/avcodec.h:3380)
external/hoffplay/hoplayer_core/hoffplay.c:296: warning: 'avcodec_open' is deprecated (declared at external/ffmpeg/libavcodec/avcodec.h:3380)
external/hoffplay/hoplayer_core/hoffplay.c:338: warning: passing argument 2 of 'sws_scale' from incompatible pointer type
external/ffmpeg/libswscale/swscale.h:237: note: expected 'const uint8_t * const*' but argument is of type 'uint8_t **'
external/hoffplay/hoplayer_core/hoffplay.c:341: warning: pointer targets in passing argument 1 of 'hovideo_post' differ in signedness
external/hoffplay/hoplayer_core/surfaceflinger_wrapper.h:11: note: expected 'char *' but argument is of type 'uint8_t *'
external/hoffplay/hoplayer_core/hoffplay.c:341: warning: pointer targets in passing argument 2 of 'hovideo_post' differ in signedness
external/hoffplay/hoplayer_core/surfaceflinger_wrapper.h:11: note: expected 'char *' but argument is of type 'uint8_t *'
external/hoffplay/hoplayer_core/hoffplay.c:341: warning: pointer targets in passing argument 3 of 'hovideo_post' differ in signedness
external/hoffplay/hoplayer_core/surfaceflinger_wrapper.h:11: note: expected 'char *' but argument is of type 'uint8_t *'
external/hoffplay/hoplayer_core/hoffplay.c:362: warning: 'av_close_input_file' is deprecated (declared at external/ffmpeg/libavformat/avformat.h:1533)
target thumb C: libhoffplay <= external/hoffplay/hoplayer_core/hoffplayjni.c
external/hoffplay/hoplayer_core/hoffplayjni.c: In function 'Java_net_hybridego_mm_hoffplay_HoffplayActivity_createStreamingMediaPlayer':
external/hoffplay/hoplayer_core/hoffplayjni.c:26: warning: passing argument 1 of 'engine_start' discards qualifiers from pointer target type
external/hoffplay/hoplayer_core/hoffplayjni.c:18: note: expected 'char *' but argument is of type 'const char *'
external/hoffplay/hoplayer_core/hoffplayjni.c: In function 'Java_net_hybridego_mm_hoffplay_HoffplayActivity_setSurface':
external/hoffplay/hoplayer_core/hoffplayjni.c:43: warning: implicit declaration of function 'ANativeWindow_fromSurface'
external/hoffplay/hoplayer_core/hoffplayjni.c:43: warning: assignment makes pointer from integer without a cast
target SharedLib: libhoffplay (out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/LINKED/libhoffplay.so)
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:332: error: undefined reference to 'sws_getContext'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:338: error: undefined reference to 'sws_scale'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:364: error: undefined reference to 'sws_freeContext'
collect2: ld returned 1 exit status
make: *** [out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/LINKED/libhoffplay.so] Error 1
make: Leaving directory `/media/dev_linux/Hardkernel/4412_a32/android'


config.mak과 Android,mk의 설정으로 봐서는 이와 관련된 설정이나 파일들은 정상적으로 되어 있는거 같은데요.
왜 그런걸까요?

config.mk에서
LDFLAGS= -L/usr/lib -nostdlib -Wl,--as-needed -Wl,--warn-common -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample

..

NOREDZONE_FLAGS=
libavcodec_VERSION=54.23.100
libavcodec_VERSION_MAJOR=54
libavdevice_VERSION=54.0.100
libavdevice_VERSION_MAJOR=54
libavfilter_VERSION=2.77.100
libavfilter_VERSION_MAJOR=2
libavformat_VERSION=54.6.100
libavformat_VERSION_MAJOR=54
libavresample_VERSION=0.0.2
libavresample_VERSION_MAJOR=0
libavutil_VERSION=51.54.100
libavutil_VERSION_MAJOR=51
libpostproc_VERSION=52.0.100
libpostproc_VERSION_MAJOR=52
libswresample_VERSION=0.15.100
libswresample_VERSION_MAJOR=0
libswscale_VERSION=2.1.100
libswscale_VERSION_MAJOR=2

..

CONFIG_SWRESAMPLE=yes
CONFIG_SWSCALE=yes
CONFIG_SWSCALE_ALPHA=yes

..

으로 되어 있습니다.




3. 기존 다른용도로 빌드해놓은 libffmpeg.so 를 lib에 복사 해 넣은 후 hoffplay를 빌드하여 실행하니
이클립스에서 다음과 같이 나오고 죽었습니다.  

01-01 00:13:16.245: D/dalvikvm(2022): Trying to load lib /data/data/net.hybridego.mm.hoffplay/lib/libhoffplay.so 0x41315a68
01-01 00:13:16.285: D/dalvikvm(2022): Added shared lib /data/data/net.hybridego.mm.hoffplay/lib/libhoffplay.so 0x41315a68
01-01 00:13:16.285: D/dalvikvm(2022): No JNI_OnLoad found in /data/data/net.hybridego.mm.hoffplay/lib/libhoffplay.so 0x41315a68, skipping init
01-01 00:13:16.345: D/libEGL(2022): loaded /system/lib/egl/libEGL_mali.so
01-01 00:13:16.350: D/libEGL(2022): loaded /system/lib/egl/libGLESv1_CM_mali.so
01-01 00:13:16.350: D/libEGL(2022): loaded /system/lib/egl/libGLESv2_mali.so
01-01 00:13:16.355: D/(2022): Device driver API match
01-01 00:13:16.355: D/(2022): Device driver API version: 10
01-01 00:13:16.355: D/(2022): User space API version: 10 
01-01 00:13:16.355: D/(2022): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Wed Jul  4 09:25:47 KST 2012 
01-01 00:13:16.400: D/OpenGLRenderer(2022): Enabling debug mode 0
01-01 00:13:34.190: E/HoFFPLAYJ(2022): START !
01-01 00:13:34.190: E/HoFFPLAYJNI(2022): Java_net_hybridego_mm_hoffplay_HoffplayActivity_createStreamingMediaPlayer(22): Call createStreamingMediaPlayer
01-01 00:13:34.190: E/HoFFPLAYJNI(2022): Java_net_hybridego_mm_hoffplay_HoffplayActivity_createStreamingMediaPlayer(25): file name : /mnt/ext_sd/nm.ts
01-01 00:13:34.605: E/HoFFPLAYengin(2022): engine_start(246): sample_rate : 44100 
01-01 00:13:34.605: E/HoFFPLAYengin(2022): engine_start(247): channels : 2 
01-01 00:13:34.605: E/HoFFPLAYAudio(2022): audioflinger_device_create(56): Create AudioTrack successfully
01-01 00:13:34.605: E/HoFFPLAYAudio(2022): audioflinger_device_set(98): Set AudioTrack, status: 0, streamType: 3, sampleRate: 44100, channelCount: 2, bufferCount: 16384
01-01 00:13:34.605: E/HoFFPLAYengin(2022): engine_start(262): frame count: 16384, frame size: 4 
01-01 00:13:34.615: A/libc(2022): Fatal signal 11 (SIGSEGV) at 0x00000058 (code=1)

비디오코덱쪽에 문제가 있는걸까요?



전호철

2012.11.09 02:22:23
*.200.239.210

제가 여기 게시판에 올린 ffmpeg과 hoffplay 소스로 다시 확인해보았는데 잘 동작을 하네요.


올려주신 로그로는 어디가 문제인지 잘 모르겠어요..... ^_^a;;;;

Goldeneye

2012.11.10 10:07:54
*.213.183.99

첨부하신 ffmpeg 소스 자체는 빌드가 됩니다만, hoffplay를 빌드하니 위의 2번과 같은 결과가 나옵니다.


#####################################################################################################

target SharedLib: libhoffplay (out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/LINKED/libhoffplay.so)

prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:332: error: undefined reference to 'sws_getContext'

prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:338: error: undefined reference to 'sws_scale'

prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/hoffplay.o: in function engine_start:external/hoffplay/hoplayer_core/hoffplay.c:364: error: undefined reference to 'sws_freeContext'

collect2: ld returned 1 exit status

make: *** [out/target/product/odroidx/obj/SHARED_LIBRARIES/libhoffplay_intermediates/LINKED/libhoffplay.so] Error 1

make: Leaving directory `/media/dev_linux/Hardkernel/4412_a32/android'


#####################################################################################################

이 내용으로 보면 libffmpeg.so에서  sws_ 관련된 부분들을 hofffplay에서 찾지 못해 나오는 현상같은데요.
설정에서는 이상이 없는것 같은데 뭐가 문제 일까요?
위의 질문처럼 obj/lib/에서 libffmpegso가 아니라 libffmpeg로만 생성되는것도 이상하구요.

siksense

2012.11.22 01:16:50
*.201.22.41

저도 오늘 hoffplay 를 다운 받아 빌드하는데 같은 문제가 발생하여 몇자 적어봅니다.

일단 원인은 ffmpeg 의 Android.mk 파일에 있는 것 같습니다.

 

1. libffmpeg 라이브러리가 .so 가 없이 생성되는 현상

LOCAL_MODULE:= libffmpeg

여기서 libffmpeg 의 끝부분에 공백이 두개 정도 들어가 있어서 발생하는 것 같습니다.

 

2. sws_getContext 등의 링크 에러

SWSCALE_SRC_FILES 가 빈 상태여 libswscale 관련 파일들이 컴파일이 되지 않고 있습니다.

 

수정전:

SWSCALE_SRC_FILES := $(addprefix libswscale/, $(sort $(SWSCALE_C_FILES)))
SWSCALE_C_FILES := options.c rgb2rgb.c swscale.c utils.c yuv2rgb.c swscale_unscaled.c

 

수정후:

SWSCALE_C_FILES := options.c rgb2rgb.c swscale.c utils.c yuv2rgb.c swscale_unscaled.c

SWSCALE_SRC_FILES := $(addprefix libswscale/, $(sort $(SWSCALE_C_FILES)))

=====================================

위와 같이 수정하니 빌드는 되네요....

Goldeneye

2012.11.26 21:09:43
*.213.183.99

silksense님 감사합니다. 기대를 안하고 있었는데 즐거운 월요일이 되었습니다.~~

호창파

2013.03.16 03:11:58
*.85.53.72

"Goldeneye 님" 저랑 개발환경이 같으시네요 ^^ (odroidx)

                        반갑습니다.
                        그런데 최종적으로 미디어 파일 play 성공하셨는지 궁금합니다.

                        저도 "siksense 님" 댓글 참조하고 몇 군데 수정해서 빌드까지는 성공했는데..

                        app 실행시키면 HoffplayActivity class init 하는데서 fail 되고
                        바로 빠져나오네요.ㅠㅠ

성공하신 분 있으면 TIP 좀 같이 공유해 주세요.
List of Articles
번호 제목 글쓴이 날짜 조회 수
63 정오표 정리 제안 [4] mechatrosens 2013-01-10 5117
62 apk uploading timeout에 대해 문의 드립니다. [2] 죽유 2013-01-10 5374
61 문의드릴 것이 또 생겼습니다. [3] 죽유 2013-01-08 4485
60 아래 [SDL 예제관련 에러 질문입니다.] 이어서... [3] 민민 2012-12-26 7759
59 SDL 예제관련 에러 질문입니다. [1] 민민 2012-12-25 5011
58 드디어 안드로이드 소스까지 컴파일했습니다. [3] 죽유 2012-12-22 5548
57 안드로이드 소스 컴파일 시에 문제가 발생합니다. [10] 죽유 2012-12-20 5014
56 repo 설정 시에 문제가 발생합니다. [5] 죽유 2012-12-19 5253
55 알려 주신대로 JDK 설치하려고 했는데 그래도 문제가 발생합니다. [5] 죽유 2012-12-18 4240
54 개발 환경 구축하는데 몇가지 질문 사항이 있습니다. [3] 죽유 2012-12-15 4607
53 ffmpeg 예제에 대해 문의 드립니다. [1] 안심돈까스 2012-12-14 3970
52 다음 에러 질문드립니다. [1] 더페이퍼 2012-11-23 4349
51 NDK 책 example Code 전체를 받고 싶습니다 안초짜 2012-11-20 4482
50 책에서 사용하고 있는 ffmpeg 소스. file [1] 전호철 2012-11-09 5496
49 ics에서 OpenSL의 Playback Rate 안됨 [1] Goldeneye 2012-11-08 4087
» ffmpeg & hoffplay 에러 [5] Goldeneye 2012-11-08 4990
47 Jellly Bean 에서 Input Flow의 변경점 Byed 2012-11-07 4268
46 NDK에서 Surface 질문드립니다. [3] 공돌이남 2012-11-01 4648
45 [예제17.ffmpeg를 활용한 player] ffmpeg를 활용한 player file 전호철 2012-10-31 3922
44 [예제16.GPIO제어] App. 에서 H/W 제어하는 예제 (native bind... file 전호철 2012-10-31 4234

사용자 로그인