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


相关推荐

  • ThreadPool.QueueUserWorkItem 用法[通俗易懂]

    ThreadPool.QueueUserWorkItem 用法[通俗易懂]一不带参数ThreadPool.QueueUserWorkItem(delegate{PostDataWhenLoadData();});privatevoidPostDataWhenLoadData(){              BehaviorReturnbr=_reService.SearchPrintReport(currentSo,isCount)

    2022年9月24日
    4
  • BN层原理解析_视频解析接口原理

    BN层原理解析_视频解析接口原理前几天看了BN的那篇经典论文《《BatchNormalization_AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift》,心中留有很多疑惑,今天大概弄明白了,这里记录一下。1训练数据为什么要和测试数据同分布?看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角…

    2022年10月15日
    5
  • windows10安装虚拟机步骤_vmware虚拟机安装win7

    windows10安装虚拟机步骤_vmware虚拟机安装win7**windows10安装虚拟机详细教程****1.安装环境:**windows10**2.安装所需要用到的材料:**材料链接:https://pan.baidu.com/s/1usn2tAPPV3YvAc8NSF9pfg提取码:d6uf(复制这段链接后打开百度网盘手机App,操作更方便哦,想要其他版本的话就去官网下载,操作大同小异)**3.安装步骤:**(1)双击下图文件。(2)弹出下图,点击”下一步”即可。(3)点击“更改”安装位置,可以不用进行修改,本人安装

    2022年9月13日
    2
  • python控制mt4自动交易软件排名_股票自动交易软件排名

    python控制mt4自动交易软件排名_股票自动交易软件排名原标题:股票自动交易软件排名提起股票自动交易软件,大家都很不陌生了,很多用户也使用过很多不同品牌的产品,那么谁比较好呢?接下来我们就为大家来总体排名一下:第一名:智能A股管家股票自动交易系统把它排在第一名是因为它的性价比高,功能上虽然比不上第二名,但它的价格确实普罗大众用户可以接受的功能:可以实现多种条件任务自动执行买卖,内置9种智能交易任务策略,止盈止损,拐点交易,自动T+0,闪电交易,双向卖…

    2022年5月30日
    55
  • mysql 锁表详解

    mysql 锁表详解为了给高并发情况下的MySQL进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。一、概述MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-levellocking);BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-levellocki

    2022年6月3日
    102
  • 尚硅谷Oracle教程-学习笔记2

    尚硅谷Oracle教程-学习笔记2

    2022年3月8日
    411

发表回复

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

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