我正在尝试使用 libswscale 将 YUV 帧转换为 RGB。
这是我的代码:
AVFrame *RGBFrame;
SwsContext *ConversionContext;
ConversionContext = sws_getCachedContext(NULL, FrameWidth, FrameHeight, AV_PIX_FMT_YUV420P, FrameWidth, FrameHeight, AV_PIX_FMT_RGB24, SWS_BILINEAR, 0, 0, 0);
RGBFrame = av_frame_alloc();
avpicture_fill((AVPicture *)RGBFrame, &FillVect[0], AV_PIX_FMT_RGB24, FrameWidth, FrameHeight);
sws_scale(ConversionContext, VideoFrame->data, VideoFrame->linesize, 0, 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、U、V 数据分离为 RGB24 的数组转换为 RGB24。
请帮助我,谢谢:)