1. 程式人生 > >tiny4412 移植ffmpeg 不適用命令列,使用C程式碼方式壓縮視訊

tiny4412 移植ffmpeg 不適用命令列,使用C程式碼方式壓縮視訊

1.ubuntu 16.04 編譯x264

./configure --host=arm-linux --prefix=/x264-asm --enable-shared --disable-asm 

編輯config.mak

CC=arm-linux-gcc
CFLAGS=-Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -fPIC -fomit-frame-pointer -fno-tree-vectorize
DEPMM=-MM -g0
DEPMT=-MT
LD=arm-linux-gcc -o
LDFLAGS= -lm -lpthread
LIBX264=libx264.a
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
STRIP=strip
AS=
ASFLAGS= -DPIC -DBIT_DEPTH=8
make 

make install

下載地址 

http://download.csdn.net/download/aexisun/10135414

http://download.csdn.net/download/aexisun/10135418

2.ubuntu 16.04 編譯ffmpeg

./configure --cross-prefix=arm-linux- --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --prefix=/ffmpeg-4412 --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-libx264 --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2  --disable-stripping --extra-cflags=-I/x264-4412/include --extra-ldflags=-L/x264-4412/lib

make 

make install

下載

http://download.csdn.net/download/aexisun/10135443

3.測試ffmpeg

ffmpeg -s 1280*720 -pix_fmt yuv422 -i cam.yuv -vcodec mpeg4 output.avi

4.移植檔案到目標板

全部拷貝下

ffmpeg-4412/bin/*

ffmpeg-4412/lib/* 

ffmpeg-4412/include/*


x264-4412/lib/* 

x264-4412/include/*

到4412開發板根目錄下的lib  include

5.移植檔案到交叉工具鏈裡

全部拷貝下

ffmpeg-4412/lib/* 

ffmpeg-4412/include/*


x264-4412/lib/* 

x264-4412/include/*

到 ubuntu    /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi目錄下的lib  include


6成功編譯

arm-linux-gcc  ff.c -o ff  -lavcodec -lavdevice -lavfilter -lavformat -lavutil  

ff.c

#include <stdio.h>  
  
#define __STDC_CONSTANT_MACROS  
  
#ifdef __cplusplus  
extern "C"  
{  
#endif  
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/avfilter.h"
#ifdef __cplusplus  
};  
#endif  
// arm-linux-gcc  ff.c -o ff  -lavcodec -lavdevice -lavfilter -lavformat -lavutil  
  
/** 
 * AVFormat Support Information 
 */  
char * avformatinfo(){  
  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    AVInputFormat *if_temp = av_iformat_next(NULL);  
    AVOutputFormat *of_temp = av_oformat_next(NULL);  
    //Input  
    while(if_temp!=NULL){  
        sprintf(info, "%s[In ] %10s\n", info, if_temp->name);  
        if_temp=if_temp->next;  
    }  
    //Output  
    while (of_temp != NULL){  
        sprintf(info, "%s[Out] %10s\n", info, of_temp->name);  
        of_temp = of_temp->next;  
    }  
    return info;  
}  
  
/** 
 * AVCodec Support Information 
 */  
char * avcodecinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    AVCodec *c_temp = av_codec_next(NULL);  
  
    while(c_temp!=NULL){  
        if (c_temp->decode!=NULL){  
            sprintf(info, "%s[Dec]", info);  
        }  
        else{  
            sprintf(info, "%s[Enc]", info);  
        }  
        switch (c_temp->type){  
        case AVMEDIA_TYPE_VIDEO:  
            sprintf(info, "%s[Video]", info);  
            break;  
        case AVMEDIA_TYPE_AUDIO:  
            sprintf(info, "%s[Audio]", info);  
            break;  
        default:  
            sprintf(info, "%s[Other]", info);  
            break;  
        }  
  
        sprintf(info, "%s %10s\n", info, c_temp->name);  
  
        c_temp=c_temp->next;  
    }  
    return info;  
}  
  
/** 
 * AVFilter Support Information 
 */  
char * avfilterinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    avfilter_register_all();  
  
    AVFilter *f_temp = (AVFilter *)avfilter_next(NULL);  
      
    while (f_temp != NULL){  
        sprintf(info, "%s[%15s]\n", info, f_temp->name);  
        f_temp=f_temp->next;  
    }  
    return info;  
}  
  
/** 
 * Configuration Information 
 */  
char * configurationinfo()  
{  
    char *info=(char *)malloc(40000);  
    memset(info,0,40000);  
  
    av_register_all();  
  
    sprintf(info, "%s\n", avcodec_configuration());  
  
    return info;  
}  
  
int main(int argc, char* argv[])  
{  
    char *infostr=NULL;  
    infostr=configurationinfo();  
    printf("\n<<Configuration>>\n%s",infostr);  
    free(infostr);  
  
    infostr=avformatinfo();  
    printf("\n<<AVFormat>>\n%s",infostr);  
    free(infostr);  
  
    infostr=avcodecinfo();  
    printf("\n<<AVCodec>>\n%s",infostr);  
    free(infostr);  
  
    infostr=avfilterinfo();  
    printf("\n<<AVFilter>>\n%s",infostr);  
    free(infostr);  
  
    return 0;  
}