欠揍的ffmpeg,调试android里的ffmpeg (1)

目标问题

  1. 对于jpeg的编码为什么不用libjpeg而是用mpeg(没错就是这电影老古董格式)里代码?

    其实发现就连wmv等等一些平时用不着的破东西,都是和mpeg老古董共用一套代码。jpeg和mpeg没什么关系吧?overhead不大吗?

  2. 为什么mjpeg(就是连续的jpeg)编码输出时,编码第N+1副图时才真正的输出第N幅图的jpeg编码结果?

  3. 每得到一副原图输入数据,那么内存就似乎被copy到新内存,然后废弃,巨大的图片的时候,这种copy很浪费CPU,如何让他不要copy而是直接用原始内存。反正一幅幅图来也不着急,干嘛要copy 呢。


先编一个android里用的ffmpeg命令行,要debug版的,关键是configure时加上

--enable-debug --disable-stripping

例如: 

  从NDK里准备一个标准的gcc tool chain以便后面的跨平台编译。

echo ---------------make standard GCC Tool Chain from Android NDK--------------------
ls -d ./std_toolchain && { echo ./std_toolchain already exist; exit 0; }

printenv ANDROID_NDK_ROOT > /dev/null || { echo please export ANDROID_NDK_ROOT=root_dir_of_your_android_ndk; exit 1; }

PLATFORM=$(basename $(ls -d $ANDROID_NDK_ROOT/platforms/android-8)); test -z $PLATFORM && exit 1
TOOLCHAIN=$(basename $(ls -d $ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-[4-5].* | tail -n 1)); test -z $TOOLCHAIN && exit 1
WORK_SYSTEM=$(basename $(ls -d $ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-[4-5].*/prebuilt/* | tail -n 1)); test -z $WORK_SYSTEM && exit 1
$ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh --install-dir=./std_toolchain --platform=$PLATFORM --toolchain=$TOOLCHAIN --system=$WORK_SYSTEM --arch=arm --verbose

echo ""; echo ok; echo ""

export PATH="$PWD/std_toolchain/bin:$PATH"
export CC=arm-linux-androideabi-gcc

然后到ffmpeg的源码下执行configure

./configure --enable-cross-compile --cross-prefix=arm-linux-androideabi- --target-os=linux \
    --arch=armv7 --cpu=armv7-a \
    --disable-doc --disable-ffplay --disable-ffprobe --disable-ffserver --disable-symver --enable-debug --disable-stripping --disable-everything \
    --enable-static \
   --enable-protocol=pipe \
   --enable-filter=scale --enable-filter=crop --enable-filter=transpose \
   --enable-demuxer=rawvideo --enable-decoder=rawvideo \
   --enable-muxer=image2 --enable-muxer=image2pipe --enable-muxer=mjpeg --enable-encoder=mjpeg

只是一个例子而已,只留下了rawvideo输入格式和mjpeg输出格式的支持。

然后make, 得到ffmpeg。

传到android的/data/local/tmp/上。

(一些更具体的准备性质的步骤参照Android native debug: 手动使用gdbserver远程调试C代码)

然后,开始启动gdbserver, 

待续。


转载于:https://my.oschina.net/osexp2003/blog/469976

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值