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