通过对FFmpeg的基本了解,我们知道可以通过利用其so库文件,输出YUV图像到文件,而解码后的图像(YUV)数据是存放在AVFrame结构体中的。
第一部分我们就来了解下结构体AVFrame,源代码在 libavutil/frame.h中,
运行输出YUV文件的解码程序对某媒体文件进行解码,在输出第一帧图像后,pFrame(为AVFrame结构的变量)见下图:
其中主要的变量包括:
uint8_t *data[AV_NUM_DATA_POINTERS]:指针数组,存放YUV数据的地方。如图所示,一般占用前3个指针,分别指向Y,U,V数据。
int linesize[AV_NUM_DATA_POINTERS]:图像各个分量数据在此结构体中的的宽度。注意这并不是图像的宽度。在此例子中图像的尺寸为672X272,而亮度分量的宽度为704,应该是图像宽度经过64对齐后的结果。
uint8_t **extended_data:指向了图像数据。
int width, height:图像的宽高。
int nb_samples:此帧音频的点数。
int format:像素类型(视频),样点类型(音频)
int key_frame:是否关键帧,此例中为视频的第一帧,当然是关键帧了。
enum AVPictureType