avcodec YUV a RGB
Estoy tratando de convertir un marco YUV a RGB usando libswscale.
Aquí está mi código:
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);
Mi programa hace SEGFAULT en la función sws_scale.
VideoFrame es una estructura AVFrame que contiene mi marco decodificado.
Creo que esto se debe a que el marco YUV proviene de avcodec_decode_video2, que devuelve una matriz como esta:
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
Mientras que YUV420P tiene teóricamente solo un plano (según Wikipedia, YUV420P es un formato plano, entonces los datos Y, U, V se agrupan). Entonces, no sé cómo convertir mi matriz donde los datos Y, U, V se separan en RGB24, usando swscale.
Por favor ayudame, gracias :)