資源簡介
ffmpeg4.0+OpenCV+VS2017 H264編解碼示例。已經(jīng)配置好環(huán)境,不需要再進行配置
代碼片段和文件信息
#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];//視頻數(shù)據(jù)
/**此部分用的是OpenCV讀入圖像對象并取得圖像的數(shù)據(jù)區(qū),也可以用別的方法獲得圖像數(shù)據(jù)區(qū)**/
Mat?img(9601080CV_8UC3);//初始化圖像
ffmpegobj.Ffmpeg_Decoder_Init(img.cols?img.rows);//初始化解碼器
list?saveimglist;//圖像隊列
list?emptyimglist;//空閑隊列,提供預(yù)先開辟內(nèi)存
uint8_t*?imgdata;//圖像數(shù)據(jù)區(qū)指針
for?(size_t?i?=?0;?i?30;?i++)//預(yù)先開辟30幀圖像數(shù)據(jù)大小的內(nèi)存空間,以供后面圖像存放
{
imgdata?=?new?uint8_t[img.rows*img.step];
emptyimglist.push_back(imgdata);
}
while?(1)
{
int?videodatalen?=?fread(videodata110000f);//數(shù)據(jù)讀入
ffmpegobj.Ffmpeg_Decoder_Decode(videodatavideodatalen?saveimglist?emptyimglist);//解碼
for?(size_t?i?=?0;?i? {
imgdata=?saveimglist.front();//獲得解碼完圖像
saveimglist.pop_front();
memcpy(img.dataimgdata?img.rows*img.step);
imshow(““img);//圖像顯示
waitKey(30);
emptyimglist.push_back(imgdata);//內(nèi)存回歸空閑隊列
}
}
fclose(f);
ffmpegobj.Ffmpeg_Decoder_Close();
img.release();
for?(size_t?i?=?0;?i? {
imgdata?=?saveimglist.front();
delete[]imgdata;
}
for?(size_t?i?=?0;?i? {
imgdata?=?emptyimglist.front();?
delete[]imgdata;
}
}
評論
共有 條評論