很抱歉,由于信誉不佳,我仍然无法发布我的问题的图片。
我使用ffmpeg函数将已解码的帧从YUV转换为RGB24,但颜色和结果图像严重失真。以下是我的代码片段,帧宽和高度为(176,144)
len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
if (got_picture) {
//...
AVFrame *pFrameRGB = avcodec_alloc_frame();
// Determine required buffer size and allocate buffer
int numBytes=avpicture_get_size(PIX_FMT_RGB24, c->width, c->height);
uint8_t *buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, c->width, c->height);
struct SwsContext *img_convert_ctx = sws_getContext(c->width, c->height, PIX_FMT_YUV420P, c->width, c->height, PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(img_convert_ctx, picture->data, picture->linesize, 0, picture->height, pFrameRGB->data, pFrameRGB->linesize);
sws_freeContext(img_convert_ctx);
// Save the frame to disk
if(++frame<=5)
SaveFrame(pFrameRGB, c->width, c->height, frame);
答案 0 :(得分:0)
如果我改为转换为ARGB,结果很好@@。
答案 1 :(得分:0)
也许您在意味着PIX_FMT_BGR24
时意外选择了PIX_FMT_RGB24
?
struct SwsContext *img_convert_ctx = sws_getContext(c->width, c->height,
PIX_FMT_YUV420P, c->width, c->height, PIX_FMT_RGB24, SWS_BICUBIC,
NULL, NULL, NULL);