TAG:
struct AVFrame
(zzcqh){ uint8_t *data[4];分别指向yuv三个位面及一个未知的位面或者是rgb模式下只有data[0]指向raw data int linesize[4];四个位面分别的内存块大小 } AVFrame *avcodec_alloc_frame() //Allocates an AVFrame and sets its fields to default values 初始化的时候AVFrame中的元素data,linesize均为空。未指向任何内存数据 avcodec_decode_video()// Decodes a video frame from \p buf into \p picture. * The avcodec_decode_video() function decodes a video frame from the input * buffer \p buf of size \p buf_size. 对从文件中读取的包进行解码,将解码后的yuv数据填充在 AVFrame的 data及linesize的字段内。而且经过打印发现从始至终 AVFrame一直在两组数据中间1:1变动。说明 AVFrame始终指向一块内存数据,这块内存数据有可能由avcodec_decode_video()函数内部负责去申请,然后在解码结束之后自动释 放。 这也说明了为什么在yuv转rgb的时候需要自己去申请一块内存空间并将其绑定在AVFrame上,有可能因为 sws_scale()并不会自动帮用户去申请内存空间,所以为了获取转化之后的RGB数据则需要自动去申请内存使用。 sws_scale()负责图像数据的缩放及尺寸的变法 比如: yuv420-->yuv444 CIF -> QCIF QCIF-->CIF等 |