avcodec YUV zu RGB

Ich versuche, einen YUV-Frame mit libswscale in RGB umzuwandeln.

Hier ist mein Code:

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);

Mein Programm führt SEGFAULT für die Funktion sws_scale aus.

VideoFrame ist eine AVFrame-Struktur, die meinen decodierten Frame enthält.

Ich denke, das liegt daran, dass der YUV-Frame von avcodec_decode_video2 stammt und ein Array wie das folgende zurückgibt:

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

Während YUV420P theoretisch nur eine Ebene hat (laut Wikipedia ist YUV420P ein planares Format, dann werden Y-, U- und V-Daten zusammen gruppiert). Daher weiß ich nicht, wie ich mit der Konvertierung meines Arrays fortfahren soll, bei dem Y-, U- und V-Daten mit swscale in RGB24 getrennt werden.

Bitte hilf mir, danke :)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage