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


相关推荐

  • php 全部替换字符串,php如何批量替换字符串

    php 全部替换字符串,php如何批量替换字符串php如何批量替换字符串2020-10-0614:54:06php批量替换字符串的方法:使用【str_replace】批量查找替换字符串,代码为【$str=str_replace(‘o’,’O’,$str,$count);echo$str.PHP_EOL;】。php批量替换字符串的方法:str_replace批量查找替换字符串…

    2022年5月10日
    45
  • 如何制作whl文件「建议收藏」

    如何制作whl文件「建议收藏」wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容。按照官网说法,wheels是发行版Python的新标准并且要取代.egg。Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义。Wheel现在被认为是Python的二…

    2022年5月7日
    115
  • 使用VirtualBox + Vagrant打造统一的开发环境

    使用VirtualBox + Vagrant打造统一的开发环境

    2021年10月28日
    94
  • onpropertychange兼容示例[通俗易懂]

    [code="js"]//当状态改变的时候执行的函数functionhandle(){document.getElementById(‘msg’).innerHTML=’输入的文字长度为:’+document.getElementById(‘txt’).value.length;}//firefox下检测状态改变只能用oninput,且需要用addE…

    2022年4月9日
    54
  • Mac 键盘快捷键

    Mac 键盘快捷键Mac键盘快捷键您可以按下组合键来实现通常需要鼠标、触控板或其他输入设备才能完成的操作。要使用键盘快捷键,请按住一个或多个修饰键,同时按快捷键的最后一个键。例如,要使用快捷键Command-C(拷贝),请按住Command键并按C键,然后同时松开这两个键。Mac菜单和键盘通常对某些按键使用符号,其中包括以下修饰键:Command⌘Shift⇧Option⌥Con…

    2022年5月16日
    42
  • SVM, Softmax损失函数[通俗易懂]

    SVM, Softmax损失函数[通俗易懂]版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]Deeplearning在计算机视觉方面具有广泛的应用,包括图像分类、目标识别、语义分隔、生成图像描述等各个方面。本系列博客将分享自己在这些方面的学习和认识,如有问题,欢迎交流。在使用卷积神经网络进行分类任务时,往往使用以下几类损失函数:平方误差损失SVM损失s

    2022年6月26日
    32

发表回复

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

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