zoukankan      html  css  js  c++  java
  • yuv 笔记

    做Android camera时遇到这些知识,记个笔记。


    参考:
    http://zh.wikipedia.org/zh-cn/YUV

    http://www.fourcc.org/yuv.php

    http://ticktick.blog.51cto.com/823160/555791


    YUV用于表示一种颜色空间,Y表示明亮度,U表示色度,V表示浓度。
    根据数据的存储不同,YUV分为两类:
      1. 紧凑格式 (packed formats): 将Y、U、V值混合在一起存储,与RGB存放方式类似。
      2. 平面格式 (planar formats): 将Y、U、V三个分量分别存放在不同矩阵中。

    RGB格式里分为RGB565/666/888等,同样,YUV下也有许多的具体格式实现。这些不同的实现都采用
    YUV的表示方法,但不同的是Y、U、V三个分量在水平和垂直两个方向的采样间隔不同。这里描述几个
    常用的格式。

    * Packed YUV Formats
    ====================

    1. UYVY (Y422/UYNV)
      这是最常用的 YUV 4:2:2 格式。U、V分量在水平方向采样间隔为2个周期。
      每个像素占16-bit,数据排列为: U0Y0V0Y1,U2Y2V2Y3,U4Y4V4Y5

    2. YUYV (YUY2/YUNV/V422)
      另一个 YUV 4:2:2 的常用格式。与UYVY类似,但分量数据的布局不同:
      Y0U0Y1V0,Y2U2Y3V2,Y4U4Y5V4

    4. Y41P
      YUV 4:1:1, U、V分量在水平方向采样间隔为4个周期。每个像素占12-bit。
      U0Y0V0Y1,U4Y2V4Y3,Y4Y5Y6Y7

    * Planar YUV Formats
    ====================

    0. NV12 和 NV21
      YUV 4:2:0的紧凑格式,U、V在水平和垂直方向的采样间隔都是2个周期。
      U和V分量交错存储。

    1. YV12 / YV21
      YUV 4:2:0, 与NV12/NV21不同,U和V依次存储

    3. YVU9

    ...


        void CameraHal::convertNV12toNV21(uint8_t *inputBuffer, uint8_t *outputBuffer, int width, int height)
        {
            /* Color space conversion from NV12 to NV21 */
    	    // NV12 to NV21
            int Ysize = 0, UVsize = 0;
            uint8_t *Yin, *Uin, *Vin, *Yout, *Uout, *Vout;
    
            Ysize = width * height;
            UVsize = width *  height >> 2;
    
            Yin = inputBuffer;
            Uin = Yin + Ysize;
            Vin = Uin + 1;
    
            Yout = outputBuffer;
            Vout = Yout + Ysize;
            Uout = Vout + 1;
    
            memcpy(Yout, Yin, Ysize);
    
            for(int k = 0; k < UVsize; k++) {
                *Uout = *Uin;
                *Vout = *Vin;
                Uout += 2;
                Vout += 2;
                Uin  += 2;
                Vin += 2;
            }
        }
    


  • 相关阅读:
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Spring异步任务处理,@Async的配置和使用
    Spring Boot系列二 Spring @Async异步线程池用法总结
  • 原文地址:https://www.cnblogs.com/sammei/p/3295596.html
Copyright © 2011-2022 走看看