直接对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;

}

结果

原图

结果

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

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

libyuv实现nv resize

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

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

android nv21 nv12,直接进行nv21或者nv12的resize相关推荐

  1. Android录制视频-nv21转nv12姿势(libyuv使用)

    Android录制视频-nv21转nv12姿势(libyuv使用) 前言 为什么需要转化? libyuv简介 实际使用 1.集成 2.修改代码 3.添加方法 4.项目中使用 总结 前言 近期接触项目当 ...

  2. 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)

    我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...

  3. YUV444、YUV422、YUV420、YUV420P、YUV420SP、YV12、YU12、NV12、NV21

    前言 各种YUV格式多如牛毛啊,刚开始学起来确实很费劲,网上搜索的文章讲的并不是很明白. 各种不同的YUV格式其实只是采样方式和存储方式不同,就这两点,不同的采样方式是为了实现节省内存,不同的存储方式 ...

  4. yv12、I420、nv12、nv21相互转换

    YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12.I420格式和YV12格式的不同处在U平面和V平面的位置不同.在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YU ...

  5. yuv420格式nv12,nv21,I420,YV12互转

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  6. NV21 to NV12(YUV420SP)

    setPreviewFormat(ImageFormat.NV21) NV21 颜色空间排列 :YYYYYYYY VUVU 在用MediaCodec编码的时候,如果设置颜色空间为YUV420SP,那么 ...

  7. RGB转YUV420,支持NV12(420p)和NV21(420sp)

    最近项目是用到了RGB格式转YUV420格式,写了一个接口: enum NV_Mode {NV_NONE = 0,NV12_MODE = 1,NV21_MODE = 2 };struct RGB2YU ...

  8. I420、YV12、NV12、NV21等常见的YUV420存储格式

    今天要讲的,主流的采样格式YUV420,它的存储格式通常就有四种:I420.YV12.NV12.NV21. 1.  I420.YV12.NV12.NV21的存储格式 简单来讲,它们的存储格式分别为: ...

  9. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )

    文章目录 一. 安卓直播推流专栏博客总结 二. 相关资源介绍 三. GitHub 源码地址 四. 整体 Android 直播推流数据到服务器并观看直播演示过程 Android 直播推流流程 : 手机采 ...

  10. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

最新文章

  1. A.CPP (blur.CPP)如何调用B.CPP (zeros.cpp)中定义的方法
  2. python数据分析(九)-点积与线性代数
  3. Java基础学习总结(17)——线程
  4. 狼的故事16:空有强壮的身体
  5. python七段数码管设计图案-Python绘制七段数码管实例代码
  6. 计算机与图像处理论文标题,数字图像处理论文各种题目.doc
  7. malloc,realloc,calloc的使用场合及特点,以及malloc的实现原理
  8. MySQL复习资料(九)——MySQL-图形化工具使用
  9. Drools学习 入门实例
  10. SpringMVC原理及非注解配置详解
  11. Could not load driverClass ${jdbc.driver}
  12. mysql multi innobackupex,mysql之 Innobackupex(全备+增量)备份恢复
  13. freebasic 编译linux,FreeBasic库文件入门 [SJ ZERO原创,沧海冷心翻译]
  14. 配色方案--构图必学
  15. 打印流-PrintStream和PrintWriter
  16. Debian下Oracle10g的安装
  17. kali安装QQ音乐
  18. Java实现冒泡排序(详解)
  19. 推荐!十个好用的百度网盘搜索引擎
  20. 数据结构学习笔记2:双向链表和静态链表

热门文章

  1. Linux 磁盘分区及LVM实战演练
  2. 中级职称考试 计算机 英语考试,中级职称工程师职称计算机考试需要考过哪些模块...
  3. 自定义字体需要css的,CSS 自定义字体
  4. Linux修改hosts主机映射文件
  5. ubuntu14.04小米无线网卡驱动安装
  6. Unity自定义UI组件(八) 颜色拾取器(上)
  7. 安全算法—SHA-256算法
  8. android定位欺骗,1020. Android GPS定位欺骗(模拟定位)的3类途径4种方式
  9. python截图搜题_新手篇之实现Python自动搜题
  10. 在线MAC地址查询和在线随机生成MAC地址