我应该为*.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?
必须先解码PNG。SWS只适用于原始像素。把压缩的图形文件想象成类似于zip文件的文件。你必须先把它解压,才能看到里面是什么。通常您的浏览器或其他程序会自动为您完成此操作。您可以使用libavcodec来解压缩PNG,然后使用pix_fmt作为编解码器上下文。