FFmpeg解码库裁剪和调试三 您所在的位置:网站首页 RC4编码器APK FFmpeg解码库裁剪和调试三

FFmpeg解码库裁剪和调试三

2024-01-16 13:08| 来源: 网络整理| 查看: 265

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源项目。FFmpeg是在Linux平台下开发,而Android是现在非常火爆的移动平台,由于Android平台与Linux的亲缘关系,所以将FFmpeg源代码移植到Android平台比前面讲述过的VS平台调试方法相比自然是简单许多。

       本章主要介绍提取FFmpeg中的H264代码并在Android Studio中调试的详细步骤,H265代码的提取方式雷同。主要分为:选择解码库源文件,修改配置文件和源文件和调试解码源代码三部分。

1.  选择解码库源文件

在前面VS调试方法中我们已经说明了,确定解码库源代码的基本方法是用FFmpeg库自带的configure脚步,具体的实现步骤如下所示。

1)由于最终提取的代码是要在Android平台运行,需要借助于NDK进行编译,但是常用的Cygwin或者Ubuntu环境或者系统等只能产生在PC机上正确编译的config.h和config.asm文件。所以要想产生能使用NDK正确编译的config.h和config.asm文件,需要对configure添加一些额外的参数。如图1.1(a)所示,其中TEMPDIR是一个临时目录,主要用于GCC编译过程中产生一些临时文件,如果不设置该目录,则将导致GCC编译测试失败,最终导致configure失败,如图1.1(b)所示;NDKROOT是NDK编译工具所在的目录;其中target-os、arch、cpu、cross-prefix、sysroot等指定编译相关的软硬件配置,如cross-prefix指定编译器GCC相关信息等;正确configure之后将产生如图1.1(c)和(d)所示的结果,其中(d)中的警告并不会对我们获取所需的源文件产生影响,所以可以忽略;

2)然后使用图1.2(a)所示的make命令,将会得到如图1.2(b)所示的source.txt的文本文件,该文件中对应的源程序即为H264解码库所需的源文件,由于我们在configure的时候开启了优化,所以还包括了NEON优化相关的代码;

3)建立一个Android Studio (或者Eclipse)工程将第二步中获得的源码文件信息写入到CMakeList.txt (或者Android_lib.mk)文件中,如图1.3所示。由于该CMakeList.txt中有汇编文件,所以额外添加了一句“enable_language(ASM)”启用CMake的汇编语言支持功能。

[plain]  view plain  copy #!/bin/bash   export TEMPDIR="D:/tmp"   export NDKROOT="D:/Android/sdk/ndk-bundle"   PREBUILT=$NDKROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64   SYSROOT=$NDKROOT/platforms/android-9/arch-arm   ./configure --target-os=linux \               --arch=arm \               --cpu=armv7-a \               --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \               --sysroot=$SYSROOT \               --disable-ffmpeg \               --disable-ffplay \               --disable-ffserver \               --disable-ffprobe \               --enable-neon \               --disable-everything \               --enable-decoder=h264 \               --enable-parser=h264 \               --enable-demuxer=h264 \               --enable-protocol=file   (a)

(b)                                                          (c)

(d)

图1.1. FFmpeg中configure配置

(a)

[plain]  view plain  copy CC  libavdevice/alldevices.o   CC  libavdevice/avdevice.o   CC  libavdevice/utils.o   AR  libavdevice/libavdevice.a   CC  libavfilter/allfilters.o   CC  libavfilter/audio.o   CC  libavfilter/avfilter.o   CC  libavfilter/avfiltergraph.o   CC  libavfilter/buffersink.o   CC  libavfilter/buffersrc.o   CC  libavfilter/drawutils.o   CC  libavfilter/fifo.o   CC  libavfilter/formats.o   CC  libavfilter/framepool.o   CC  libavfilter/graphdump.o   CC  libavfilter/graphparser.o   CC  libavfilter/opencl_allkernels.o   CC  libavfilter/pthread.o   CC  libavfilter/transform.o   CC  libavfilter/video.o   AR  libavfilter/libavfilter.a   CC  libavformat/allformats.o   CC  libavformat/avio.o   CC  libavformat/aviobuf.o   CC  libavformat/cutils.o   CC  libavformat/dump.o   CC  libavformat/file.o   CC  libavformat/format.o   CC  libavformat/h264dec.o   CC  libavformat/id3v1.o   CC  libavformat/id3v2.o   CC  libavformat/metadata.o   CC  libavformat/mux.o   CC  libavformat/options.o   CC  libavformat/os_support.o   CC  libavformat/protocols.o   CC  libavformat/qtpalette.o   CC  libavformat/rawdec.o   CC  libavformat/riff.o   CC  libavformat/sdp.o   CC  libavformat/url.o   CC  libavformat/utils.o   AR  libavformat/libavformat.a   CC  libavcodec/allcodecs.o   CC  libavcodec/arm/h264chroma_init_arm.o   AS  libavcodec/arm/h264cmc_neon.o   CC  libavcodec/arm/h264dsp_init_arm.o   AS  libavcodec/arm/h264dsp_neon.o   AS  libavcodec/arm/h264idct_neon.o   CC  libavcodec/arm/h264pred_init_arm.o   AS  libavcodec/arm/h264pred_neon.o   CC  libavcodec/arm/h264qpel_init_arm.o   AS  libavcodec/arm/h264qpel_neon.o   AS  libavcodec/arm/hpeldsp_neon.o   AS  libavcodec/arm/idctdsp_arm.o   AS  libavcodec/arm/idctdsp_armv6.o   CC  libavcodec/arm/idctdsp_init_arm.o   CC  libavcodec/arm/idctdsp_init_armv5te.o   CC  libavcodec/arm/idctdsp_init_armv6.o   CC  libavcodec/arm/idctdsp_init_neon.o   AS  libavcodec/arm/idctdsp_neon.o   AS  libavcodec/arm/jrevdct_arm.o   AS  libavcodec/arm/me_cmp_armv6.o   CC  libavcodec/arm/me_cmp_init_arm.o   AS  libavcodec/arm/pixblockdsp_armv6.o   CC  libavcodec/arm/pixblockdsp_init_arm.o   AS  libavcodec/arm/simple_idct_arm.o   AS  libavcodec/arm/simple_idct_armv5te.o   AS  libavcodec/arm/simple_idct_armv6.o   AS  libavcodec/arm/simple_idct_neon.o   AS  libavcodec/arm/startcode_armv6.o   AS  libavcodec/arm/videodsp_armv5te.o   CC  libavcodec/arm/videodsp_init_arm.o   CC  libavcodec/arm/videodsp_init_armv5te.o   CC  libavcodec/audioconvert.o   CC  libavcodec/avdct.o   CC  libavcodec/avpacket.o   CC  libavcodec/avpicture.o   CC  libavcodec/bitstream.o   CC  libavcodec/bitstream_filter.o   CC  libavcodec/bitstream_filters.o   CC  libavcodec/bsf.o   CC  libavcodec/cabac.o   CC  libavcodec/codec_desc.o   CC  libavcodec/d3d11va.o   CC  libavcodec/dirac.o   CC  libavcodec/dv_profile.o   CC  libavcodec/error_resilience.o   CC  libavcodec/faandct.o   CC  libavcodec/faanidct.o   CC  libavcodec/fdctdsp.o   CC  libavcodec/golomb.o   CC  libavcodec/h2645_parse.o   CC  libavcodec/h264_cabac.o   CC  libavcodec/h264_cavlc.o   CC  libavcodec/h264_direct.o   CC  libavcodec/h264_loopfilter.o   CC  libavcodec/h264_mb.o   CC  libavcodec/h264_parse.o   CC  libavcodec/h264_parser.o   CC  libavcodec/h264_picture.o   CC  libavcodec/h264_ps.o   CC  libavcodec/h264_refs.o   CC  libavcodec/h264_sei.o   CC  libavcodec/h264_slice.o   CC  libavcodec/h264chroma.o   CC  libavcodec/h264data.o   CC  libavcodec/h264dec.o   CC  libavcodec/h264dsp.o   CC  libavcodec/h264idct.o   CC  libavcodec/h264pred.o   CC  libavcodec/h264qpel.o   CC  libavcodec/idctdsp.o   CC  libavcodec/imgconvert.o   CC  libavcodec/jfdctfst.o   CC  libavcodec/jfdctint.o   CC  libavcodec/jni.o   CC  libavcodec/jrevdct.o   CC  libavcodec/mathtables.o   CC  libavcodec/me_cmp.o   CC  libavcodec/mediacodec.o   CC  libavcodec/options.o   CC  libavcodec/parser.o   CC  libavcodec/pixblockdsp.o   CC  libavcodec/profiles.o   CC  libavcodec/pthread.o   CC  libavcodec/pthread_frame.o   CC  libavcodec/pthread_slice.o   CC  libavcodec/qsv_api.o   CC  libavcodec/raw.o   CC  libavcodec/resample.o   CC  libavcodec/resample2.o   CC  libavcodec/simple_idct.o   CC  libavcodec/startcode.o   CC  libavcodec/utils.o   CC  libavcodec/videodsp.o   CC  libavcodec/vorbis_parser.o   CC  libavcodec/xiph.o   AR  libavcodec/libavcodec.a   CC  libswresample/arm/audio_convert_init.o   AS  libswresample/arm/audio_convert_neon.o   AS  libswresample/arm/resample.o   CC  libswresample/arm/resample_init.o   CC  libswresample/audioconvert.o   CC  libswresample/dither.o   CC  libswresample/options.o   CC  libswresample/rematrix.o   CC  libswresample/resample.o   CC  libswresample/resample_dsp.o   CC  libswresample/swresample.o   CC  libswresample/swresample_frame.o   AR  libswresample/libswresample.a   CC  libswscale/alphablend.o   AS  libswscale/arm/hscale.o   AS  libswscale/arm/output.o   AS  libswscale/arm/rgb2yuv_neon_16.o   AS  libswscale/arm/rgb2yuv_neon_32.o   CC  libswscale/arm/swscale.o   CC  libswscale/arm/swscale_unscaled.o   AS  libswscale/arm/yuv2rgb_neon.o   CC  libswscale/gamma.o   CC  libswscale/hscale.o   CC  libswscale/hscale_fast_bilinear.o   CC  libswscale/input.o   CC  libswscale/options.o   CC  libswscale/output.o   CC  libswscale/rgb2rgb.o   CC  libswscale/slice.o   CC  libswscale/swscale.o   CC  libswscale/swscale_unscaled.o   CC  libswscale/utils.o   CC  libswscale/vscale.o   CC  libswscale/yuv2rgb.o   AR  libswscale/libswscale.a   CC  libavutil/../compat/strtod.o   CC  libavutil/adler32.o   CC  libavutil/aes.o   CC  libavutil/aes_ctr.o   CC  libavutil/arm/cpu.o   CC  libavutil/arm/float_dsp_init_arm.o   CC  libavutil/arm/float_dsp_init_neon.o   CC  libavutil/arm/float_dsp_init_vfp.o   AS  libavutil/arm/float_dsp_neon.o   AS  libavutil/arm/float_dsp_vfp.o   CC  libavutil/audio_fifo.o   CC  libavutil/avstring.o   CC  libavutil/base64.o   CC  libavutil/blowfish.o   CC  libavutil/bprint.o   CC  libavutil/buffer.o   CC  libavutil/camellia.o   CC  libavutil/cast5.o   CC  libavutil/channel_layout.o   CC  libavutil/color_utils.o   CC  libavutil/cpu.o   CC  libavutil/crc.o   CC  libavutil/des.o   CC  libavutil/dict.o   CC  libavutil/display.o   CC  libavutil/downmix_info.o   CC  libavutil/error.o   CC  libavutil/eval.o   CC  libavutil/fifo.o   CC  libavutil/file.o   CC  libavutil/file_open.o   CC  libavutil/fixed_dsp.o   CC  libavutil/float_dsp.o   CC  libavutil/frame.o   CC  libavutil/hash.o   CC  libavutil/hmac.o   CC  libavutil/hwcontext.o   CC  libavutil/imgutils.o   CC  libavutil/integer.o   CC  libavutil/intmath.o   CC  libavutil/lfg.o   CC  libavutil/lls.o   CC  libavutil/log.o   CC  libavutil/log2_tab.o   CC  libavutil/mastering_display_metadata.o   CC  libavutil/mathematics.o   CC  libavutil/md5.o   CC  libavutil/mem.o   CC  libavutil/murmur3.o   CC  libavutil/opt.o   CC  libavutil/parseutils.o   CC  libavutil/pixdesc.o   CC  libavutil/pixelutils.o   CC  libavutil/random_seed.o   CC  libavutil/rational.o   CC  libavutil/rc4.o   CC  libavutil/reverse.o   CC  libavutil/ripemd.o   CC  libavutil/samplefmt.o   CC  libavutil/sha.o   CC  libavutil/sha512.o   CC  libavutil/stereo3d.o   CC  libavutil/tea.o   CC  libavutil/threadmessage.o   CC  libavutil/time.o   CC  libavutil/timecode.o   CC  libavutil/tree.o   CC  libavutil/twofish.o   CC  libavutil/utils.o   CC  libavutil/xga_font_data.o   CC  libavutil/xtea.o   AR  libavutil/libavutil.a  

(b)

图1.2. FFmpeg中make编译

[plain]  view plain  copy cmake_minimum_required(VERSION 3.4.1)   include_directories(../../../../../../../libavcodec                        ../../../../../../../libavdevice                        ../../../../../../../libavfilter                        ../../../../../../../libavformat                        ../../../../../../../libavresample                        ../../../../../../../libavutil                        ../../../../../../../libpostproc                        ../../../../../../../libswresample                        ../../../../../../../libswscale                        ../../../../../../../)   set(libfilenames                       ../../../../../../../libavcodec/allcodecs.c                       ../../../../../../../libavcodec/arm/h264chroma_init_arm.c                       ../../../../../../../libavcodec/arm/h264dsp_init_arm.c                       ../../../../../../../libavcodec/arm/h264pred_init_arm.c                       ../../../../../../../libavcodec/arm/h264qpel_init_arm.c                       ../../../../../../../libavcodec/arm/idctdsp_init_arm.c                       ../../../../../../../libavcodec/arm/idctdsp_init_armv5te.c                       ../../../../../../../libavcodec/arm/idctdsp_init_armv6.c                       ../../../../../../../libavcodec/arm/idctdsp_init_neon.c                       ../../../../../../../libavcodec/arm/me_cmp_init_arm.c                       ../../../../../../../libavcodec/arm/pixblockdsp_init_arm.c                       ../../../../../../../libavcodec/arm/videodsp_init_arm.c                       ../../../../../../../libavcodec/arm/videodsp_init_armv5te.c                       ../../../../../../../libavcodec/audioconvert.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/cabac.c                       ../../../../../../../libavcodec/codec_desc.c                       ../../../../../../../libavcodec/d3d11va.c                       ../../../../../../../libavcodec/dirac.c                       ../../../../../../../libavcodec/dv_profile.c                       ../../../../../../../libavcodec/error_resilience.c                       ../../../../../../../libavcodec/faandct.c                       ../../../../../../../libavcodec/faanidct.c                       ../../../../../../../libavcodec/fdctdsp.c                       ../../../../../../../libavcodec/golomb.c                       ../../../../../../../libavcodec/h2645_parse.c                       ../../../../../../../libavcodec/h264_cabac.c                       ../../../../../../../libavcodec/h264_cavlc.c                       ../../../../../../../libavcodec/h264_direct.c                       ../../../../../../../libavcodec/h264_loopfilter.c                       ../../../../../../../libavcodec/h264_mb.c                       ../../../../../../../libavcodec/h264_parse.c                       ../../../../../../../libavcodec/h264_parser.c                       ../../../../../../../libavcodec/h264_picture.c                       ../../../../../../../libavcodec/h264_ps.c                       ../../../../../../../libavcodec/h264_refs.c                       ../../../../../../../libavcodec/h264_sei.c                       ../../../../../../../libavcodec/h264_slice.c                       ../../../../../../../libavcodec/h264chroma.c                       ../../../../../../../libavcodec/h264data.c                       ../../../../../../../libavcodec/h264dec.c                       ../../../../../../../libavcodec/h264dsp.c                       ../../../../../../../libavcodec/h264idct.c                       ../../../../../../../libavcodec/h264pred.c                       ../../../../../../../libavcodec/h264qpel.c                       ../../../../../../../libavcodec/idctdsp.c                       ../../../../../../../libavcodec/imgconvert.c                       ../../../../../../../libavcodec/jfdctfst.c                       ../../../../../../../libavcodec/jfdctint.c                       ../../../../../../../libavcodec/jni.c                       ../../../../../../../libavcodec/jrevdct.c                       ../../../../../../../libavcodec/mathtables.c                       ../../../../../../../libavcodec/me_cmp.c                       ../../../../../../../libavcodec/mediacodec.c                       ../../../../../../../libavcodec/options.c                       ../../../../../../../libavcodec/parser.c                       ../../../../../../../libavcodec/pixblockdsp.c                       ../../../../../../../libavcodec/profiles.c                       ../../../../../../../libavcodec/pthread.c                       ../../../../../../../libavcodec/pthread_frame.c                       ../../../../../../../libavcodec/pthread_slice.c                       ../../../../../../../libavcodec/qsv_api.c                       ../../../../../../../libavcodec/raw.c                       ../../../../../../../libavcodec/resample.c                       ../../../../../../../libavcodec/resample2.c                       ../../../../../../../libavcodec/simple_idct.c                       ../../../../../../../libavcodec/startcode.c                       ../../../../../../../libavcodec/utils.c                       ../../../../../../../libavcodec/videodsp.c                       ../../../../../../../libavcodec/vorbis_parser.c                       ../../../../../../../libavcodec/xiph.c                       ../../../../../../../libavcodec/arm/h264cmc_neon.S                       ../../../../../../../libavcodec/arm/h264dsp_neon.S                       ../../../../../../../libavcodec/arm/h264idct_neon.S                       ../../../../../../../libavcodec/arm/h264pred_neon.S                       ../../../../../../../libavcodec/arm/h264qpel_neon.S                       ../../../../../../../libavcodec/arm/hpeldsp_neon.S                       ../../../../../../../libavcodec/arm/idctdsp_arm.S                       ../../../../../../../libavcodec/arm/idctdsp_armv6.S                       ../../../../../../../libavcodec/arm/idctdsp_neon.S                       ../../../../../../../libavcodec/arm/jrevdct_arm.S                       ../../../../../../../libavcodec/arm/me_cmp_armv6.S                       ../../../../../../../libavcodec/arm/pixblockdsp_armv6.S                       ../../../../../../../libavcodec/arm/simple_idct_arm.S                       ../../../../../../../libavcodec/arm/simple_idct_armv5te.S                       ../../../../../../../libavcodec/arm/simple_idct_armv6.S                       ../../../../../../../libavcodec/arm/simple_idct_neon.S                       ../../../../../../../libavcodec/arm/startcode_armv6.S                       ../../../../../../../libavcodec/arm/videodsp_armv5te.S                       ../../../../../../../libavdevice/alldevices.c                       ../../../../../../../libavdevice/avdevice.c                       ../../../../../../../libavdevice/utils.c                       ../../../../../../../libavfilter/allfilters.c                       ../../../../../../../libavfilter/audio.c                       ../../../../../../../libavfilter/avfilter.c                       ../../../../../../../libavfilter/avfiltergraph.c                       ../../../../../../../libavfilter/buffersink.c                       ../../../../../../../libavfilter/buffersrc.c                       ../../../../../../../libavfilter/drawutils.c                       ../../../../../../../libavfilter/fifo.c                       ../../../../../../../libavfilter/formats.c                       ../../../../../../../libavfilter/framepool.c                       ../../../../../../../libavfilter/graphdump.c                       ../../../../../../../libavfilter/graphparser.c                       ../../../../../../../libavfilter/opencl_allkernels.c                       ../../../../../../../libavfilter/pthread.c                       ../../../../../../../libavfilter/transform.c                       ../../../../../../../libavfilter/video.c                       ../../../../../../../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/metadata.c                       ../../../../../../../libavformat/mux.c                       ../../../../../../../libavformat/options.c                       ../../../../../../../libavformat/os_support.c                       ../../../../../../../libavformat/protocols.c                       ../../../../../../../libavformat/qtpalette.c                       ../../../../../../../libavformat/rawdec.c                       ../../../../../../../libavformat/riff.c                       ../../../../../../../libavformat/sdp.c                       ../../../../../../../libavformat/url.c                       ../../../../../../../libavformat/utils.c                       ../../../../../../../libswresample/arm/audio_convert_init.c                       ../../../../../../../libswresample/arm/resample_init.c                       ../../../../../../../libswresample/audioconvert.c                       ../../../../../../../libswresample/dither.c                       ../../../../../../../libswresample/options.c                       ../../../../../../../libswresample/rematrix.c                       ../../../../../../../libswresample/resample.c                       ../../../../../../../libswresample/resample_dsp.c                       ../../../../../../../libswresample/swresample.c                       ../../../../../../../libswresample/swresample_frame.c                       ../../../../../../../libswscale/alphablend.c                       ../../../../../../../libswscale/arm/swscale.c                       ../../../../../../../libswscale/arm/swscale_unscaled.c                       ../../../../../../../libswscale/gamma.c                       ../../../../../../../libswscale/hscale.c                       ../../../../../../../libswscale/hscale_fast_bilinear.c                       ../../../../../../../libswscale/input.c                       ../../../../../../../libswscale/options.c                       ../../../../../../../libswscale/output.c                       ../../../../../../../libswscale/rgb2rgb.c                       ../../../../../../../libswscale/slice.c                       ../../../../../../../libswscale/swscale.c                       ../../../../../../../libswscale/swscale_unscaled.c                       ../../../../../../../libswscale/utils.c                       ../../../../../../../libswscale/vscale.c                       ../../../../../../../libswscale/yuv2rgb.c                       ../../../../../../../libavutil/../compat/strtod.c                       ../../../../../../../libavutil/adler32.c                       ../../../../../../../libavutil/aes.c                       ../../../../../../../libavutil/aes_ctr.c                       ../../../../../../../libavutil/arm/cpu.c                       ../../../../../../../libavutil/arm/float_dsp_init_arm.c                       ../../../../../../../libavutil/arm/float_dsp_init_neon.c                       ../../../../../../../libavutil/arm/float_dsp_init_vfp.c                       ../../../../../../../libavutil/audio_fifo.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/downmix_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/hmac.c                       ../../../../../../../libavutil/hwcontext.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/stereo3d.c                       ../../../../../../../libavutil/tea.c                       ../../../../../../../libavutil/threadmessage.c                       ../../../../../../../libavutil/time.c                       ../../../../../../../libavutil/timecode.c                       ../../../../../../../libavutil/tree.c                       ../../../../../../../libavutil/twofish.c                       ../../../../../../../libavutil/utils.c                       ../../../../../../../libavutil/xga_font_data.c                       ../../../../../../../libavutil/xtea.c                       ../../../../../../../libswresample/arm/audio_convert_neon.S                       ../../../../../../../libswresample/arm/resample.S                       ../../../../../../../libswscale/arm/hscale.S                       ../../../../../../../libswscale/arm/output.S                       ../../../../../../../libswscale/arm/rgb2yuv_neon_16.S                       ../../../../../../../libswscale/arm/rgb2yuv_neon_32.S                       ../../../../../../../libswscale/arm/yuv2rgb_neon.S                       ../../../../../../../libavutil/arm/float_dsp_neon.S                       ../../../../../../../libavutil/arm/float_dsp_vfp.S   )      list(APPEND libfilenames               ../cpp/wrapper/getopt.c               ../cpp/wrapper/main.c               ../cpp/wrapper/openHevcWrapper.c   )   #message(STATUS "libfilenames source: " ${libfilenames})   enable_language(ASM)   add_library( # Sets the name of the library.                ffmpegH264-lib                   # Sets the library as a shared library.                STATIC                   # Provides a relative path to your source file(s).                ${libfilenames})  

图1.3. CMakeList.txt文件

2.  修改配置文件和源文件

经过第一部分的操作,已经生成了一个Android Studio工程,并且使用了CMake的方式来编译ffmpeg库。但是ffmpeg库在编译过程中仍然会出现许多错误,主要原因是未包含对应头文件或者头文件冲突等。下面列举个别作为例子。

1)       第一种情况是缺少头文件引用,只要添加对应的头文件即可,如图2.1所示。通过搜索,可以发现“ff_reverse”是一个定义在“libavutil/internal.h”中的一个extern变量,通过在“bitstream.c”文件的开头引入头文件“libavutil/internal.h”即可解决,相似缺少引用“config.h”头文件和“cpu.h”,按照相同的方法处理即可;

图2.1缺乏对应头文件引用

2)       第二种情况如图2.2所示,原因是libavutil/time.h和NDK自带的time.h头文件造成了冲突,把 libavutil/time.h更名为libavutil/avtime.h, 同时修改下面文件中的引用libavutil/time.h为libavutil/avtime.h :libavformat/avio.c、libavformat/hls.c、libavformat/avformat.h、libavformat/mux.c、 libavformat/utils.c、libavutil/time.c、libavutil/eval.c、libavutil/parseutils.c

图2.2 config.h中没有对应的宏

       以上只是粗略大概的讲述了两种不同的情况的处理方法,并未对每个文件的修改做详细说明;由于NDK版本不同,可能还会出现不同的错误应根据实际情况酌情处理,比如“av_restrict”关键字等。

3.  调试FFmpeg的H264工程

该项目的的制作过程中利用了网上OpenHEVC工程的部分代码,已将里面的部分代码改成了调用H264解码库,如图3所示。FFmpeg H264的Android Studio工程,可以点此下载,工程中已经包含了H264的Neon优化代码。

图3 Android Studio调试FFmpeg H264解码库



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有