Это моя первая попытка обратиться за помощью в Stack Overflow.
Мой проект: используя STM32F4-Discovery с чипом STM32F407VGT6 с FPv4-SP и настройкой периферийных устройств камеры/ЖК-дисплея, мне нужно записывать видео в формате QVGA и выводить в сжатый формат MPEG-4 с соотношением сторон не менее 25:1.
Я определил нужную библиотеку кодеков (avconv, если только ffmpeg не окажется более пригодным для использования) и сейчас пытаюсь создать параметры компилятора, чтобы получить облегченную версию, которая сможет выполняться на чипе в ANSI-C. и архитектура большого пальца.
Эта плата имеет очень ограниченное пространство (192 КБ SRAM и 1 МБ флэш-памяти — есть возможность расширения, но было бы предпочтительнее использовать только то, что у меня есть), и в настоящее время «основной» исполняемый файл любой библиотеки превышает 1 МБ.
Судя по выводу с различными решениями, которые я пробовал, не похоже, что многие параметры компилятора успешно применяются к сборке. Итак, мои вопросы:
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 (плата обнаружения).