NV12 to RGB

NV12 to RGBtypedefunsignedcharUINT8;typedefunsignedintUINT32;staticUINT8RTable[256][256];staticUINT8GTable[256][256][256];staticUINT8BTable[256][256];staticvoidNV12_T_RGB_Table(){inty,u,v,res;for(y=0;y<=255;y++).

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

typedef unsigned char UINT8;
typedef unsigned int UINT32;

static UINT8 RTable[256][256];
static UINT8 GTable[256][256][256];
static UINT8 BTable[256][256];

static void NV12_T_RGB_Table()
{
    int y, u, v, res;
    for (y = 0; y <= 255; y++)
        for (v = 0; v <= 255; v++)
        {
            res = y + 1.402 * (v - 128);  //r
            if (res > 255)	res = 255;
            if (res < 0)	res = 0;
            RTable[y][v] = res;
        }

    for(y = 0; y <= 255; y++)
        for(u = 0; u <= 255; u++)
            for (v = 0; v <= 255; v++)
            {
                res = y - 0.34414 *(u - 128) - 0.71414 * (v - 128); //g
                if (res > 255)	res = 255;
                if (res < 0)	res = 0;
                GTable[y][u][v] = res;
            }

    for(y = 0; y <= 255; y++)
        for (u = 0; u <= 255; u++)
        {
            res = y + 1.772 * (u - 128); //b
            if (res > 255)	res = 255;
            if (res < 0)	res = 0;
            BTable[y][u] = res;
        }
}

static void NV12_T_BGR(unsigned int width, unsigned int height, unsigned char *yuyv, unsigned char *rgb)
{
    const int nv_start = width * height;
    UINT32  i, j, index = 0, rgb_index = 0;
    UINT8 y, u, v;
    int r, g, b, nv_index = 0;


    for (i = 0; i < height; i++)
    {
        for (j = 0; j < width; j++) {
            //nv_index = (rgb_index / 2 - width / 2 * ((i + 1) / 2)) * 2;
            nv_index = (i >> 1) * width + j - j % 2;

            y = yuyv[rgb_index];
            u = yuyv[nv_start + nv_index];
            v = yuyv[nv_start + nv_index + 1];

            r = RTable[y][v];
            g = GTable[y][u][v];
            b = BTable[y][u];

            //index = rgb_index % width + (height - i - 1) * width;
            index = rgb_index % width + i * width;
            rgb[index * 3 + 0] = b;
            rgb[index * 3 + 1] = g;
            rgb[index * 3 + 2] = r;
            rgb_index++;
        }
    }
}

static void NV12_T_RGB(unsigned int width, unsigned int height, unsigned char *yuyv, unsigned char *rgb)
{
    const int nv_start = width * height;
    UINT32  i, j, index = 0, rgb_index = 0;
    UINT8 y, u, v;
    int r, g, b, nv_index = 0;


    for (i = 0; i < height; i++)
    {
        for (j = 0; j < width; j++) {
            //nv_index = (rgb_index / 2 - width / 2 * ((i + 1) / 2)) * 2;
            nv_index = (i >> 1) * width + j - j % 2;

            y = yuyv[rgb_index];
            u = yuyv[nv_start + nv_index];
            v = yuyv[nv_start + nv_index + 1];

            r = RTable[y][v];
            g = GTable[y][u][v];
            b = BTable[y][u];

            //index = rgb_index % width + (height - i - 1) * width;
            index = rgb_index % width + i * width;
            rgb[index * 3 + 0] = r;
            rgb[index * 3 + 1] = g;
            rgb[index * 3 + 2] = b;
            rgb_index++;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194090.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月12日 下午6:22
下一篇 2025年11月12日 下午7:01


相关推荐

  • 各个版本Microsoft Visual C++运行库下载

    各个版本Microsoft Visual C++运行库下载各个版本MicrosoftVisualC++运行库下载MicrosoftVisualC++2005MicrosoftVisualC++2005RedistributablePackage(x86)https://www.microsoft.com/zh-cn/download/details.aspx?id=3387MicrosoftVisualC++2…

    2022年7月20日
    19
  • 文心新模型ERNIE-5.0-Preview-1203登LMArena文本榜 国内排名第一

    文心新模型ERNIE-5.0-Preview-1203登LMArena文本榜 国内排名第一

    2026年3月12日
    3
  • 普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式…

    普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式…前言本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台。本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念也会精炼出提及下。系列主要分为以下几块Prometheus各个概念介绍和搭建,如何抓取数据(一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起)如何推送数据…

    2022年7月19日
    26
  • 黑盒测试 场景法_黑盒测试方法定义

    黑盒测试 场景法_黑盒测试方法定义通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果。场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。  为什么场景法能如此清晰的描述整个事件?因为,现在的系统基本上都是由事件来触发控制流程的。如:我们申请一个项目,需先提交审批单据,再由部门经理审批,审核通过后由总经理来最终审批,如果部门经理审核不通过

    2026年4月15日
    6
  • 安卓反编译_反编译apk工具

    安卓反编译_反编译apk工具刚刷了自己的小U(下次分享刷机经验),准备美化一下系统,这时需要对framework-res.apk进行编译和反编译,我也是边学习边实践,这里仅作分享。1、安装Java环境JDK↑Android是基于Linux的,而要在安卓上开发,基本上依靠Java为主。因为我们接下来要用到apktool,因此必须安装JDK。注意,JDK和Java环境不同,JDK是开发工具,你可以直接在Java官网下载,并能找…

    2026年1月15日
    5
  • Laravel5性能优化技巧

    Laravel5性能优化技巧

    2022年3月8日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号