android nv21 nv12,直接进行nv21或者nv12的resize「建议收藏」

android nv21 nv12,直接进行nv21或者nv12的resize「建议收藏」直接对nv21的数据进行resize。这是之前项目组遗留的一段代码改过来的。结果不太好。voidScaler::Resize_NV(constBuffer*src,Buffer*dst){//thisfunctionhavesomeproblemif(src->width==dst->width&&src->height==dst-…

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

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

直接对nv21的数据进行resize。

这是之前项目组遗留的一段代码改过来的。结果不太好。

void Scaler::Resize_NV(const Buffer *src,

Buffer *dst){

// this function have some problem

if (src->width == dst->width && src->height == dst->height) {

memcpy(dst->data[0], src->data[0], (dst->width * dst->height * 3 / 2) * sizeof(uint8_t));

return;

}

int srcy, srcx, src_index;

int xrIntFloat_16 = (src->width << 16) / dst->width + 1;

int yrIntFloat_16 = (src->height << 16) / dst->height + 1;

uint8_t* dst_uv = dst->data[0] + dst->height * dst->width;

dst->data[1] = dst_uv;

uint8_t* src_uv = src->data[0] + src->height * src->width;

uint8_t* dst_uv_yScanline = nullptr;

uint8_t* src_uv_yScanline = nullptr;

uint8_t* dst_y_slice = dst->data[0];

uint8_t* src_y_slice = nullptr;

uint8_t* sp = nullptr;

uint8_t* dp = nullptr;

for (uint32_t y = 0; y < (dst->height & -7); ++y) {

srcy = (y * yrIntFloat_16) >> 16;

src_y_slice = src->data[0] + srcy * src->width;

if (0 == (y & 1)) {

dst_uv_yScanline = dst_uv + (y / 2) * dst->width;

src_uv_yScanline = src_uv + (srcy / 2) * src->width;

}

for (uint32_t x = 0; x < (dst->width & -7); ++x) {

srcx = (x * xrIntFloat_16) >> 16;

dst_y_slice[x] = src_y_slice[srcx];

if ((y & 1) == 0) { // y is even

if ((x & 1) == 0) { // x is even

src_index = (srcx / 2) * 2;

sp = dst_uv_yScanline + x;

dp = src_uv_yScanline + src_index;

*sp = *dp;

++sp;

++dp;

*sp = *dp;

}

}

}

dst_y_slice += dst->width;

}

dst->stride[0] = dst->width;

dst->stride[1] = dst->width;

dst->stride[2] = 0;

dst->color = src->color;

}

结果

原图

3a352a23415726015c2185ae0b70cfd4.png

结果

35b6a19d1f443f1dcc753384639d2a9d.png

这结果明显有黑色的线条,不对啊。

后面我用libyuv实现了下nv的resize。

libyuv实现nv resize

标签:src,nv21,dst,uv,uint8,height,width,nv12,resize

来源: https://www.cnblogs.com/cyssmile/p/13725506.html

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java培训学费_北京Java培训班学费很贵吗,包含了哪些收费项目

    java培训学费_北京Java培训班学费很贵吗,包含了哪些收费项目原标题:北京Java培训班学费很贵吗,包含了哪些收费项目北京的Java培训班有很多,价格却是相差不多的,但培训的课程就参差不齐了,有的培训班就是为了赚钱而存在的,想要系统的学习Java,确保学习效果,那么你一定要挑选正规的Java培训班,挑选适合自己的Java课程,培训费用可以在和机构老师详谈。我们先来看看Java培训机构的收费情况,学费都包含了哪些呢?专业的Java培训在硬件设施上,在师资力量上…

    2022年7月8日
    19
  • Tarjan 算法介绍及用法

    Tarjan 算法介绍及用法Tarjan 简介 这是一个有关图联通的算法 它基于 dfs 在解决有环的有向图或无向图的问题时 很多算法不好是操作 那么就先要将环进行缩点 将其转换为 DAG 有向无环图 或一棵树 然后问题应会迎刃而解常规操作 首先补几个概念 强连通 在一个 DAG 中 有 a b 两点 若 a 可以到达 b 且 b 可以到达 a 则 a b 即为强连通 强连通图 若在一个 DAG 中 任意两

    2025年6月18日
    0
  • 推荐|Python开源自动化运维平台[通俗易懂]

    推荐|Python开源自动化运维平台[通俗易懂]Python开源自动化运维平台介绍:开源免费,轻量级,适用于中小企业的轻量自动化运维管理平台Spug仓库地址:https://github.com/openspug/spug特性:批量执行:命令可以在线批量执行在线终端:主机支持浏览器在线终端登录任务计划:灵活的任务计划发布部署:支持自定义发布流程配置中心:支持KV、文本、json等格式的配置监控中心:支持站点、端口、进程、自定义等监控报警中心:支持短信、邮件、钉钉、微信等报警方式优雅美观:基于AntDesign

    2022年5月17日
    54
  • 使用java发邮件,附jar包

    使用java发邮件,附jar包本人小白,很多都是转载资料,只是学习研究一下!需要用到发邮件的朋友可以看一下,我们需要用到三个包,分别是commos-email.jar,javax.activation-1.1.0.jar,mail.jar,下面我已经给打家打包好了。点我进百度云下载,我们以qq邮箱为例子我们先去qq邮箱的设置里面给自己开通SMTP服务,然后记好你的授权码,下面会要用到,好了下面上代码。importj…

    2022年5月14日
    38
  • 条件运算符嵌套_条件运算符(?:)的运算过程是什么

    条件运算符嵌套_条件运算符(?:)的运算过程是什么条件运算符(?:)都知道就不细说了,最简单也是最常用的例子:n=(a>b)?a:b;    在C++primerplus第六版180页看到了一个例子,如下所示:    constcharx[2][20]={“Jason”,”atyourservices\n”}    constchar*y=”Quillstone”;

    2022年10月2日
    0
  • SqlSessionTemplate源码解析「建议收藏」

    SqlSessionTemplate源码解析「建议收藏」简介SqlSessionTemplate是mybatis-spring中最核心的一个类,我们知道MyBatis暴露出的最外层接口是SqlSession,所有的操作都是借助SqlSession接口的方法来完成的。MyBatis本身有一个默认实现类,也是我们在单独使用MyBatis时最常见的一个实现类DefalutSqlSession。而当我们将MyBatis与Spring整合时,便不再使用这个默认…

    2022年5月31日
    37

发表回复

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

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