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

안녕하십니까?

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
번호 제목 글쓴이 날짜 조회 수
83 ffmpeg HOPLAY [3] 네이쳐 2013-12-01 4792
82 안드로이드의 모든 것NDK (고현철,전호철 지음) 책 실습 중 문제에... [1] 어떤이의꿈 2013-10-02 5398
81 init: sys_prop: unable to stop service ctl [DVBService] ... [2] 제임스59 2013-09-22 5480
80 NDK 책내용중에 3.11 외부 라이브러리 활용하기 에서 질문 드립니... file [5] 엽스 2013-08-30 5590
79 ndk 38페이지 질문_repo file [1] 제임스59 2013-08-28 12060
78 여러 분들이 말씀하신 것처럼 책(NDK)의 예제코드를 올려주실 수 없... [2] 트론 2013-08-24 5255
77 surfaceflinger에서 화면을 dump뜨는 메카니즘에 대해서... 김바람 2013-08-19 5134
76 안드로이드 4.2 프레임버퍼 접근 질문드려요~! [6] 범내 2013-07-30 5947
75 [압축된 07-TestSkia 예제파일 올려주세요] [1] 밥줘잉 2013-05-23 5664
74 MediaServer 에 관련해서 질문드려요 [10] 김바람 2013-03-27 6580
73 3rd party app에서 프레임워크 수정된 걸 적용시키려면 어떻게 해야... [3] 김바람 2013-03-17 4838
72 [예제12.SDL] Android 에서 SDL 사용하는 예제 실행 안됨 문의... [7] 둘리 2013-03-12 5609
71 PDK를 이용하여 안드로이드 프레임워크 so파일 참조에 관해서 질문있... [7] 김바람 2013-03-07 26815
70 예제를 따라하던 중 Android.mk 파일로 APK파일 생성 후 설치시 ... [6] 김바람 2013-03-05 12338
69 네이티브 스레드로 자바 콜백 만들기 질문드립니다. [2] 조재영 2013-02-14 5661
68 GPIO 컨트롤 하기 예제 중 insmod에 관하여 문의드립니다. [2] 미누유희 2013-02-13 5126
67 OpenGL 책p168 예제 질문드립니다. Android홀릭 2013-02-06 5413
66 카메라로부터 프래임 데이터 추출하는 예제 입니다. file [1] 죽유 2013-01-24 5383
65 NDK를 이용한 camera 제어 예제에 대해 문의 드립니다. [7] 죽유 2013-01-11 8050
64 NEON관련 좋은 참고 문서가 있을까요? [7] 죽유 2013-01-10 5392

사용자 로그인