欠揍的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,

待续。

时间: 2024-10-18 20:10:50

欠揍的ffmpeg,调试android里的ffmpeg (1)的相关文章

FFmpeg的Android平台移植—编译篇

摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: ubuntu-12.04.5 android-ndk64-r10-linux-x86_64.tar.tar ffmpeg-2.7.2_tmp.tar.bz2 adt-bundle-windows-x86_64-20131030.zip 第一步:源代码下载 到FFmpeg官方网站http://www.ffmpeg.org/上去下载源代码,这里下载的源代码是最权威的.进入官网之后,选择”Dow

Linux下编译Android平台的ffmpeg库

在Linux平台下编译要方便些,我这里使用的环境是openSUSE,用Ubutunu也是一样的. 首先你需要Android-NDK 和ffmpeg源码,不同的版本里的文件结构有所差别,编译环境也有所不同.我这里使用的是以下两个版本: android-ndk-r8-linux-x86.tar.bz2 ffmpeg-0.7.17.tar.gz 1. 解压 android-ndk-r8-linux-x86.tar.bz2 cd ~ tar xvf android-ndk-r8-linux-x86.ta

ffmpeg在android上输出滑屏问题处理

ffmpeg部分机器上有花屏的问题 原代码如下: while(av_read_frame(formatCtx, &packet)>=0 && !_stop && NULL!=window && bInit) { // Is this a packet from the video stream? if(packet.stream_index==videoStream) { // Decode video frame avcodec_decode

Code::blocks建立ffmpeg调试环境

一直想学ffmpeg源码,但是ffmpeg只支持gdb调试,它不能在VC上编译.断点调试.最近看到同事用code::blocks和Mingw编译x264,而x264也是不能在VC下编译的,因此尝试在code::blocks下编译ffmpeg,最终编译成功,而且能够断点调试.我编译的过程如下: 1. 从官网下载ffmpeg的源码,我下载的版本为ffmpeg-2.5.1 2. 将ffmpeg压缩包解压放到Mingw目录的:MinGW\msys\1.0\home\Administrator 3. 打开

[原]ffmpeg编译android 硬解码支持库 libstagefright

最近花了一天时间将ffmpeg/tools/build_stagefright执行成功,主要是交叉编译所需要的各种动态库的支持没链接上,导致各种报错,基本上网络上问到的问题我都碰到了,特此记录下来. 编译环境:Ubuntu 14.04 + Android NDK + FFmpeg源码. 第一步:将ffmpeg/tools/build_stagefright移动到ffmpeg下面,修改执行权限. chmod u+x build_stagefright 第二步:打开build_stagefright

android里单例对象和某些数据被释放的问题

接触正式的android开发已经有一段时间了,项目的第一个版本终于快完成了.有一次自己在测试的时候,把自己的android项目切到后台,同时打开了几个应用之后重新切回到自己的app,发现报错了.经过排查,发现是自己的单例对象中的数据被释放掉了,也就是int变量的值 变成了0,string变量的值变成了null. 我的单例一开始是这样的(举例); public class UserInfo { private static UserInfo userInfo = null; private int

IDA 调试 Android

最近都在学一些反编译安卓相关的东西,其实网上有很多教程关于用 IDA 调试 Android 的过程,主要记录一下我遇到的坑 首先 Android手机要是root过的 还要注意的一点是apk中的 AndroidManifest.xml 中debuggable要为true 1.将 apk 装到手机上,然后执行命令行: adb shell am start -D -n "com.gabo.test/com.unity3d.player.UnityPlayerActivity" 最后一个参数是

如何调试 Android 上 HTTP(S) 流量

转自: http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/ 如何调试 Android 上 HTTP(S) 流量 前面的话 在Android开发中我们常常会和API 打交道,可能你不想,但是这是避不开的.大部分情况下,调试发送网络请求和接收响应的过程都是十分痛苦的. 有多少次我们经过调试发现API的调用失败仅仅是因为我们的编码错了或者丢失了一个HTTP头部参数?在调试的过程中,我们发现出现错误的原

IDA 调试 Android 方法及简单的脱壳实现

IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) Android(5) 学习(9) 逆向(4) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 本文参考了一些网络文章,对大大们的技术分享表示感谢.小弟刚刚开始深入去搞Android的逆向不久,写一下学习笔记,希望能抛砖引玉,给新手同学们带来方便.文笔比较烂,这不重要,重要的是按自