同上面所写的两篇文章,本篇依然是介绍FFmpge的相关操作,前一篇讲的是视频压缩,本篇则相反的讲视频的解码。废话不多说,直接上代码吧。
同理于上篇,本篇先设计一个视频解码相关的类,定义如下:
class Ffmpeg_Decoder
{
public:
AVCodecParserContext *avParserContext;
AVPacket avpkt; //数据包结构体
AVFrame *m_pRGBFrame; //帧对象
AVFrame *m_pYUVFrame; //帧对象
AVCodec *pCodecH264; //解码器
AVCodecContext *c; //解码器数据结构对象
uint8_t *yuv_buff; //yuv图像数据区
uint8_t *rgb_buff; //rgb图像数据区
SwsContext *scxt; //图像格式转换对象
uint8_t *filebuf; //读入文件缓存
uint8_t *outbuf; //解码出来视频数据缓存
int nDataLen; //rgb图像数据区长度
IplImage* img; //OpenCV图像显示对象
uint8_t *pbuf; //用以存放帧数据
int nOutSize; //用以记录帧数据长度
int haveread;