加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – avcodec YUV到RGB

发布时间:2020-12-16 07:09:23 所属栏目:百科 来源:网络整理
导读:我正在尝试使用libswscale将YUV帧转换为RGB. 这是我的代码: AVFrame *RGBFrame;SwsContext *ConversionContext;ConversionContext = sws_getCachedContext(NULL,FrameWidth,FrameHeight,AV_PIX_FMT_YUV420P,AV_PIX_FMT_RGB24,SWS_BILINEAR,0);RGBFrame = av
我正在尝试使用libswscale将YUV帧转换为RGB.

这是我的代码:

AVFrame *RGBFrame;
SwsContext *ConversionContext;

ConversionContext = sws_getCachedContext(NULL,FrameWidth,FrameHeight,AV_PIX_FMT_YUV420P,AV_PIX_FMT_RGB24,SWS_BILINEAR,0);
RGBFrame = av_frame_alloc();

avpicture_fill((AVPicture *)RGBFrame,&FillVect[0],FrameHeight);

sws_scale(ConversionContext,VideoFrame->data,VideoFrame->linesize,VideoFrame->height,RGBFrame->data,RGBFrame->linesize);

我的程序在sws_scale函数上执行SEGFAULT.

VideoFrame是一个AVFrame结构,它保存我的解码帧.

我认为这是因为YUV帧来自avcodec_decode_video2,它返回一个如下数组:

VideoFrame->data[0] // Y array,linesize = frame width
VideoFrame->data[1] // U array,linesize = frame width/2
VideoFrame->data[2] // V array,linesize = frame width/2

虽然YUV420P理论上只有一个平面(根据维基百科,YUV420P是平面格式,然后Y,U,V数据被组合在一起).
所以,我不知道如何使用swscale转换我的数组,其中Y,V数据被分成RGB24.

请帮帮我,谢谢:)

解决方法

av_frame_alloc仅为帧对象本身分配内存,它不分配内存来存储图像数据.你完成了吗:

FillVect.resize(avpicture_get_size(PIX_FMT_RGB24,FrameHeight));

在调用avpicture_fill之前,代码中的某个地方?或者其他一些方法来确保FillVect分配足够的内存来保存整个解码图片?

您是否尝试在valgrind下运行它以查看究竟是什么触发了SEGFAULT?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读