专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并
2019-07-12 23:22
发布
生成海报
站内文章
/
嵌入式Linux
12851
0
995
编译命令:arm-linux-gcc -o show2642 264showyuv2.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 "/usr/local/ffmpeg_arm/include/SDL/SDL.h"
#include "libavfilter/avcodec.h"
#include "libavcodec/avcodec.h"
#if HAVE_SYS_RESOURCE_H
#include
#include
#include
#elif HAVE_GETPROCESSTIMES
#include
#endif
#if HAVE_GETPROCESSMEMORYINFO
#include
#include
#endif
http://blog.sina.com.cn/s/blog_163f91c5e0102wnyx.html
http://blog.sina.com.cn/s/blog_14d8952290102wii0.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd1v.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd1x.html
http://blog.sina.com.cn/s/blog_14d8952290102wii4.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd20.html
http://tieba.baidu.com/p/4665234070
http://tieba.baidu.com/p/4667230793
http://tieba.baidu.com/p/4667235501
int
w = 720;
int
h = 576,retu;
SDL_Rect rect;
av_register_all();
AVFrame *pFrame_ = NULL;
/* find the video encoder */
AVCodec *videoCodec = avcodec_find_decoder(CODEC_ID_H264);
//得到264的解码器类
if
(!videoCodec)
{
printf(
"avcodec_find_decoder error "
);
return
-1;
}
AVCodecParserContext *avParserContext = av_parser_init(CODEC_ID_H264);
//得到解析帧类,主要用于后面的帧头查找
if
(!avParserContext)
{
printf(
"av_parser_init error "
);
return
-1;
}
AVCodecContext *codec_ = avcodec_alloc_context3(videoCodec);
//解码会话层
if
(!codec_)
{
printf(
"avcodec_alloc_context3 error "
);
return
-1;
}
//初始化参数,下面的参数应该由具体的业务决定
codec_->time_base.num = 1;
codec_->frame_number = 1;
//每包一个视频帧
codec_->codec_type = AVMEDIA_TYPE_VIDEO;
codec_->bit_rate = 0;
codec_->time_base.den = 25;
//帧率
codec_->width = 720;
//视频宽
codec_->height = 576;
//视频高
if
(avcodec_open2(codec_, videoCodec, NULL) >= 0)
//打开解码器
{
http://blog.sina.com.cn/s/blog_163f91c5e0102wnyx.html
http://blog.sina.com.cn/s/blog_14d8952290102wii0.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd1v.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd1x.html
http://blog.sina.com.cn/s/blog_14d8952290102wii4.html
http://blog.sina.com.cn/s/blog_15e1433c30102wd20.html
http://tieba.baidu.com/p/4665234070
http://tieba.baidu.com/p/4667230793
http://tieba.baidu.com/p/4667235501
AVPacket packet = {0};
int
dwBufsize = 10;
int
frameFinished = dwBufsize;
//这个是随便填入数字,没什么作用
av_init_packet(&packet);
packet.data = NULL;
//这里填入一个指向完整H264数据帧的指针
packet.size = 0;
//这个填入H264数据帧的大小
FILE
*myH264 = fopen(
"1.264"
,
"rb"
);
//解码的文件264
if
(myH264 == NULL)
{
perror(
"cant open 264 file "
);
return
-1;
}
FILE
*yuvfile = fopen(
"my264.yuv"
,
"wb"
);
//成功解码后保存成的YUV文件, 可以用YUV工具打开浏览
if
(yuvfile == NULL)
{
perror(
"cant open YUV file "
);
return
-1;
}
Ta的文章
更多
>>
嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并
0 个评论
Android程序运行分析——中等复杂程度的NTAG I2C Demo为例(二)
0 个评论
内电层与内电层分割-基于AltiumDesigner
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮