瑞芯微RV1126 Camera调试记录

最近一直在做瑞芯微rv1126的开发,由于项目性质,与camera打的交道比较多,包括图像的采集,ISP处理,图像处理,H.264/H.265编解码等各个方面吧。学到了不少,在学习的过程中,也得到了不少帮助,很感激,所以将这一部分整理了一下,希望能对大家有所帮助。如有错漏,也希望批评指出,一起探讨。

1 摄像头类型

1.1 接口介绍

RV1126支持的摄像头接口主要包括MIPI、LVDS、DVP等三种。
在这里插入图片描述
MIPI:串行接口,当前主要摄像头接口,速度最快,抗干扰强。
LVDS:串行接口。
DVP:一种并行接口,即Digital Video Port,相对于MIPI接口,传输速率有限,一般为5M或以下摄像头。
DVP可与MIPI或LVDS接口可以同时工作,但MIPI和LVDS不能同时作。DVP接口对应一个rkcif_dvp节点,MIPI/LVDS接口对应一个rkcif_mipi_lvds节点,各节点可独立采集。为了将VICAP采集的数据信息同步给isp驱动,需要将VICAP驱动生成的逻辑sditf节点链接到isp所生成的虚拟节点,DVP接口对应rkcif_dvp_sditf节点,MIPI/LVDS接口对应rkcif_mipi_lvds_sditf节点。

1.2 数据类型

**Raw:**RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是camera sensor直接输出的格式。红外相机的sensor和彩色相机的sensor有些不同,有的红外相机的sensor输出的raw data就是亮度值,即灰度值,输出来就是只有Y信息的,一个像素点通常由Y10/Y16等字节来表示。彩色相机RGB格式,每个像素点表示一个颜色分量B、G或R。
RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布。将每一个像素的数据直接输出,即RAW RGB dataRaw data(Raw RGB)经过彩色插值就变成RGB.
raw格式是无法直接用于图像处理的,因为每个像素点颜色信息都不全,需要经过ISP处理,把raw转成yuv/rgb之类的图像(不只是格式转换,还要做白平衡调整之类的图像处理工作,调整好图像效果),才可以输入到图像处理算法中。
raw数据一般是经过tuning来还原数据,效果与摄像头镜头以及tuning参数有关。详细tuning方法见4.2节。

Raw数据存储格式:

非紧凑型存储格式RAW

非紧凑型是指将sensor输出的raw10、raw12数据按16bit存储,高位对齐。对于raw12数据在内存中的存储排列方式,以4字节的内存片段为例,数据的存储方式如下所示:
在这里插入图片描述

紧凑型存储格式RAW

对于raw12数据在内存中的存储排列方式,以4字节的内存片段为例,数据的存储方式如下所示:
在这里插入图片描述

注意:
1、raw包括RGGB,BGGR,GBRG,GRBG等格式,一般通过插值转换为rgb/yuv。Raw按位数分有raw8、raw10、raw12等格式,其实取高8位即可,然后通过插值,算出每个像素点的RGB信息。
2、特别要注意的是,ISP虽然不对Raw图处理,但它仍然会将10bit的数据低位补0成16bit。不管Sensor输入的是10bit,12bit,最终上层拿的都是16bit每像素。
Grey:灰度图,一般为Y8/Y10/Y16等。
YUV:不需要tuning,摄像头自带isp或者soc摄像头或红外机芯,都输出这种格式。常用YUV格式见1.4节。
RV1126支持接口与数据格式如下表所示:
在这里插入图片描述

1.3 数字视频接口介绍(BT601/BT656/BT1120/LVDS)

BT601/BT656/BT1120视频信号必须通过DVP接口才能接入。

BT601

一般为外同步,逐行输入,bus-width一般为8bit。并行数据,行场同步有单独输出。

BT656

一般为PAL/NTSC,时钟频率为27M,数据格式一般为YUV,内同步,有同步码,隔行输入,bus-width一般为8bit。RV1126按RK技术支持说法不支持BT656逐行输入。注意BT656隔行,要在应用程序里去交织,否则图像会有条纹。串行数据,行场同步信号嵌入在数据流中。

BT1120

有外同步与内同步,逐行输入,bus-width一般为16bit,8bit用来传输亮度,8bit用来传输色度。
1、内同步,就是图像数据与同步信号均包含在图像数据中,标清时大多采用ITU-656,高清时采用BT-1120.
2、外同步,就是图像数据与同步信号单独传送,标清时采用ITU-601标准,高清时采用CEA-861标准.

1.4 YUV常用格式介绍

与 RGB 编码方法类似,YUV 也是一种颜色编码方法。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值,U和V表示的则是色度(Chrominance或 Chroma),分别用Cb和Cr来表示,作用是描述影像色彩及饱和度,用于指定像素的颜色。
这样分开的好处:

  1. 可以避免相互干扰(没有UV信息一样可以显示完整的图像,因而解决了彩色电视与黑白电视的兼容问题);
  2. 降低色度的采样率而不会对图像质量影响太大,降低了视屏信号传输时对频宽(带宽)的要求。
    YUV采样表示法:
    YUV 采用A:B:C表示法来描述Y、U、V采样频率比例,下图中黑点表示采样像素点Y分量,空心圆表示采样像素点的UV分量。
    在这里插入图片描述
    或:
    在这里插入图片描述
  3. 4:4:4表示色度频道没有下采样,即一个Y分量对应着一个U分量和一个V分量。一个YUV占8+8+8=24bits,3个字节;
  4. 4:2:2表示2:1的水平取样,垂直完全采样。一个YUV占8+4+4=16bits,2个字节;
  5. 4:2:0表示2:1的水平取样,垂直 2:1 采样。一个YUV占8+2+2=12bits,1.5个字节;
    YUV格式:
  6. 打包格式(packed formats): 打包格式中的 YUV 时混合在一起的。
  7. 平面格式(planar formats): 每Y分量、U分量和V分量都是以独立的平面组织的,也就是有三个平面。
    常见YUV格式的数据存储格式取下表所示:
    在这里插入图片描述

注意:

  1. UYVY格式与YUY2相同,只是存储时U、V位置顺序不同;
  2. NV16/NV61、NV12/NV21、YU16/YV16、YU12/YV12同理。
  3. 本文中YUV基本指YCbCr。
  4. YUV各分量范围:
    TV range:Y∈[16,235],Cb∈[16-240],Cr∈[16-240]
    Full range: [0,255]
    关于如何判断像素格式是否为TV range Y(16-235)?
    常见的一些解码帧结构体里面有color_range参数,如果为MPEG 或者 LIMITED 则表示为TV range。
    在完全黑画面的时候打印出图像的Y数据,如果Y=16左右,说明YCbCr 为TV range,如果Y=0左右,说明YCbCr为 full range。
  5. 各格式之间可以相互转换:
    4:2:2->4:2:0 的有损压缩转换:
    Y存储数据不变,对U和V分量在行垂直下采样进行隔行抽样。
    4:2:0->4:2:2的补足转换:
    Y存储数据不变,对U和V分量在行垂直下采样进行隔行拷贝补足下一行色度数据。
    例如:艾睿红外机芯(1024*768),Y8格式,RV1126在接收时就必须为NV16,而不能用NV12,否则4:2:2->4:2:0 的有损压缩转换,数据会有丢失。—有时格式只是个形式,只要可以接收到所有的数据,知道数据的存储格式,就可以直接对数据进行处理。
  6. NV12转RGB
    r = y + (140 * (v-128))/100; //r
    g = y - (34 * (u-128))/100 - (71 * (v-128))/100; //g
    b = y + (177 * (u-128))/100; //b
  7. 图像存储模式:
    YUV存储
    亮度色度分开存储在DDR中的亮度存储空间和色度存储空间,在1行内,亮度、色度分量各自连续存储。连续2行之间的存储,可以通过系统定义的行首与行首之间的存储间隔参数stride定义。亮度和色度分量在 DDR 中的存储位置由起始地址base_addr来指示。
    在这里插入图片描述
    RAW存储
    按单分量方式存储。1行内,RAW数据连续存储。连续2行之间的存储,可以通过系统定义的行首与行首之间的存储间隔参数stride定义。DDR 中的存储位置由起始地址base_addr来指示。
    在这里插入图片描述

在DDR中,数据的存储是以word(32bit)为单位。由4个8bit像素组成一个32bit的word。
在这里插入图片描述

stride 宽度通常与 buffer_width 相同。若u32VirWidth大于buffer 宽度,存储时则必须满足 16 对齐。如下图所示:
在这里插入图片描述

2 摄像头DTS、驱动文件、Iqfile文件等配置

对于所有的linux下的camera sensor驱动,包括DVP、MIPI、LVDS,都主要包括下面4个部分:
DTS配置文件:kernel/arch/arm/boot/dts/rv1126.dts
驱动文件:kernel/drivers/media/i2c/sensor.c
menuconfig选项,包括Kconfig、Makefile:kernel/drivers/media/i2c/
ISP sensor还需要iqfile配置文件。

2.1 DTS文件

DTS配置文件位置:kernel/arch/arm/boot/dts/rv1126.dts.
要求正确配置sensor的i2c地址、电压、iqfile文件名、数据链路、分辨率、pclk与Hsync/Vsync上升沿下降沿、mipicsi_clk0/1、data-lane、bus-type、bus_width、P/I、reset/pwdn gpio等。

MIPI接口

链接ISP:sensor->csi_dphy->isp->ispp
data-lanes必须指明具体使用的lane数。对于RV1126平台而言,存在两个独立而完备的标准物理mipi csi2 dphy,对应于dts上的csi_dphy0和csi_dphy1(参见rv1126.dtsi),特性:data lane最大4 lanes;最大速率2.5Gbps/lane;
链接VICAP:sensor->csi dphy->mipi csi host->vicap
此时data-lanes必须指明具体使用的lane数,否则无法识别为mipi 类型;dphy需要链接到csi host节点。

LVDS接口

链接VICAP:sensor->csi dphy-> vicap
dphy不需要链接csi host节点,否则会导致收不到数据;data-lanes必须指明具体使用的lane数,否则会导致收不到数据;bus-type必须配置为3,否则无法识别为lvds接口,导致链路建立失败。

DVP接口

 链接VICAP:sensor->vicap 
 BT601/BT656/BT1120

关于dts配置注意事项

mipicsi_clk1、ucam_out1、csi_dphy1都和物理硬件有关,必需要匹配。后续链路可以接isp0或isp1;当只有一个isp时,无论dts是多少,media-ctl都是isp0/ispp0;当只有一个isp时,如果配置isp1,isp0需要disabled,否则会导致抓图时isp无法开启。
data-lanes表示链接的lane数,必须指明具体使用的lane数,否则无法识别为mipi类型。它不是硬件链接的条数,而是摄像头根据寄存器配置实际对应的lane数,比如ov13850硬件可以链接4lane,但是因为我们寄存器序列配置的输出是2lane,这里配置为<1 2>; 如果是1lane 配置为<1>; 4lane 配置为<1 2 3 4>;
如果接入两个相同的sensor,如双SC2310,则DTS应作区分,驱动文件、DTS、Iqfile文件可以一样,不同的是i2c地址与rockchip,camera-module-index = <0/1>;

双ISP

rv1126双isp模式时,dts链路必须一路vicap,一路直接isp模式,如下链路:
1:sensor→csi_dphy0→mipi_csi2→rkcif_mipi_lvds→isp0
2:sensor→csi_dphy1→rkisp1
由于rv1126性能最高支持4K30,所以两路isp之和不能超过800M,否则帧率不能保证30fps。
注意:若同时存在双ISP链路,且两者分辨率不同,则:

1.	&rkispp {  
2.	    status = "okay";  
3.	    /* the max input w h and fps of mulit sensor */  
4.	    max-input = <2688 1520 30>;  //取不同sensor的最大宽和高及帧率
5.	};  

2.2 驱动文件

驱动文件位置:kernel/drivers/media/i2c/sensor.c.
正确配置sensor的分辨率、模式、reset/pwdn gpio等。
驱动文件重点配置(厂商没有提供驱动文件和Iqfile文件的情况下):
pixel rate = link frequency * 2 * lanes / BITS_PER_SAMPLE,算出每个点的时钟=频率使用lane数2(双沿采样)/一个像素10bit(raw10).
曝光与增益寄存器:sensor_ioctl;sensor_set_ctrl的曝光与增益部分,尤其是增益部分必须与datasheet一致,同时一定要注意曝光增益的生效帧,是否有延迟,如曝光的生效帧为N+2帧,则延迟2帧生效,此时Iqfile sensorinfo的delay要设置为2,这样可以减少许多的不必要的错误现象如偏色,曝光闪烁等。
驱动文件参数具体含义见文档:《camera安卓9.0以及linux驱动说明.pdf》。
2.3 Iqfile文件
Iqfile文件位置我们设置为:etc/iqfiles/。
如果sensor厂商或RK没有提供Iqfile文件的话,则需要我们自己生成合适的Iqfile文件,这会直接影响camera的成像效果。
DTS配置:
rockchip,camera-module-index 这个定义多个摄像头时候做个区分;
rockchip,camera-module-facing 摄像头前后置标识;
rockchip,camera-module-name = “CMK-OT1607-FV1”;
rockchip,camera-module-lens-name = “M12-40IRC-4MP-F16”;
这个是摄像头模块名和镜头名,这个主要功能是通过关键字找对应的效果文件。比如当前dts找的xml文件就是os04a10_CMK-OT1607-FV1_M12-40IRC-4MP-F16.xml。对于 yuv 摄像头不需要 xml,可以不管这个配置。Ir-cut 是红外滤光片,如果有配置上,如果没有可以删掉。
生成Iqfile XML文件见3.5 RK Tuning调试软件使用节。

3 调试手段

主要包括v4l-utils工具和rkisp2x_tuner软件。
主要介绍 v4l-utils 中的两个命令行工具:media-ctl以及v4l2-ctl。
media-ctl,用以查看、配置拓扑结构;
v4l2-ctl,用以配置v4l2 controls,可抓帧,设置cif,isp,sensor参数

3.1 查看数据链路是否正确

通过如下指令查看sensor数据链路:
media-ctl -p -d /dev/mediaN
链接关系,isp0->ispp0和isp1->ispp1是固定配置,mipi进isp或cif进isp可选。
RV1126数据链路主要包括下面四种:
sensor0->csi_dphy0->mipi_csi2->rkcif_mipi_lvds->isp0->ispp0
sensor1->csi_dphy1->isp1->ispp1
sensor2->csi dphy1-> rkcif_mipi_lvds
sensor3->rkcif_dvp->isp0->ispp0
其中0/1/3三种链路可以随机组合,互不影响。2与0/1不可同时出现。ISP也可以适配DVP接口,ISP适配MIPI 接口,需要有mipi csi_dphy。

3.2 查看sensor i2c是否连接成功

可以通过i2c-tool查看i2c总线上sensor是否挂载成功。
指令:i2cdetect -y 1
打印log: dmesg | grep sensor,查看sensor id是否读取成功。
判断 Sensor 与 CIF 是否已经绑定:dmesg | grep Async
[ 2.681364] rkcif: Async subdev notifier completed,则说明sensor与cif绑定成功,否则失败。原因可能是Sensor 驱动上电时序不对,Sensor I2C通讯失败等。

3.3 查看各接口输入输出信息

DVP接口:/proc/rkcif_dvp
MIPI/LVDS接口:/proc/rkicf_mipi_lvds
ISP:/proc/isp0
ISPP:/proc/ispp0
查看DVP接口捕获的图像宽高:
打印 drivers/media/platform/rockchip/cif/capture.c

3.4 抓图

利用v4l2-ctl指令抓帧,如果raw需要经ISP处理,由于isp需要iqfile,则只能抓原图,若要抓ISP输出的图像,只能通过test抓图。

抓原图

v4l2-ctl -d /dev/video2 --set-fmt-video=width=2560,height=1440,pixelformat=BG10 --stream-mmap=4 --stream-skip=3

抓YUV图

v4l2-ctl -d /dev/video0 --set-fmt-video=width=640,height=512,pixelformat=NV12 --stream-mmap=3 --stream-skip=3

test抓图

./test -isp /dev/video21 -rga -idx 0 -iqsize 2560 1440 -size 1920 1080 -dump 5
./test -dvp /dev/video0 -rga -size 640 512 -dump 5

3.5 RK Tuning调试软件使用

可以使用Tuning软件生成Iqfile XML文件。
XML文件重点在于AWB、AE、sensorinfo三部分,分别影响画面的颜色白平衡,曝光量与增益的设置等。Sensorinfo设置的增益值必须与底层驱动文件的增益设置部分完全匹配,否则可能出现偏色等问题。

1.	<GainRange index="1" type="struct" size="[1 1]">    
2.	         <IsLinear index="1" type="double" size="[1 1]">    
3.	                [1 ]    
4.	         </IsLinear>    
5.	         <Linear index="1" type="double" size="[1 7]">    
6.	               [1.0000 397.0000 64.0000 0.0000 1.0000 64.0000 25400.0000 ]    
7.	          </Linear>    
8.	          <NonLinear index="1" type="char" size="[1 10]">DB_MODE</NonLinear>    
9.	</GainRange>  

其中对于线性转换公式设置,索尼为非线性,其他厂家一般为线性,当为线性时,Linear线性转换公式必须与sensor datasheet以及sensor.c一致,否则可能出现偏色的问题。线性转换公式直接决定了sensor收到的增益值,当底层驱动设置增益倍数时,要与线性转换公式一致。
详细见《RKISP2.x_Tuner_v1.5.3 软件使用说明》和RK相关文件。

4 Arm NEON加速处理

Neon简介

ARM Advanced SIMD延伸集,(ARM Cortex-A系列处理器的128位SIMD架构扩展)称为NEON技术,它是一个结合64bit和128bit的SIMD(Single Instruction Multiple Data单指令多数据)指令集。其针对多媒体和讯号处理程式具备标准化加速的能力,NEON具有一组广泛的指令集、各自的寄存器阵列,以及独立执行的硬件。ARM NEON技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D图形、游戏、音频和语音处理、图像处理技术、电话和声音合成)。

NEON的寄存器

有16个128位四字寄存器Q0-Q15,32个64位双字寄存器D0-D31,两个寄存器是重叠的,在使用的时候需要特别注意,不小心就会被覆盖掉。

数据类型表示

(u)int8x8_t; (u)int16x4_t; (u)int32x2_t; (u)int64x1_t;
(u)int8x16_t; (u)int16x8_t; (u)int32x4_t;
其中,第一个数字代表的是数据类型宽度为8/16/32/64位,第二个数字代表的是一个寄存器中该类型数据的数量。
如int16x8_t代表16位有符号数,寄存器中共有8个数据。

指令解析

int16x8_t vqadd_s16 (int16x8_t, int16x8_t)
int16x4_t vqaddq_s16 (int16x4_t, int16x4_t)
第一个字母’v’指明是vector向量指令,也就是NEON指令;
第二个字母’q’指明是饱和指令,即后续的加法结果会自动饱和;
第三个字段’add’指明是加法指令;
第四个字段’q’指明操作寄存器宽度,为’q’时操作QWORD, 为128位;未指明时操作寄存器为DWORD,为64位;
第五个字段’s16’指明操作的基本单元为有符号16位整数,其最大表示范围为-32768 ~ 32767;
形参和返回值类型约定与C语言一致。

指令分类

(1)正常指令:生成大小相同且类型通常与操作数向量相同的结果向量;
(2)长指令:对双字向量操作数执行运算,生成四字向量的结果。所生成的元素一般是操作数元素宽度的两倍,并属于同一类型;
(3)宽指令:一个双字向量操作数和一个四字向量操作数执行运算,生成四字向量结果。所生成的元素和第一个操作数的元素是第二个操作数元素宽度的两倍;
(4)窄指令:四字向量操作数执行运算,并生成双字向量结果,所生成的元素一般是操作数元素宽度的一半;
(5)饱和指令:当超过数据类型指定的范围则自动限制在该范围内。

头文件与编译

//1. #include <arm_neon.h>
//2. 编译时加上参数 -mfloat-abi=hard -mfpu=neon

5 问题与解决

5.1 问题:sensor i2c读取sensor id失败。

打印log: os04a10 1-0036-1: Unexpected sensor id(000000), ret(-5)
解决:①先检查i2c地址是否正确;
②i2c-tool i2cdetect -y n 查看i2c设备是否挂载成功(一般是失败)
③查看驱动power_on函数,查看配置是否正确,reset_gpio与pwdn_gpio.
参考gc4663.c读取sensor id失败:

1.	//if (!IS_ERR(gc4663->reset_gpio))  
2.	//    gpiod_set_value_cansleep(gc4663->reset_gpio, 0);  
3.	//if (!IS_ERR(gc4663->pwdn_gpio))  
4.	//   gpiod_set_value_cansleep(gc4663->pwdn_gpio, 0); 

5.2 问题:sensor i2c,probe,media拓扑结构均正常,无任何报错,但RV1126无任何输入,收不到数据。

解决:①首先让硬件用示波器测量snesor clk、data、Vsync、Hsync信号,确保是有视频信号输入的。
②其次确保DTS与驱动文件的分辨率、format、mbus_type、pclk与sync上升沿下降沿、bus_width、P/I等设置正确。
③确认RV1126支持这种格式。
例如:rv1126 dvp接红外机芯,bt656逐行输入,时钟频率为54M,50Hz逐行bt656时序,分辨率为640*512,抓图报错:dvp overflow err.
解决:厂家技术支持回复rv1126逐行未调试过,主要是隔行。最后将红外机芯改为bt656,隔行输入,时钟频率27M。

5.3 问题:sensor抓图失败,并报错XCAM ERROR.

解决:根据报错的错误码来定位错误的原因,然后做相应的修改即可。
例如:
从报错可知XCAM ERROR错误代码为-9,通过查表可知-9表示“IOCTL操作出错”,通过分析驱动文件的sensor_ioctl即可发现问题。
查表文件:《Rockchip_Development_Guide_ISP2x_CN_v1.6.4.pdf》

5.4 问题:图像画面颜色偏色或图像曝光量改变时,画面颜色偏红。

解决:考虑AWB调整的问题,调整xml文件的AWB部分,如pseudoLumWe;确认驱动增益设置是否与datasheet一致,一定要确保一致,这样可以减少许多的不必要的错误现象。

5.5 问题:图像画面闪烁,曝光增益一直上下跳动。

解决:曝光与增益二者没有同时写入,采用Group Hold模式写入;曝光与增益生效帧与xml配置不一致,修改xml文件或驱动文件。
参考链接:https://blog.csdn.net/weixin_41944449/article/details/105013004

5.6 问题:iq文件名错误导致报错。

解决:考虑dts配置错误,如&mipicsi_clk0/1错误;或硬件连接错误,csi_dphy0/1接口连接错误;或ISP port错误导致,RV1126_isp_init( port-1 ,1 , &drv->port[port] );

5.7 问题:报错rockchip-mipi-csi2: ERR1 : crc errors, reg: 0x11000000, cnt:77 .

解决:dts配置lane数不正确导致,一般是lane数偏小,比如<1 2 3 4>配置为了<1 2>。

5.8 问题:

在这里插入图片描述

解决:XML文件LSC模块缺失,补齐即可。LSC为镜头阴影校正。

5.9 问题:rv1126 dvp接红外机芯,bt656逐行输入,时钟频率为54M,50Hz逐行bt656时序,分辨率为640*512.,抓图报错:dvp overflow err.

解决:RK技术支持回复rv1126逐行未调试过,主要支持隔行。最后将红外机芯改为bt656,隔行输入,时钟频率27M。

5.10 问题:RV1126 ISP是否支持红外模式?

解决:支持yuv422/bt1120输入,但isp不会处理yuv数据;支持只输出y分量,rgb的sensor 只需要xml里面的COLOR_AS_GREY enable置1即可;ISP同样可以处理bayer Y 也就是moon sensor,只是不需要demosaic.

6 参考文档

  1. raw格式详解.
    https://blog.csdn.net/lgfun/article/details/99640748
  2. YUV全部格式介绍.
    https://wiki.videolan.org/YUV
  3. NV12等常用YUV数据格式.
    https://blog.csdn.net/qq_28087491/article/details/121974561
  4. YCbCr与YUV
    https://www.cnblogs.com/general001/articles/2586406.html
  5. YUV与RGB互转各种公式.
    https://www.cnblogs.com/luoyinjie/p/7219319.html
  6. YUV格式详解
    https://www.cnblogs.com/ALittleDust/p/5935983.html
  7. 视频渲染推荐的8位YUV格式
    https://docs.microsoft.com/zh-cn/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering
  8. 摄像头图像处理及色彩模型
    https://blog.csdn.net/m0_37631324/article/details/104121793
    Arm NEON 9. CPU 优化技术-NEON 指令介绍
    https://zhuanlan.zhihu.com/p/441686632
  9. NEON 指令集【基础备忘】
    https://www.pianshen.com/article/2698142863/
  10. ARM Neon指令集的一些简单的应用
    https://www.cnblogs.com/biggerjun2015/p/11754435.html
  11. RK官方文档
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值