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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Redis客户端工具_redis安装教程

    Redis客户端工具_redis安装教程作者:IT邦德中国DBA联盟(ACDU)成员,目前从事DBA及程序编程(Web\java\Python)工作,主要服务于生产制造现拥有Oracle11gOCP/OCM、Mysql、Oceanbase(OBCA)认证分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证从业8年DBA工作,在数据库领域有丰富的经验B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007前言RedisDesktopManager官方版是一款简单快速、跨平台的Redi

    2022年9月19日
    0
  • pycharm 激活码在线[最新免费获取]

    (pycharm 激活码在线)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    55
  • 实现redhat的完全自动化安装

    实现redhat的完全自动化安装

    2021年8月13日
    55
  • 通俗易懂–岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)

    通俗易懂–岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)

    2021年6月20日
    138
  • 关于Glup_gulp使用教程

    关于Glup_gulp使用教程gulp—-项目工程化的工具一,作用:(1)能够完成代码的压缩(2)合并,复制,监听,ES6的代码转换,启动服务器等等二,gulp使用步骤:搭建环境(1)安装nodeJS(2)安装node的目的是为了测试npm(npm是nodeJS的包管理工具全称:nodeJSPackageManager)使用npm的原因:a.如果一个项目中使用的第三方js代码非常多,…

    2022年10月29日
    0
  • 如何利用ipad随时随地开发代码

    如何利用ipad随时随地开发代码今天,我将向你们展示如何设置iPad,让它成为你们的开发环境。虽然我不建议你用它来执行非常大的项目,但我可以肯定地说,小项目也可以很容易地执行。您可以自己继续测试环境的限制。首先,我们将使用AppStore上的一款iPhone和iPad都可以使用的免费应用程序。该应用程序名为iSHshell,运行Linux操作系统。因此,如果您不习惯Linux命令,我建议您学习基础命令。我还建议您在继续学习本教程之前学习如何使用vim,因为我们将在iPad上使用vim作为我们的主要代码编辑器。Vim有一个陡峭的学.

    2022年5月24日
    33

发表回复

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

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