用于png的ffmpeg libavcodec AVPixelFormat

时间:2014-03-21 23:22:52

标签: ffmpeg libavcodec pixelformat

我应该为* .png(PNG-24和PNG-8)图片使用AvPixelFormat的内容? 我正在尝试使用sws_scale从png转换为PIX_FMT_YUV420P

编辑,代码:

avpicture_fill((AVPicture*)m_encode_inpic, (uint8_t*)imagePixels, <WHAT PNG PIXELS FORMAT?>, m_imgInputWidth, m_imgInputHeight);                   //imagePixels is png bytes 
avpicture_fill((AVPicture*)m_encode_outpic, m_encode_outbuffer, PIX_FMT_YUV420P, m_encode_codec_context->width, m_encode_codec_context->height);

av_image_alloc(m_encode_outpic->data, m_encode_outpic->linesize, m_encode_codec_context->width, m_encode_codec_context->height, m_encode_codec_context->pix_fmt, 1);

struct SwsContext* fooContext = sws_getContext(m_videoOutputWidth, m_videoOutputHeight, PIX_FMT_RGB32, m_encode_codec_context->width, m_encode_codec_context->height, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL);
sws_scale(fooContext, m_encode_inpic->data, m_encode_inpic->linesize, 0, m_encode_codec_context->height, m_encode_outpic->data, m_encode_outpic->linesize);   

Jpeg像素格式为AV_PIX_FMT_YUVJ420P,但PNG的格式是什么?

1 个答案:

答案 0 :(得分:2)

您必须先解码PNG。 SWS仅适用于原始像素。想象一下压缩的图形文件,就像一个zip文件。您必须先解压缩它,然后才能看到内部的内容。通常您的浏览器或其他程序会自动为您执行此操作。您可以使用libavcodec解压缩PNG,然后使用pix_fmt形成编解码器上下文。