QImage下 rgb32 转为 yuv420

    //qWarning() << "update";
    QPixmap pixmap = this->grab();
    QImage image = pixmap.toImage();
    //qWarning() << "byteCount " << image.byteCount();
//    BYTE * rgb = new BYTE[bufsize];
//    BYTE * yuv = new BYTE[bufsize * 3 / 2];
//    RGB2YUV(&pStream, &yuv, 4, 640, 480)
    int w = image.width();
    int h = image.height();
   // image.invertPixels(QImage::InvertRgb);
    //==============================================================
    AVFrame *pFrameRGB = avcodec_alloc_frame();
    // Determine required buffer size and allocate buffer
    int numBytes1 = avpicture_get_size(PIX_FMT_RGB32, w, h);
    uint8_t *buffer1 = (uint8_t *)av_malloc(numBytes1*sizeof(uint8_t));
    avpicture_fill((AVPicture *)pFrameRGB, buffer1, PIX_FMT_RGB32, w, h);
    pFrameRGB->data[0] = image.bits();
    qWarning() << "numBytes1 " << numBytes1;
    AVFrame *pFrameYUV = avcodec_alloc_frame();
    // Determine required buffer size and allocate buffer
    int numBytes2 = avpicture_get_size(AV_PIX_FMT_YUV420P, w, h);
    uint8_t *buffer2 = (uint8_t *)av_malloc(numBytes2*sizeof(uint8_t));
    avpicture_fill((AVPicture *)pFrameYUV, buffer2, AV_PIX_FMT_YUV420P, w, h);
    qWarning() << "numBytes2 " << numBytes2;
    SwsContext *  rgb_to_yuv_ctx = sws_getContext(w,h, PIX_FMT_RGB32,
                                  w,h, AV_PIX_FMT_YUV420P,
                                  SWS_BICUBIC, NULL,NULL,NULL);
//    sws_scale(rgb_to_yuv_ctx, pFrameRGB->data, pFrameRGB->linesize, 0,
//            pCodecCtx->height, pFrameYUV->data, pFrameYUV->linesize);
    sws_scale(rgb_to_yuv_ctx, pFrameRGB->data, pFrameRGB->linesize, 0,
                h, pFrameYUV->data, pFrameYUV->linesize);
    ////
    int rc = LE_ESVideoData(instance, buffer2, numBytes2);
    //qWarning() << rc << endl;
    sws_freeContext(rgb_to_yuv_ctx);
    av_free(buffer1);
    av_free(buffer2);
    av_free(pFrameRGB);
    av_free(pFrameYUV);

时间: 2025-01-02 14:04:12

QImage下 rgb32 转为 yuv420的相关文章

spark下dataframe转为rdd格式

dataframe可以实现很多操作,但是存储到本地的时候,只能存 parquest格式 需要存储源格式,需要转换为rdd类型 将dataframe中的每一行都map成有逗号相连的string,就变为了一个rdd

如何将内存图像数据封装成QImage

博客转载自:https://blog.csdn.net/lg1259156776/article/details/52318638 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像处理功能来进行图像处理,并能很好的进行显示.下面以灰度相机为例,介绍封装方法: 第一步:首先根据相机的SDK内的读图像函数,获取图像数据imgData.宽度imgWidth和高度imHeight. 第二步:

gulp源码解析(二)—— vinyl-fs

在上一篇文章我们对 Stream 的特性及其接口进行了介绍,gulp 之所以在性能上好于 grunt,主要是因为有了 Stream 助力来做数据的传输和处理. 那么我们不难猜想出,在 gulp 的任务中,gulp.src 接口将匹配到的文件转化为可读(或 Duplex/Transform)流,通过 .pipe 流经各插件进行处理,最终推送给 gulp.dest 所生成的可写(或 Duplex/Transform)流并生成文件. 本文将追踪 gulp(v4.0)的源码,对上述猜想进行验证. 为了分

Github上的PHP资源汇总大全

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers:  一个多框架Composer库安装器 Pickle: 可以在任意平台上安装PHP扩展包 依赖管理的附加部分 ——其它依赖管理的相关工具 Satis : 静态的Composer库生成器 Composition: 一个运行时检查Composer环境的库 Version : 一个在语义上分析和比较的库 NameSpacer : 将下划线转为命名空间的库 Patc

Github上的PHP开源资源汇总

依赖管理 --用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers:  一个多框架Composer库安装器 Pickle: 可以在任意平台上安装PHP扩展包 依赖管理的附加部分 --其它依赖管理的相关工具 Satis : 静态的Composer库生成器 Composition: 一个运行时检查Composer环境的库 Version : 一个在语义上分析和比较的库 NameSpacer : 将下划线转为命名空间的库 Patc

Scrum使用心得 【转】

原文链接: http://blog.sina.com.cn/s/blog_58db96bc0100ymuk.html 1      Scrum管理模式和传统管理模式的区别 这些管理模式本质上目的相同:驱动执行者,实现决策者的目标. 个人观点:表面上看来Scrum是以团队为中心的开发模式,实际上是一种更高技巧的管理方式,对管理者.决策者的要求更高. 1.1       差异分析 最大的差异在于执行阶段:Scrum是一种自下而上-自觉的管理模式,强调团队;传统管理模式大多是自上而下-命令的管理模式,

nginx实例解析

常用nginx rewrite重定向-跳转实例: 1,将www.myweb.com/connect 跳转到connect.myweb.com rewrite ^/connect$ http://connect.myweb.com permanent; rewrite ^/connect/(.*)$ http://connect.myweb.com/$1 permanent; 2,将connect.myweb.com 301跳转到www.myweb.com/connect/ if ($host =

Github上的资源清单

依赖管理——用于依赖管理的包和框架Composer/Packagist : 一个包和依赖管理器Composer Installers:  一个多框架Composer库安装器Pickle: 可以在任意平台上安装PHP扩展包 依赖管理的附加部分——其它依赖管理的相关工具Satis : 静态的Composer库生成器Composition: 一个运行时检查Composer环境的库Version : 一个在语义上分析和比较的库NameSpacer : 将下划线转为命名空间的库Patch Installe

用JdbcTemplateTool配合JdbcTemplate实现更便捷的数据库操作

JdbcTemplateTool Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的.但是 JdbcTemplate还是有很多不足之处或者说是缺点.比如你没法像hibernate那样直接传一个对象给它让他拆分成sql并保存起来,当然这也是可以理解的,毕竟它并没有要求你去写 hbm.xml 文件所以无法知道你哪些字段要映射,哪些不要等等.又比如JdbcTemplate 可以帮忙把一个查询结果传化为一