ffmpeg4+OpenCV3+VS2017 H264编解码


ffmpeg4.0+OpenCV+VS2017 H264编解码示例。已经配置好环境,不需要再进行配置
资源截图
代码片段和文件信息
#include “ffmpegDecode.hpp“
#include 
#include  
#include   

using namespace cv;

void main()
{
Ffmpeg_Decoder ffmpegobj;
//图象编码
FILE *f = NULL;
char filename[100] = “1.h264“;
fopen_s(&f filename “rb“);//打开待解码文件
uchar videodata[10000];//视频数据
/**此部分用的是OpenCV读入图像对象并取得图像的数据区,也可以用别的方法获得图像数据区**/
Mat img(9601080CV_8UC3);//初始化图像
ffmpegobj.Ffmpeg_Decoder_Init(img.cols img.rows);//初始化解码器
list saveimglist;//图像队列
list emptyimglist;//空闲队列,提供预先开辟内存
uint8_t* imgdata;//图像数据区指针
for (size_t i = 0; i < 30; i++)//预先开辟30帧图像数据大小的内存空间,以供后面图像存放
{
imgdata = new uint8_t[img.rows*img.step];
emptyimglist.push_back(imgdata);
}

while (1)
{
int videodatalen = fread(videodata110000f);//数据读入
ffmpegobj.Ffmpeg_Decoder_Decode(videodatavideodatalen saveimglist emptyimglist);//解码
for (size_t i = 0; i < saveimglist.size(); i++)
{
imgdata= saveimglist.front();//获得解码完图像
saveimglist.pop_front();
memcpy(img.dataimgdata img.rows*img.step);
imshow(““img);//图像显示
waitKey(30);
emptyimglist.push_back(imgdata);//内存回归空闲队列
}
}
fclose(f);
ffmpegobj.Ffmpeg_Decoder_Close();
img.release();

for (size_t i = 0; i < saveimglist.size(); i++)//图像内存回收
{
imgdata = saveimglist.front();
delete[]imgdata;
}
for (size_t i = 0; i < emptyimglist.size(); i++)//图像内存回收
{
imgdata = emptyimglist.front(); 
delete[]imgdata;
}
}




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)