android studio断点 x,FFmpeg在Android Studio中断点调试

通常状况下在Android平台使用FFmpeg为动态库或静态库的形式,只能经过设置FFmpeg日志回调来看一些FFmpeg输出的日志,有时须要debug来查看FFmpeg内部执行过程,本文记录一下在Android Studio中使用FFmpeg源码进行断点调试的方法。需在Linux或macOS下,Windows 10系统能够使用wsl子系统。html

1. 编写FFmpeg配置脚本

在此以前须要准备FFmpeg源码

,NDK(Android SDK文件夹下的ndk-bundle或者ndk下的特定版本,wsl子系统须要单独下载)Linux版)。linux

用来调试的工程开启尽可能少的功能,下面以调试FFmpeg(4.3.1)硬解h264为例,在FFmpeg根目录下新建文件armv8a_config.shandroid

#!/bin/bash

API=21

NDK=/home/user/Android/ndk/android-ndk-r21

PREBUILT=$NDK/toolchains/llvm/prebuilt/linux-x86_64

PREFIX=/home/user/Desktop/ffmpeg/arm64-v8a

CONFIGURE_FLAGS="

--disable-programs \

--disable-avdevice \

--disable-swresample \

--disable-swscale \

--disable-postproc \

--disable-avfilter \

--disable-network \

--disable-everything \

--enable-jni \

--enable-mediacodec \

--enable-decoder=h264_mediacodec \

--enable-decoder=hevc_mediacodec \

--enable-demuxer=h264 \

--enable-demuxer=mov \

--enable-protocol=file"

./configure \

$CONFIGURE_FLAGS \

--target-os=android \

--arch=aarch64 \

--enable-cross-compile \

--cross-prefix=$PREBUILT/bin/aarch64-linux-android- \

--prefix=$PREFIX \

--cc=$PREBUILT/bin/aarch64-linux-android$API-clang \

--cxx=$PREBUILT/bin/aarch64-linux-android$API-clang++

在终端中进入FFmpeg根目录,增长执行权限chmod +x armv8a_config.sh,并执行./armv8a_config.sh。api

2. 建立ffmpeg CMake依赖库

执行完上面步骤ffmpeg会自动配置好Makefile,而后执行make -j8 > sources.txt,此步骤主要用来获取全部须要的源文件(若是有更好的办法获取源文件列表,能够在评论区告诉我)。bash

在FFmpeg根目录建立CMakeLists.txt文件,复制上步生成的sources.txt文件中的.o后缀的全部行,并改后缀为.c,部分文件为.S,建立ffmpeg依赖库app

project(ffmpeg)

set(ffmpeg_sources

libavformat/allformats.c

libavformat/avio.c

libavformat/aviobuf.c

libavformat/cutils.c

libavformat/dump.c

libavformat/file.c

libavformat/format.c

libavformat/h264dec.c

libavformat/id3v1.c

libavformat/id3v2.c

libavformat/isom.c

libavformat/metadata.c

libavformat/mov.c

libavformat/mov_chan.c

libavformat/mov_esds.c

libavformat/mux.c

libavformat/options.c

libavformat/os_support.c

libavformat/protocols.c

libavformat/qtpalette.c

libavformat/rawdec.c

libavformat/replaygain.c

libavformat/riff.c

libavformat/riffdec.c

libavformat/sdp.c

libavformat/url.c

libavformat/utils.c

libavcodec/aarch64/h264dsp_init_aarch64.c

libavcodec/aarch64/h264dsp_neon.S

libavcodec/aarch64/h264idct_neon.S

libavcodec/aarch64/idctdsp_init_aarch64.c

libavcodec/aarch64/simple_idct_neon.S

libavcodec/ac3_parser.c

libavcodec/ac3tab.c

libavcodec/adts_parser.c

libavcodec/allcodecs.c

libavcodec/avdct.c

libavcodec/avpacket.c

libavcodec/avpicture.c

libavcodec/bitstream.c

libavcodec/bitstream_filter.c

libavcodec/bitstream_filters.c

libavcodec/bsf.c

libavcodec/codec_desc.c

libavcodec/d3d11va.c

libavcodec/decode.c

libavcodec/dirac.c

libavcodec/dv_profile.c

libavcodec/encode.c

libavcodec/faandct.c

libavcodec/faanidct.c

libavcodec/fdctdsp.c

libavcodec/ffjni.c

libavcodec/golomb.c

libavcodec/h2645_parse.c

libavcodec/h264_mp4toannexb_bsf.c

libavcodec/h264_parse.c

libavcodec/h264_parser.c

libavcodec/h264_ps.c

libavcodec/h264_sei.c

libavcodec/h264data.c

libavcodec/h264dsp.c

libavcodec/h264idct.c

libavcodec/hevc_data.c

libavcodec/hevc_mp4toannexb_bsf.c

libavcodec/hevc_parse.c

libavcodec/hevc_parser.c

libavcodec/hevc_ps.c

libavcodec/hevc_sei.c

libavcodec/idctdsp.c

libavcodec/imgconvert.c

libavcodec/jfdctfst.c

libavcodec/jfdctint.c

libavcodec/jni.c

libavcodec/jrevdct.c

libavcodec/mathtables.c

libavcodec/mediacodec.c

libavcodec/mediacodec_surface.c

libavcodec/mediacodec_sw_buffer.c

libavcodec/mediacodec_wrapper.c

libavcodec/mediacodecdec.c

libavcodec/mediacodecdec_common.c

libavcodec/mjpegenc_huffman.c

libavcodec/mpeg12framerate.c

libavcodec/mpeg4audio.c

libavcodec/mpegaudiodata.c

libavcodec/null_bsf.c

libavcodec/options.c

libavcodec/parser.c

libavcodec/parsers.c

libavcodec/profiles.c

libavcodec/pthread.c

libavcodec/pthread_frame.c

libavcodec/pthread_slice.c

libavcodec/qsv_api.c

libavcodec/raw.c

libavcodec/simple_idct.c

libavcodec/startcode.c

libavcodec/utils.c

libavcodec/v4l2_buffers.c

libavcodec/v4l2_context.c

libavcodec/v4l2_fmt.c

libavcodec/v4l2_m2m.c

libavcodec/vorbis_parser.c

libavcodec/xiph.c

libavutil/../compat/strtod.c

libavutil/aarch64/cpu.c

libavutil/aarch64/float_dsp_init.c

libavutil/aarch64/float_dsp_neon.S

libavutil/adler32.c

libavutil/aes.c

libavutil/aes_ctr.c

libavutil/audio_fifo.c

libavutil/avsscanf.c

libavutil/avstring.c

libavutil/base64.c

libavutil/blowfish.c

libavutil/bprint.c

libavutil/buffer.c

libavutil/camellia.c

libavutil/cast5.c

libavutil/channel_layout.c

libavutil/color_utils.c

libavutil/cpu.c

libavutil/crc.c

libavutil/des.c

libavutil/dict.c

libavutil/display.c

libavutil/dovi_meta.c

libavutil/downmix_info.c

libavutil/encryption_info.c

libavutil/error.c

libavutil/eval.c

libavutil/fifo.c

libavutil/file.c

libavutil/file_open.c

libavutil/fixed_dsp.c

libavutil/float_dsp.c

libavutil/frame.c

libavutil/hash.c

libavutil/hdr_dynamic_metadata.c

libavutil/hmac.c

libavutil/hwcontext.c

libavutil/hwcontext_mediacodec.c

libavutil/imgutils.c

libavutil/integer.c

libavutil/intmath.c

libavutil/lfg.c

libavutil/lls.c

libavutil/log.c

libavutil/log2_tab.c

libavutil/mastering_display_metadata.c

libavutil/mathematics.c

libavutil/md5.c

libavutil/mem.c

libavutil/murmur3.c

libavutil/opt.c

libavutil/parseutils.c

libavutil/pixdesc.c

libavutil/pixelutils.c

libavutil/random_seed.c

libavutil/rational.c

libavutil/rc4.c

libavutil/reverse.c

libavutil/ripemd.c

libavutil/samplefmt.c

libavutil/sha.c

libavutil/sha512.c

libavutil/slicethread.c

libavutil/spherical.c

libavutil/stereo3d.c

libavutil/tea.c

libavutil/threadmessage.c

libavutil/time.c

libavutil/timecode.c

libavutil/tree.c

libavutil/twofish.c

libavutil/tx.c

libavutil/tx_double.c

libavutil/tx_float.c

libavutil/tx_int32.c

libavutil/utils.c

libavutil/video_enc_params.c

libavutil/xga_font_data.c

libavutil/xtea.c)

add_library(ffmpeg ${ffmpeg_sources})

target_include_directories(ffmpeg

PUBLIC ./)

3. 在Android NDK工程中引用ffmpeg依赖库

在本身C++工程的CMakeLists.txt中增长dom

add_subdirectory({ffmpeg_dir} ./ffmpeg)

target_link_libraries( {lib_name}

...

ffmpeg

z)

同步Gradle以后就能尝试build,经过后就能够愉快的debug之旅了。ide

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值