Fffmpeg:从AVFrame中由YUV获取RGB

简介: Fffmpeg:从AVFrame中由YUV获取RGB

代码:

#define  SRC_FORMAT AV_PIX_FMT_YUV420P
#define DEST_FORMAT AV_PIX_FMT_BGR24
static        AVPicture   g_oPicture = {0};
static struct SwsContext* g_pScxt    = NULL;
void yuv2rgb(AVFrame* pFrame, uint8_t* pRgbBuffer)
{
    int width  = pFrame->width;
  int height = pFrame->height;
    if (g_pScxt == NULL)
    {
        g_pScxt = sws_getContext(width, height, SRC_FORMAT,
          width, height, DEST_FORMAT,
          SWS_POINT, NULL, NULL, NULL);
        //AVFrame需要填充,还是这个方便。 
        avpicture_alloc(&g_oPicture, DEST_FORMAT, width, height);
    }
    int num_bytes = av_image_get_buffer_size(DEST_FORMAT, width, height, 32);
    int retsws = sws_scale(g_pScxt, pFrame->data, pFrame->linesize, 0, height,
      g_oPicture.data, g_oPicture.linesize);
    //注意,RGB数据是这样复制的
  memcpy(pRgbBuffer, g_oPicture.data[0], num_bytes);
    //播放完毕后再释放。
    //avpicture_free(&g_oPicture);
    //sws_freeContext(g_pScxt);
}
目录
相关文章
|
17天前
|
存储 编解码 监控
RGB 和 YUV 区别
【10月更文挑战第26天】RGB和YUV在色彩表示原理、数据存储方式、应用场景以及转换关系等方面都存在着明显的区别,它们各自在不同的领域发挥着重要的作用。
|
存储 编解码 Android开发
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888等图像色彩编码格式区别
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888都是常见的图像颜色编码格式,它们之间的主要区别在于色彩空间和数据排列方式。
212 0
|
6月前
|
存储 编解码 算法
关于YUV视频
关于YUV视频
146 0
|
存储 数据挖掘
YUV色彩空间
本文介绍 YUV存储格式,什么是色调?什么是色饱和度?人类视觉系统是如何感知YUV的?YUV比RGB好在哪里
257 0
|
容器
yuv色彩空间和色彩范围
yuv色彩空间和色彩范围
272 0
Fffmpeg:从AVFrame中由YUV获取RGB
Fffmpeg:从AVFrame中由YUV获取RGB
174 0
YUV 与 RGB的转换
RGB 转换成 YUV Y = (0.257 * R) + (0.504 * G) + (0.
5472 0
|
编解码 芯片
|
存储 编解码 数据建模