2

これは、スタック オーバーフローにヘルプを投稿する最初の試みです。

私のプロジェクト: STM32F407VGT6 チップを搭載した STM32F4-Discovery と FPv4-SP およびカメラ/LCD 周辺機器のセットアップを使用して、QVGA でビデオを録画し、少なくとも 25:1 の比率で圧縮された MPEG-4 形式に出力する必要があります。

必要なコーデック ライブラリ (avconv、ffmpeg の方が使いやすいことが証明されない限り) を特定し、ANSI-C のチップ上で実行できる軽量バージョンを提供するコンパイラ オプションを構築しようとしています。および Thumb アーキテクチャ。

このボードのスペースは非常に限られており (192KB の SRAM と 1MB のフラッシュ - 拡張の可能性はありますが、私が持っているものだけを使用することをお勧めします)、現在どちらのライブラリの「メイン」実行可能ファイルも 1MB を超えています。

私が試したさまざまなソリューションの出力から判断すると、多くのコンパイラ オプションがビルドに正常に適用されているようには見えません。だから私の質問は:

1) rawvideo デコーダ、mpeg4 エンコーダ、および可能な限り最も基本的なユーティリティのみを使用して、いずれかのライブラリを必要なスペースにコンパイルすることさえ可能ですか? そうでない場合、どれくらい必要になるかについての推測はありますか?

2) 私はインターネットを何時間もかけて調べましたが、誰もこれを試みたようには見えません。そうでないことを教えてくれる人はいますか?

基本的なものを見落としていないかどうかを確認したい人のために、configure/build スクリプトを用意しています。聞いてみてください。私はそれを電子メールで送信します。一見冗長な審問がすでに持っている以上にスレッドを混乱させたくありません。

どちらのライブラリも壊れている可能性は低いと思います。Ubuntu 12.04 32ビットでこれを試みています。

私はソフトウェアのインターンであり、利用可能なヘルプに非常に感謝しています.

最後の質問です。私の解決策がうまくいかない場合、組み込み ARMv7E-M/Thumb セット アーキテクチャ用に簡単にコンパイルできるオープンソースの mpeg4 圧縮ライブラリは他にありますか?

編集: 以前は含まれていなかったビルド コマンドを次に示します。

#!/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

これは私が入手して修正したスクリプトです。ARMv7e-m チップ (ディスカバリー ボード) では実行されない ARMv7-a 用に最初に正常にビルドされました。

4

1 に答える 1

0

最初にいくつか質問があります:

どのコンパイラ オプションを使用していますか? 正しいライブラリと浮動小数点のサポートを有効にするために、それらを正しく設定することが重要です。ビルド コマンドを投稿できますか? コンパイル段階とリンク段階を分けていますか?

newlib または newlib-nano を使用していますか? newlib-nano でスペースを節約できます。

ベアメタルで実行していますか、それとも RTOS で実行していますか?

于 2013-08-22T20:45:45.740 に答える