我想使用ffmpeg的func —> sws_scale()来调整图片大小.
有没有人知道该怎么做?
你有这个功能的源代码?
解决方法
首先你需要创建一个SwsContext(你只需要做一次):
struct SwsContext *resize; resize = sws_getContext(width1,height1,AV_PIX_FMT_YUV420P,width2,height2,PIX_FMT_RGB24,SWS_BICUBIC,NULL,NULL);
您需要两个帧进行转换,frame1是原始帧,需要明确分配frame2:
AVFrame* frame1 = avcodec_alloc_frame(); // this is your original frame AVFrame* frame2 = avcodec_alloc_frame(); int num_bytes = avpicture_get_size(AV_PIX_FMT_RGB24,height2); uint8_t* frame2_buffer = (uint8_t *)av_malloc(num_bytes*sizeof(uint8_t)); avpicture_fill((AVPicture*)frame2,frame2_buffer,AV_PIX_FMT_RGB24,height2);
如果您需要调整每个框架的大小,您可以在循环中使用此部分:
// frame1 should be filled by now (eg using avcodec_decode_video) sws_scale(resize,frame1->data,frame1->linesize,frame2->data,frame2->linesize);
请注意,我也更改了像素格式,但您可以对两个框架使用相同的像素格式
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。