guanxiangyu1982 2022-11-11 09:58 采纳率: 0%
浏览 5
已结题

如何将FFMpeg获取的AVFrame转化为UIImage

如何将FFMpeg获取的AVFrame转化为UIImage

以下方法可以用AVPicture来转,但是现在AVPicture已经弃用

  • (UIImage*)imageFromAVFrame:(AVFrame *)avFrame
    {
    float width = avFrame->width;
    float height = avFrame->height;
    avpicture_free(&avPicture);
    avpicture_alloc(&avPicture, AV_PIX_FMT_RGB24, width, height); struct SwsContext * imgConvertCtx = sws_getContext(avFrame->width,
                                                     avFrame->height,
                                                     PIX_FMT_YUV420P,
                                                     width,
                                                     height,
                                                     AV_PIX_FMT_RGB24,
                                                     SWS_FAST_BILINEAR,
                                                     NULL,
                                                     NULL,
                                                     NULL);
    
    if(imgConvertCtx == nil) return nil; sws_scale(imgConvertCtx,
            avFrame->data,
            avFrame->linesize,
            0,
            avFrame->height,
            avPicture.data,
            avPicture.linesize);
    
    sws_freeContext(imgConvertCtx); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CFDataRef data = CFDataCreate(kCFAllocatorDefault,
                                               avPicture.data[0],
                                               avPicture.linesize[0] * height);
    
    CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGImageRef cgImage = CGImageCreate(width,
                                     height,
                                     8,
                                     24,
                                     avPicture.linesize[0],
                                     colorSpace,
                                     bitmapInfo,
                                     provider,
                                     NULL,
                                     NO,
                                     kCGRenderingIntentDefault);
    
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    CGColorSpaceRelease(colorSpace);
    CGDataProviderRelease(provider);
    CFRelease(data); return image;
    }
清问如何在弃用AVPicture的情况下将AVFrame转化为UIImage
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月19日
    • 创建了问题 11月11日

    悬赏问题

    • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
    • ¥15 qt6.6.3 基于百度云的语音识别 不会改
    • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
    • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
    • ¥15 lingo18勾选global solver求解使用的算法
    • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
    • ¥20 测距传感器数据手册i2c
    • ¥15 RPA正常跑,cmd输入cookies跑不出来
    • ¥15 求帮我调试一下freefem代码
    • ¥15 matlab代码解决,怎么运行