欠揍的ffmpeg,調試android裏的ffmpeg (1)

目標問題linux

  1. 對於jpeg的編碼爲何不用libjpeg而是用mpeg(沒錯就是這電影老古董格式)裏代碼?android

    其實發現就連wmv等等一些平時用不着的破東西,都是和mpeg老古董共用一套代碼。jpeg和mpeg沒什麼關係吧?overhead不大嗎?ide

  2. 爲何mjpeg(就是連續的jpeg)編碼輸出時,編碼第N+1副圖時才真正的輸出第N幅圖的jpeg編碼結果?ui

  3. 每獲得一副原圖輸入數據,那麼內存就彷佛被copy到新內存,而後廢棄,巨大的圖片的時候,這種copy很浪費CPU,如何讓他不要copy而是直接用原始內存。反正一幅幅圖來也不着急,幹嗎要copy 呢。編碼


先編一個android裏用的ffmpeg命令行,要debug版的,關鍵是configure時加上idea

--enable-debug --disable-stripping

例如: spa

  從NDK裏準備一個標準的gcc tool chain以便後面的跨平臺編譯。.net

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輸出格式的支持。debug

而後make, 獲得ffmpeg。

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

(一些更具體的準備性質的步驟參照Android native debug: 手動使用gdbserver遠程調試C代碼)

而後,開始啓動gdbserver, 

待續。

相關文章
相關標籤/搜索