ffmpeg之YUV420P转RGB24

这里采用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、图像上下颠倒

继续查找原因中。。。。。。。

换了一个播放器,一切正常:

 图像也没有颠倒了。

猜你喜欢

转载自blog.csdn.net/g0415shenw/article/details/82381031