这里采用SwsContext来实现。
第一步,创建一个转换的
sws_context = sws_getContext(frame->width, frame->height, AV_PIX_FMT_YUV420P, frame->width, frame->height, AV_PIX_FMT_RGB24, SWS_BILINEAR, 0, 0, 0);
第二步,开始转换
创建目的结构:
rgbFrame = av_frame_alloc();
if (NULL == rgbFrame)
{
return false;
}
rgbFrame->height = frame->height;
rgbFrame->width = frame->width;
rgbFrame->format = AV_PIX_FMT_RGB24;
if (av_frame_get_buffer(rgbFrame, 0)<0)
{
fprintf(stderr, "Could not allocate audio data buffers\n");
av_frame_free(&rgbFrame);
rgbFrame = NULL;
return false;
}
转换实现:
sws_scale(sws_context, frame->data, frame->linesize,0, frame->height, rgbFrame->data, rgbFrame->linesize);
通过这种方式,存在两个问题如下图:
1、图像失真
2、图像上下颠倒
继续查找原因中。。。。。。。
换了一个播放器,一切正常: