嵌入式linux------ffmpeg移植 編碼H264(am335x編碼H264),ffmpegh264

來源:互聯網
上載者:User

嵌入式linux------ffmpeg移植 編碼H264(am335x編碼H264),ffmpegh264

/*arm-linux-gcc -o yuv2264  yuv2264.c -I/usr/local/ffmpeg_arm/include/   -L/usr/local/ffmpeg_arm/lib/ -lswresample -lavformat -lavutil -lavcodec -lswscale -lx264   libSDL.a*/#include "stdio.h"#include "stdlib.h"#include "libavformat/avformat.h"#include "libavdevice/avdevice.h"#include "libswresample/swresample.h"#include "libavutil/opt.h"#include "libavutil/channel_layout.h"#include "libavutil/parseutils.h"#include "libavutil/samplefmt.h"#include "libavutil/fifo.h"#include "libavutil/intreadwrite.h"#include "libavutil/dict.h"#include "libavutil/mathematics.h"#include "libavutil/pixdesc.h"#include "libavutil/avstring.h"#include "libavutil/imgutils.h"#include "libavutil/timestamp.h"#include "libavutil/bprint.h"#include "libavutil/time.h"#include "libavutil/threadmessage.h"#include "libavfilter/avcodec.h"#include "libavcodec/avcodec.h"#if HAVE_SYS_RESOURCE_H#include <sys/time.h>#include <sys/types.h>#include <sys/resource.h>#elif HAVE_GETPROCESSTIMES#include <windows.h>#endif#if HAVE_GETPROCESSMEMORYINFO#include <windows.h>#include <psapi.h>#endif#if HAVE_SYS_SELECT_H#include <sys/select.h>#endif#if HAVE_TERMIOS_H#include <fcntl.h>#include <sys/ioctl.h>#include <sys/time.h>#include <termios.h>#elif HAVE_KBHIT#include <conio.h>#endif#if HAVE_PTHREADS#include <pthread.h>#endif#include <time.h>#include "libavutil/avassert.h"#define MAX_LEN  1024 * 50int main(){//下面初始化h264解碼庫//avcodec_init();av_register_all();        avcodec_register_all();/* find the video encoder */AVCodec *videoCodec = avcodec_find_encoder(CODEC_ID_H264);//得到264的編碼器類if(!videoCodec){printf("avcodec_find_decoder error\n");return -1;}/*AVCodecParserContext *avParserContext = av_parser_init(CODEC_ID_H264);//得到解析幀類,主要用於後面的幀頭尋找if(!avParserContext){printf("av_parser_init  error\n");return -1;}*/AVCodecContext *codec_ = avcodec_alloc_context3(videoCodec);//編碼會話層if(!codec_){printf("avcodec_alloc_context3  error\n");return -1;}//初始化參數,下面的參數應該由具體的業務決定codec_->time_base.num = 1;        codec_->time_base.den = 25;//幀率        codec_->gop_size = 1;        codec_->max_b_frames = 1;        codec_->thread_count = 1;        codec_->pix_fmt = PIX_FMT_YUV420P;//codec_->frame_number = 1; //每包一個視訊框架//codec_->codec_type = AVMEDIA_TYPE_VIDEO;codec_->bit_rate = 1000000;codec_->width = 720;//視頻寬codec_->height = 576;//視頻高if(avcodec_open2(codec_, videoCodec, NULL) < 0)//開啟編碼器{printf("avcodec_open2 error\n");return -1;}FILE *myH264 = fopen("t.264", "wb");if(myH264 == NULL){perror("cant open 264 file\n");return -1;}FILE *yuvfile = fopen("my264.yuv", "rb");if(yuvfile == NULL){perror("cant open YUV file\n");return -1;}        int readFileLen = 1;char readBuf[MAX_LEN];printf("readBuf address  is %x\n", readBuf);//int outbuf_size=100000;unsigned char * outbuf= malloc(outbuf_size);int u_size=0;AVPacket avpkt;unsigned char * yuv_buf= malloc(720*576*3/2);AVFrame *m_pYUVFrame=malloc(sizeof(AVFrame));int flag=0;while(1){    int len = fread(yuv_buf,720*576*3/2,1,yuvfile);    if(len<=0)     {         printf("read over\n"); break;     }     else     {         avpicture_fill((AVPicture*)m_pYUVFrame,(unsigned char *)yuv_buf,PIX_FMT_YUV420P,720,576);         int got_packet_ptr =0;         av_init_packet(&avpkt);         avpkt.data=outbuf;         avpkt.size=outbuf_size;         while(1)        {           u_size = avcodec_encode_video(codec_,outbuf,outbuf_size,m_pYUVFrame);           if(u_size>0 && u_size<100000)   {                m_pYUVFrame->pts++;                fwrite(avpkt.data,1,u_size,myH264);                flag++;                break;   }                   }     }    // if(flag>20)break;}avcodec_close(codec_);av_free(codec_);fclose(yuvfile);fclose(myH264);}


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.