FFmpeg开发指南

来自SylixOS-wiki
(版本间的差异)
跳转至: 导航, 搜索
(下载 ffmpeg)
第13行: 第13行:
 
:进入 ffmpeg 目录:
 
:进入 ffmpeg 目录:
 
  cd ffmpeg
 
  cd ffmpeg
 +
 +
 +
 +
==修改 configure==
 +
 +
:*屏蔽 check_cflags -Wredundant-decls 避免过多报警。
 +
 +
:*屏蔽 check_cflags -Wstrict-prototypes 避免过多报警。
 +
 +
:*修改 if test_ldflags -Wl,--version-script,$TMPV; then 为 if false ; then
 +
 +
:*修改 ln_s="ln -s -f" 为 ln_s="cp -p"
 +
 +
:*屏蔽 die "C compiler test failed." 跳过编译器测试失败。
  
 
==增加环境变量==
 
==增加环境变量==
第46行: 第60行:
 
  export LDFLAGS="-mcpu=arm920t -fPIC -shared"
 
  export LDFLAGS="-mcpu=arm920t -fPIC -shared"
 
  export ASFLAGS="-mcpu=arm920t -fPIC -x assembler-with-cpp"
 
  export ASFLAGS="-mcpu=arm920t -fPIC -x assembler-with-cpp"
 
==修改 configure==
 
 
:*屏蔽 check_cflags -Wredundant-decls 避免过多报警。
 
 
:*屏蔽 check_cflags -Wstrict-prototypes 避免过多报警。
 
 
:*修改 if test_ldflags -Wl,--version-script,$TMPV; then 为 if false ; then
 
 
:*修改 ln_s="ln -s -f" 为 ln_s="cp -p"
 
 
:*屏蔽 die "C compiler test failed." 跳过编译器测试失败。
 
  
 
==配置==
 
==配置==

2014年7月15日 (二) 15:32的版本

目录

下载 ffmpeg

在 linux 环境下操作。
进入 sylixos 工作空间:
cd /home/user/sylixos_workspace
下载 ffmpeg:
git config --global core.autocrlf false
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
进入 ffmpeg 目录:
cd ffmpeg


修改 configure

  • 屏蔽 check_cflags -Wredundant-decls 避免过多报警。
  • 屏蔽 check_cflags -Wstrict-prototypes 避免过多报警。
  • 修改 if test_ldflags -Wl,--version-script,$TMPV; then 为 if false ; then
  • 修改 ln_s="ln -s -f" 为 ln_s="cp -p"
  • 屏蔽 die "C compiler test failed." 跳过编译器测试失败。

增加环境变量

开源版工具链环境变量

export CFLAGS="-mcpu=arm920t -fPIC -DSYLIXOS \
-DSYLIXOS_LIB -fsigned-char -fno-short-enums  -I../libsylixos/SylixOS -I../libsylixos/SylixOS/include \
-I../libsylixos/SylixOS/include/inet -I../libsylixos/SylixOS/include/inet/ipv4 \
-I../libsylixos/SylixOS/include/inet/ipv6 -I../libcextern/libcextern/include" 
export CXXFLAGS=$CFLAGS
export LDFLAGS="-mcpu=arm920t -fPIC -shared"
export ASFLAGS="-mcpu=arm920t -fPIC -x assembler-with-cpp"

商业版工具链环境变量

  • armv7-a系列处理器环境变量:
export CFLAGS="-march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon -fPIC -DSYLIXOS \
-DSYLIXOS_LIB -fsigned-char -fno-short-enums  -I../libsylixos/SylixOS -I../libsylixos/SylixOS/include \
-I../libsylixos/SylixOS/include/inet -I../libsylixos/SylixOS/include/inet/ipv4 \
-I../libsylixos/SylixOS/include/inet/ipv6 -I../libcextern/libcextern/include" 
export CXXFLAGS=$CFLAGS
export LDFLAGS="-march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon -fPIC -shared"
export ASFLAGS="-march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon -fPIC -x assembler-with-cpp"
  • armv4系列处理器环境变量:
export CFLAGS="-mcpu=arm920t -fPIC -DSYLIXOS \
-DSYLIXOS_LIB -fsigned-char -fno-short-enums  -I../libsylixos/SylixOS -I../libsylixos/SylixOS/include \
-I../libsylixos/SylixOS/include/inet -I../libsylixos/SylixOS/include/inet/ipv4 \
-I../libsylixos/SylixOS/include/inet/ipv6 -I../libcextern/libcextern/include" 
export CXXFLAGS=$CFLAGS
export LDFLAGS="-mcpu=arm920t -fPIC -shared"
export ASFLAGS="-mcpu=arm920t -fPIC -x assembler-with-cpp"

配置

开源版工具链配置

./configure --arch=armv4 --cpu=arm920t --target-os=none --cross-prefix=arm-none-eabi- \
--enable-shared --disable-static --disable-doc \
--extra-libs='-nostdlib -L../libsylixos/Debug -L../libcextern/Debug -lcextern -ldsohandle -lstdc++ -lvpmpdm -lm -lgcc'

商业版工具链配置

  • armv7-a系列处理器配置:
./configure --arch=armv7-a --cpu=cortex-a8 --target-os=none --cross-prefix=arm-sylixos-eabi- \
--enable-shared --disable-static --disable-doc \
--extra-libs='-nostdlib -L../libsylixos/Debug -L../libcextern/Debug -lcextern -ldsohandle -lstdc++ -lvpmpdm -lm -lgcc'
  • armv4系列处理器配置:
./configure --arch=armv4 --cpu=arm920t --target-os=none --cross-prefix=arm-sylixos-eabi- \
--enable-shared --disable-static --disable-doc \
--extra-libs='-nostdlib -L../libsylixos/Debug -L../libcextern/Debug -lcextern -ldsohandle -lstdc++ -lvpmpdm -lm -lgcc'
如果出现 bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory 错误,请用 vim 将 configure 的换行符修改为 unix 格式,vim 命令为 :set ff=unix。
将会生成 config.h config.mak doc/config.texi libavutil/avconfig.h 文件。

修改代码

1. config.h 修改:
将如下的 HAVE_XXX 定义为 0:
//#define HAVE_IO_H 1
#define HAVE_IO_H 0
//#define HAVE_FLT_LIM 1
#define HAVE_FLT_LIM 0
//#define HAVE_FORK 1
#define HAVE_FORK 0
//#define HAVE_GLOB 1
#define HAVE_GLOB 0
//#define HAVE_MACH_ABSOLUTE_TIME 1
#define HAVE_MACH_ABSOLUTE_TIME 0
//#define HAVE_SYSCTL 1
#define HAVE_SYSCTL 0
并增加 closesocket 定义:
#define closesocket close
2. h264_parser.c 修改:
在 static void close(...) 前加入:
#ifdef SYLIXOS_LIB
#define close h264_close
#endif
3. lxfdec.c 修改:
在 static int sync(...) 前加入:
#ifdef SYLIXOS_LIB
#define sync __sync
#endif
4. rmdec.c 修改:
在 static int sync(...) 前加入:
#ifdef SYLIXOS_LIB
#define sync __sync
#endif
5. atomic_gcc.h 修改:
#ifdef SYLIXOS
#define avpriv_atomic_int_get atomic_int_get_gcc
static inline int atomic_int_get_gcc(volatile int *ptr)
{
    INTREG reg;
    int val;
    API_AtomicLock(&reg);
    val = *ptr;
    API_AtomicUnlock(reg);
    return val;
}
#define avpriv_atomic_int_set atomic_int_set_gcc
static inline void atomic_int_set_gcc(volatile int *ptr, int val)
{
    INTREG reg;
    API_AtomicLock(&reg);
    *ptr = val;
    API_AtomicUnlock(reg);
}
#define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_gcc
static inline int atomic_int_add_and_fetch_gcc(volatile int *ptr, int inc)
{
    INTREG  reg;
    int val; 
    API_AtomicLock(&reg);
    val = *ptr = *ptr + inc;
    API_AtomicUnlock(reg);
    return val;
}
#define avpriv_atomic_ptr_cas atomic_ptr_cas_gcc
static inline void *atomic_ptr_cas_gcc(void * volatile *ptr,
                                       void *oldval, void *newval)
{
    INTREG  reg;
    void *val; 
    API_AtomicLock(&reg);
    val = *ptr;
    if (val == oldval) {
        *ptr = newval;
    }
    API_AtomicUnlock(reg);
    return val;
}
#else
    原有的函数定义,略。
#endif

编译

make
个人工具
名字空间

变种
操作
导航
工具