2013-08-20 31 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 –