android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...

在上一章  Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)【http://www.linuxidc.com/Linux/2013-06/85955p5.htm】中使用OpenSL ES来播放视频的声音,遗留的问题是声音的不同步,由于视频实现部分也要同步,而且音视频也要同步,所以音频部分就不单独同步问题,当同时播放音视频的时候进行两者的同步问题,对于视频显示部分最后是要使用OpenGL es来实现,由于SDL可以和OpenGL ES进行搭配,所以使用SDL+OpenGL ES进行显示视频,所以这章将要讲解的是SDL的交叉编译.

一、到官网下载http://www.libsdl.org/hg.php 下载2.0的源码也可以通过hg来clone最新的源码

二、其实1.3以后的版本就添加了android的支持,所以下载完源码后,在SDL目录下创建一个jni的目录,然后将原先SDL目录下面的文件以及文件夹都拷贝到jni目录下面,在jni目录下面我们会看见一个android.mk的文件,这就是官方给我们编写的编译文件,由于手机基本上都是使用的arm编译器,所以我在里面添加了LOCAL_ARM_MODE=arm,模块的编译使用arm编译器来编译,具体的内容如下:

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

#

# SDL shared library

#

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

include $(CLEAR_VARS)

LOCAL_MODULE := SDL2

LOCAL_ARM_MODE=arm

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

LOCAL_SRC_FILES := \

$(subst $(LOCAL_PATH)/,, \

$(wildcard $(LOCAL_PATH)/src/*.c) \

$(wildcard $(LOCAL_PATH)/src/audio/*.c) \

$(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \

$(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \

$(LOCAL_PATH)/src/atomic/SDL_atomic.c \

$(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \

$(wildcard $(LOCAL_PATH)/src/core/android/*.cpp) \

$(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \

$(wildcard $(LOCAL_PATH)/src/events/*.c) \

$(wildcard $(LOCAL_PATH)/src/file/*.c) \

$(wildcard $(LOCAL_PATH)/src/haptic/*.c) \

$(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \

$(wildcard $(LOCAL_PATH)/src/joystick/*.c) \

$(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \

$(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \

$(wildcard $(LOCAL_PATH)/src/power/*.c) \

$(wildcard $(LOCAL_PATH)/src/power/android/*.c) \

$(wildcard $(LOCAL_PATH)/src/render/*.c) \

$(wildcard $(LOCAL_PATH)/src/render/*/*.c) \

$(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \

$(wildcard $(LOCAL_PATH)/src/thread/*.c) \

$(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \

$(wildcard $(LOCAL_PATH)/src/timer/*.c) \

$(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \

$(wildcard $(LOCAL_PATH)/src/video/*.c) \

$(wildcard $(LOCAL_PATH)/src/video/android/*.c))

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES

LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog

include $(BUILD_SHARED_LIBRARY)

三、如果直接编译的话会提示如下错误

/home/SDL/jni/src/core/android/SDL_android.cpp:30:21: fatal error: EGL/egl.h: No such file or directory

查看EGL的支持是在2.3版本以上,所以我们需要添加平台的支持,所以需要在jni目录下面创建一个Application.mk文件来指定编译平台,内容如下:

APP_ABI := armeabi

APP_PLATFORM := android-9

四、在jni目录终端下运行ndk-build,就会编译出libSDL2.so,编译过程如下:

root@zhangjie:/home/SDL/jni# ndk-build

Compile arm    : SDL2 <= SDL_assert.c

Compile arm    : SDL2 <= SDL.c

Compile arm    : SDL2 <= SDL_error.c

Compile arm    : SDL2 <= SDL_fatal.c

Compile arm    : SDL2 <= SDL_hints.c

Compile arm    : SDL2 <= SDL_log.c

Compile arm    : SDL2 <= SDL_audio.c

Compile arm    : SDL2 <= SDL_audiocvt.c

Compile arm    : SDL2 <= SDL_audiodev.c

Compile arm    : SDL2 <= SDL_audiotypecvt.c

Compile arm    : SDL2 <= SDL_mixer.c

Compile arm    : SDL2 <= SDL_wave.c

Compile arm    : SDL2 <= SDL_androidaudio.c

Compile arm    : SDL2 <= SDL_dummyaudio.c

Compile arm    : SDL2 <= SDL_atomic.c

Compile arm    : SDL2 <= SDL_spinlock.c

Compile++ arm    : SDL2 <= SDL_android.cpp

Compile arm    : SDL2 <= SDL_cpuinfo.c

Compile arm    : SDL2 <= SDL_clipboardevents.c

Compile arm    : SDL2 <= SDL_dropevents.c

Compile arm    : SDL2 <= SDL_events.c

Compile arm    : SDL2 <= SDL_gesture.c

Compile arm    : SDL2 <= SDL_keyboard.c

Compile arm    : SDL2 <= SDL_mouse.c

Compile arm    : SDL2 <= SDL_quit.c

Compile arm    : SDL2 <= SDL_touch.c

Compile arm    : SDL2 <= SDL_windowevents.c

Compile arm    : SDL2 <= SDL_rwops.c

Compile arm    : SDL2 <= SDL_haptic.c

Compile arm    : SDL2 <= SDL_syshaptic.c

Compile arm    : SDL2 <= SDL_gamecontroller.c

Compile arm    : SDL2 <= SDL_joystick.c

Compile arm    : SDL2 <= SDL_sysjoystick.c

Compile arm    : SDL2 <= SDL_sysloadso.c

Compile arm    : SDL2 <= SDL_power.c

Compile arm    : SDL2 <= SDL_syspower.c

Compile arm    : SDL2 <= SDL_render.c

Compile arm    : SDL2 <= SDL_yuv_mmx.c

Compile arm    : SDL2 <= SDL_yuv_sw.c

Compile arm    : SDL2 <= SDL_render_d3d.c

Compile arm    : SDL2 <= SDL_render_gles2.c

Compile arm    : SDL2 <= SDL_shaders_gles2.c

Compile arm    : SDL2 <= SDL_render_gles.c

Compile arm    : SDL2 <= SDL_render_gl.c

Compile arm    : SDL2 <= SDL_shaders_gl.c

Compile arm    : SDL2 <= SDL_render_psp.c

Compile arm    : SDL2 <= SDL_blendfillrect.c

Compile arm    : SDL2 <= SDL_blendline.c

Compile arm    : SDL2 <= SDL_blendpoint.c

Compile arm    : SDL2 <= SDL_drawline.c

Compile arm    : SDL2 <= SDL_drawpoint.c

Compile arm    : SDL2 <= SDL_render_sw.c

Compile arm    : SDL2 <= SDL_rotate.c

Compile arm    : SDL2 <= SDL_getenv.c

Compile arm    : SDL2 <= SDL_iconv.c

Compile arm    : SDL2 <= SDL_malloc.c

Compile arm    : SDL2 <= SDL_qsort.c

Compile arm    : SDL2 <= SDL_stdlib.c

Compile arm    : SDL2 <= SDL_string.c

Compile arm    : SDL2 <= SDL_thread.c

Compile arm    : SDL2 <= SDL_syscond.c

Compile arm    : SDL2 <= SDL_sysmutex.c

Compile arm    : SDL2 <= SDL_syssem.c

Compile arm    : SDL2 <= SDL_systhread.c

Compile arm    : SDL2 <= SDL_timer.c

Compile arm    : SDL2 <= SDL_systimer.c

Compile arm    : SDL2 <= SDL_blit_0.c

Compile arm    : SDL2 <= SDL_blit_1.c

Compile arm    : SDL2 <= SDL_blit_A.c

Compile arm    : SDL2 <= SDL_blit_auto.c

Compile arm    : SDL2 <= SDL_blit.c

Compile arm    : SDL2 <= SDL_blit_copy.c

Compile arm    : SDL2 <= SDL_blit_N.c

Compile arm    : SDL2 <= SDL_blit_slow.c

Compile arm    : SDL2 <= SDL_bmp.c

Compile arm    : SDL2 <= SDL_clipboard.c

Compile arm    : SDL2 <= SDL_fillrect.c

Compile arm    : SDL2 <= SDL_pixels.c

Compile arm    : SDL2 <= SDL_rect.c

Compile arm    : SDL2 <= SDL_RLEaccel.c

Compile arm    : SDL2 <= SDL_shape.c

Compile arm    : SDL2 <= SDL_stretch.c

Compile arm    : SDL2 <= SDL_surface.c

Compile arm    : SDL2 <= SDL_video.c

Compile arm    : SDL2 <= SDL_androidclipboard.c

Compile arm    : SDL2 <= SDL_androidevents.c

Compile arm    : SDL2 <= SDL_androidgl.c

Compile arm    : SDL2 <= SDL_androidkeyboard.c

Compile arm    : SDL2 <= SDL_androidtouch.c

Compile arm    : SDL2 <= SDL_androidvideo.c

Compile arm    : SDL2 <= SDL_androidwindow.c

StaticLibrary  : libstdc++.a

SharedLibrary  : libSDL2.so

Install        : libSDL2.so => libs/armeabi/libSDL2.so

编译出sdl库后,我们就可以调用它的相关函数来实现我们的功能了。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值