目標問題linux
對於jpeg的編碼爲何不用libjpeg而是用mpeg(沒錯就是這電影老古董格式)裏代碼?android
其實發現就連wmv等等一些平時用不着的破東西,都是和mpeg老古董共用一套代碼。jpeg和mpeg沒什麼關係吧?overhead不大嗎?ide
爲何mjpeg(就是連續的jpeg)編碼輸出時,編碼第N+1副圖時才真正的輸出第N幅圖的jpeg編碼結果?ui
每獲得一副原圖輸入數據,那麼內存就彷佛被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,
待續。