資源簡介
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? {
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? {
imgdata?=?saveimglist.front();
delete[]imgdata;
}
for?(size_t?i?=?0;?i? {
imgdata?=?emptyimglist.front();?
delete[]imgdata;
}
}
評論
共有 條評論