这是我第一次尝试在 Stack Overflow 上发帖寻求帮助。
我的项目:使用带有 STM32F407VGT6 芯片的 STM32F4-Discovery 和 FPv4-SP 和相机/LCD 外围设置,我需要以 QVGA 录制视频并输出为压缩比至少为 25:1 的 MPEG-4 格式。
我已经确定了所需的编解码器库(avconv,除非 ffmpeg 证明更有用),现在我正在尝试构建编译器选项,为我提供一个能够在 ANSI-C 芯片上执行的轻量级版本和拇指架构。
该板的空间非常有限(192KB SRAM 和 1MB 闪存 - 有扩展的可能性,但最好只使用我所拥有的),目前任一库的“主要”可执行文件都超过 1MB。
从我尝试过的不同解决方案的输出来看 - 似乎很多编译器选项都没有成功应用于构建。所以我的问题是:
1) 是否可以仅使用 rawvideo 解码器、mpeg4 编码器和最基本的实用程序将任一库编译到所需的空间?如果没有,有没有估计需要多少?
2)我花了很多时间在互联网上搜索,但似乎没有人尝试过 - 有没有人可以告诉我其他情况?
我手头有我的配置/构建脚本,任何人都想看看我是否错过了一些基本的东西。只要问,我会通过电子邮件发送它,我不想让线程变得比我看似冗长的调查已经拥有的更多。
我认为这两个库都不太可能损坏。我一直在 Ubuntu 12.04 32 位上尝试这个。
我是一名软件实习生,非常感谢任何可用的帮助。
最后一个问题,如果我的解决方案被证明不可行,是否有另一个开源 mpeg4 压缩库可以为嵌入式 ARMv7E-M/Thumb 集架构轻松编译?
编辑:这是以前未包含的构建命令。
#!/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 成功构建的,它不会在 ARMv7e-m 芯片(发现板)上执行。