jpg2avframe
【摘要】 https://stackoverflow.com/questions/3527584/ffmpeg-jpeg-file-to-avframe
AVFrame* OpenImage(const char* imageFileName){ AVFormatContext *pFormatCtx; if(av_open_input_file(&pFormatCtx, ...
https://stackoverflow.com/questions/3527584/ffmpeg-jpeg-file-to-avframe
-
AVFrame* OpenImage(const char* imageFileName)
-
{
-
AVFormatContext *pFormatCtx;
-
-
if(av_open_input_file(&pFormatCtx, imageFileName, NULL, 0, NULL)!=0)
-
{
-
printf("Can't open image file '%s'\n", imageFileName);
-
return NULL;
-
}
-
-
dump_format(pFormatCtx, 0, imageFileName, false);
-
-
AVCodecContext *pCodecCtx;
-
-
pCodecCtx = pFormatCtx->streams[0]->codec;
-
pCodecCtx->width = W_VIDEO;
-
pCodecCtx->height = H_VIDEO;
-
pCodecCtx->pix_fmt = PIX_FMT_YUV420P;
-
-
// Find the decoder for the video stream
-
AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
-
if (!pCodec)
-
{
-
printf("Codec not found\n");
-
return NULL;
-
}
-
-
// Open codec
-
if(avcodec_open(pCodecCtx, pCodec)<0)
-
{
-
printf("Could not open codec\n");
-
return NULL;
-
}
-
-
//
-
AVFrame *pFrame;
-
-
pFrame = avcodec_alloc_frame();
-
-
if (!pFrame)
-
{
-
printf("Can't allocate memory for AVFrame\n");
-
return NULL;
-
}
-
-
int frameFinished;
-
int numBytes;
-
-
// Determine required buffer size and allocate buffer
-
numBytes = avpicture_get_size(PIX_FMT_YUVJ420P, pCodecCtx->width, pCodecCtx->height);
-
uint8_t *buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
-
-
avpicture_fill((AVPicture *) pFrame, buffer, PIX_FMT_YUVJ420P, pCodecCtx->width, pCodecCtx->height);
-
-
// Read frame
-
-
AVPacket packet;
-
-
int framesNumber = 0;
-
while (av_read_frame(pFormatCtx, &packet) >= 0)
-
{
-
if(packet.stream_index != 0)
-
continue;
-
-
int ret = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
-
if (ret > 0)
-
{
-
printf("Frame is decoded, size %d\n", ret);
-
pFrame->quality = 4;
-
return pFrame;
-
}
-
else
-
printf("Error [%d] while decoding frame: %s\n", ret, strerror(AVERROR(ret)));
-
}
-
}
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/87276790
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)