1 int avpicture_fill(AVPicture *picture, uint8_t *ptr,
int pix_fmt, int width, int height);
这个函数的使用本质上是为已经分配的空间的结构体AVPicture挂上一段用于保存数据的空间,这个结构体中有一个指针数组data[4],挂在这个数组里。一般我们这么使用:
1) pFrameRGB=avcodec_alloc_frame();
2) numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height);
buffer=(uint8_t )av_malloc(numBytessizeof(uint8_t));
3) avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,pCodecCtx->width, pCodecCtx- >height);
以上就是为pFrameRGB挂上buffer。这个buffer是用于存缓冲数据的。
好,现在让我们来看一下tutorials里常出现的pFrame为什么不用fill空间。主要是下面这句:
avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,packet.data, packet.size);
这里根据我的瞎猜,很可能是pFrame已经挂上了packet.data,所以就不用fill了。
2 现在开始谈ffmpeg里的一些设备上下文,关于设备上下文,回顾一下它的定义:
Windows操作系统统一管理着诸如显示,打印等操作,将它们看作是一个个的设备,每一个设备都有一个复杂的数据结构来维护
ffmpeg avpicture_fill用法
最新推荐文章于 2023-04-04 15:41:08 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)