在大四保研时,接到了一个任务,从最底层书写AVI格式的解封装,并提取YUV数据,再由公式计算对应值。
依稀记得那是一个10bit的avi超大视频,编码是m102和另一个种(保密),因为是从底层写起,所以并没有想太多,就用最基本的的c语言一句一句完成,后来还遇到很多Bug.
听雷博士(http://blog.youkuaiyun.com/leixiaohua1020)介绍了关于他关于ffmpeg的研究后,打算尝试着玩玩ffmpeg这个东东。以下代码是来之雷博士小学期课程的公开代码。我对其作了部分注释,如有错误,请指出~
#include <stdio.h>
#define __STDC_CONSTANT_MACROS
extern "C" //由于ffmpeng是c为底层语言,所以c++调用时,需要去掉函数类型
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
};
int main(int argc, char* argv[])
{
AVFormatContext *pFormatCtx;//视频格式内容,最大的一个结构体
int i, videoindex;
AVCodecContext *pCodecCtx;//解码器上下文
AVCodec *pCodec;//解码器
AVFrame *pFrame,*pFrameYUV;//一帧画面
uint8_t *out_buffer;
AVPacket *packet;//h.264由多个packet包组成
int y_size;
int ret, got_picture;