Я пытаюсь преобразовать рамки RGB в формат YUV420P в ffmpeg/libav. Ниже приведен код преобразования, а также изображения до и после преобразования. Преобразованное изображение теряет всю информацию о цвете, а также значительно изменяет масштаб. Кто-нибудь знает, как с этим справиться? Я совершенно не знаком с ffmpeg/libav!ffmpeg: преобразование RGB в YUV теряет цвет и масштаб
// Did we get a video frame?
if(frameFinished)
{
i++;
sws_scale(img_convert_ctx, (const uint8_t * const *)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height,
pFrameRGB->data, pFrameRGB->linesize);
//==============================================================
AVFrame *pFrameYUV = avcodec_alloc_frame();
// Determine required buffer size and allocate buffer
int numBytes2 = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
uint8_t *buffer = (uint8_t *)av_malloc(numBytes2*sizeof(uint8_t));
avpicture_fill((AVPicture *)pFrameYUV, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
rgb_to_yuv_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
PIX_FMT_RGB24,
pCodecCtx->width,pCodecCtx->height,
PIX_FMT_RGB24,
SWS_BICUBIC, NULL,NULL,NULL);
sws_scale(rgb_to_yuv_ctx, pFrameRGB->data, pFrameRGB->linesize, 0,
pCodecCtx->height, pFrameYUV->data, pFrameYUV->linesize);
sws_freeContext(rgb_to_yuv_ctx);
SaveFrame(pFrameYUV, pCodecCtx->width, pCodecCtx->height, i);
av_free(buffer);
av_free(pFrameYUV);
}
Эти изображения похожи на мои, я делаю rgb2yuv и обратно вручную, а изображение b & w - это именно то, что я вижу при открытии его в GIMP, но данные верны, это то же самое, что и моя камера, может быть, просто проблема предварительного просмотра? Можете ли вы проверить данные другим способом? – tomasb