2013-08-20 42 views
2

這是我第一次嘗試發佈堆棧溢出幫助。我的項目: 使用帶有FPv4-SP和相機/ LCD外設的STM32F407VGT6芯片的STM32F4-Discovery,我需要以QVGA格式錄製視頻並將其輸出爲壓縮的MPEG-4格式,至少包含一個比例爲25:1。編譯並構建STM32F4-Discovery的瘦版avconv/ffmpeg - armv7 thumb 1/2架構

我已經確定了所需的編解碼器庫(avconv,除非ffmpeg證明更有用),現在正在嘗試構建編譯器選項以使我能夠在芯片上執行一個輕量級版本在ANSI-C和Thumb架構中。

該板的空間非常有限(192KB SRAM和1MB閃存 - 有擴展的可能性,但最好只使用我的),目前任一個庫的「主要」可執行文件都超過1MB 。

通過使用不同解決方案的輸出來判斷我已經嘗試過 - 它沒有出現許多編譯器選項已成功應用於構建。所以我的問題是:

1)是否甚至有可能使用原始視頻解碼器,mpeg4編碼器和最基本的實用程序可能的編譯庫到所需的空間?如果不是,那麼有多少需求會有猜測?

2)我已經花了很多時間在網上搜索,而且似乎沒有人試圖這樣做 - 有沒有人可以告訴我,否則呢?

我有我的配置/構建腳本,爲任何想看一看,看看我是否遺漏了一些基本的東西。只要問一下,我會通過電子郵件發送給他,我不想把這個線程混淆得比我的表面上冗長的調查已經有的多。

我會假設這兩個庫都不可能被破壞。我一直在嘗試Ubuntu 12.04 32位。

我是一名軟件實習生,非常感謝任何可用的幫助。

如果我的解決方案證明不可行,最後一個問題是,是否有另一個開源mpeg4壓縮庫,可以輕鬆編譯嵌入式ARMv7E-M/Thumb集架構?

編輯: 這是構建命令,以前unincluded。

#!/bin/bash 

NDK=~/Desktop/android-ndk-r9 
PLATFORM=~/Desktop/gcc-arm-none-eabi-4_7-2013q2 
PREBUILT=~/Desktop/gcc-arm-none-eabi-4_7-2013q2/arm-none-eabi 
function build_one 
{ 
./configure --target-os=symbian \ 
    --prefix=$PREFIX \ 
    --disable-everything \ 
    --enable-cross-compile \ 
    --disable-shared \ 
    --enable-static \ 
    --enable-small \ 
    # --disable-asm \ 
    --enable-thumb \ 
    --extra-libs="-lgcc" \ 
    --arch=armv7e-m \ 
    --cc=$PREBUILT/bin/gcc \ 
    --cross-prefix=$PREBUILT/bin \ 
    --nm=$PREBUILT/bin/nm \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -mthumb-interwork -finline-limit=300 $OPTIMIZE_CFLAGS -I/usr/local/include" \ 
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/arm-none-eabi/lib/armv7e-m -L $PLATFORM/arm-none-eabi/lib/armv7e-m -nostdlib -lc -lm -ldl -llog -L/usr/local/lib " \ 
--enable-gpl \ 
    # --enable-libx264 \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --disable-ffserver \ 
    --disable-ffprobe \ 
    --enable-protocol=file \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-encoder=mjpeg \ 
    --enable-encoder=h263 \ 
    --enable-encoder=mpeg4 \ 
    --enable-encoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
    $ADDITIONAL_CONFIGURE_FLAG 

make clean 
make -j4 install 
$PREBUILT/bin/ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/ld -rpath-link=$PLATFORM/arm-none-eabi/lib/armv7e-m -L$PLATFORM/arm-none-eabi/lib/armv7e-m -soname libffmpeg.so -shared -Bshareable -nostdlib -Bdynamic --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT../lib/gcc/arm-none-eabi/4.7.4/armv7e-m/libgcc.a 
} 

CPU=armv7e-m 
OPTIMIZE_CFLAGS="-mfloat-abi=hard -mfpu=vfpv4 -march=$CPU " 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

這是我已經獲得和修改的腳本。它最初是爲ARMv7-a成功構建的,而ARMv7-a將不會在ARMv7e-m芯片(發現板)上執行。

回答

0

第一次拿到一些問題:

什麼編譯選項是您使用?讓它們正確啓用正確的庫和浮點支持非常重要。你能發佈你的構建命令嗎? 您是否將編譯階段和鏈接階段分開?

您使用的是newlib還是newlib-nano?你可以用newlib-nano節省空間。

您是裸機還是RTOS?

+0

首先,我很欣賞這種迴應。我會將我的編譯命令添加到原始文章的編輯中,以避免此評論混亂。我相信現在我的問題在於建築。當我編譯並試圖鏈接到IAR Workstation的共享庫時,出現錯誤「此代碼是爲ARMv7編譯的......不能在ARMv7e-m上運行..」嘗試使用其他工具鏈進行強制使用後,我認爲問題在於源代碼無法爲我的目標平臺構建。另外我是嵌入式noob,我想我正在使用RTOS。看後,我不認爲我使用過newlib。 –

+0

你正在使用什麼工具鏈?您需要使用可以爲arm cortex m4構建的交叉編譯器。 –

+0

如果您收到的構建腳本是針對ARMv7-a的,那麼最有可能爲ARMv7-a編譯這些共享庫。您需要重新編譯庫和編譯器來支持ARMv7e-m –