- 博客(32)
- 收藏
- 关注
原创 camera杂项-工频闪烁
先贴一张图,应该都见过右边这种状态。 工频闪烁有很多文章,看完之后我有些没有理解。深入理解之后,我还是写出来记录下。![在这里插入图片描述](https://img-blog.csdnimg.cn/2020120912380747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUwMzUwOA==,size_16,col.
2020-12-09 22:51:52 1009
原创 camera杂项-hdr
hdr,这个其实很早就有了解,无非就是几帧曝光不相等图片进行融合。看看风景能拍出大片的感觉。但是真正实现的细节,并不知道。最新接触到一些hdr知识,自己做个简单记录。hdr分为很多种,最早期的就是人为的多帧曝光。这种在动态画面,表现的不好,容易有鬼影,因为多帧曝光时间不一致,合成时,可以人为是不同时间的照片合成,人物跑步就会呈现前后相近的人影。...
2020-11-22 00:10:35 1261
原创 camera杂项-曝光
前段时间有人问,usb camera在亮的地方能有30帧,到暗的地方下降很多。觉得这不正常。 网上很多这方面的资料,文章写的很好,配以图文,但可能看下来只知道一点点东西。我简单写一些。可能读者知道的会更多,更实用。1. 调试摄像头曝光很多时候都是以行算的,也就是常说的曝光行。当然算曝光时间是曝光行*每行的时间2. 一般曝光时间不超过vts,vts就是一帧花的总时间(包含每帧的无效信号)。3. 除了曝光能增加亮度之外,gain也能增加亮度,gian也分为模拟gain和数字gain4. 曝光时间引入.
2020-11-14 23:56:09 1637
原创 CPHY简单介绍
之前的文章有介绍过DPHY和CSI2,这篇文章简单介绍下CPHY实际上是在DPHY之后CPHY之前,mipi组织提出了M-PHY和CSI3协议。M-PHY,4lane tx全部打开理论每 lane最大值达到11.6gb/s,而DPHY最大只达到2.5gb/s. M-PHY是DPHY的4.64倍。为了应用与类似车载需要长距离传输的场景,mipi联盟又出了个APHY,当然我目前还没去了解。然而M-PHY并没怎么商用起来,个人认为相机的像素并没有像摩尔定律那样快速的增长,当然不是不能这样增长,是没有必要,感觉
2020-10-19 22:42:50 17656 2
原创 camera dhpy和csi2协议分析
目录简介 3CSI整体框架概览 32.1 mipi硬件接口 32.2 csi内部结构 4CSI协议层 43.1 字节打包 43.2 LLP协议层 63.3 Lane分发管理 8DPHY物理层 94.1 Dphy结构 94.2 管脚以及模式切换 114.3 各种状态以及模式详述 124.4 进入和退出HS的时序 15传输错误信息 17其他 18参考文档 19简介MIPI(移动行业处理器接口)是Mobile Industry Processor
2020-10-19 12:55:39 3716
原创 心得笔记--色彩空间
在电子领域,常用的东西都可以量化,比如声音,用一秒钟采样声音的幅值48k或者44.1k次,那这些数值记录下来,可以描述一段时间声音。播放的时候可以用这段数据通过adc模拟出来输送到喇叭或者耳机上来。我们眼睛所看到的大千世界都是由各种颜色组成,我们常用描述一种物体,比如天空:说成是蓝色,树叶说成是绿色。但实际各种物体不是一种颜色组成的 ,国旗一样带有五颗黄色的星。这样我们像上面类似,也可以对任何一幅画面量化。这个量化就是把一幅图像量化成横竖多少个格子,量化的大小决定图像的清晰程度,比如量化很小,32x32,
2020-08-31 23:25:01 744
转载 camera杂项---两种shutter
什么是快门快门是照相机用来控制感光片有效曝光时间的机构。是照相机的一个重要组成部分,它的结构、形式及功能是衡量照相机档次的一个重要因素。什么是Global Shutter(Total Shutter)?通过整幅场景在同一时间曝光实现的。Sensor所有像素点同时收集光线,同时曝光。即在曝光开始的时候,Sensor开始收集光线;在曝...
2020-08-14 22:07:56 2882
原创 camera杂项---tuning原理
部分截图来源于网上一.BLC个人简洁理解:为什么要纠正黑电平?因为黑电平不为0。为什么不为0?因为芯片厂家加了一固定的偏移量。为什么要加偏移量?:1.因为adc的特性,很难精准转换电压值很小的一部分人为放大信号可以保留暗部细节,当然亮部细节稍有损失。2.全黑状态电平不稳定,容易受到暗电流温度等影响,放大可以保持信号稳定。Isp所做的事:实际是找这个black level,加以扣除。一般tuning第一步就是做bl纠正,如果扣除不准容易造成整体偏色。Isp实际是可以针对r,gr,gb,b减去不同的
2020-08-13 23:11:05 5017
原创 camera杂项---各种效果参数
图片均来源于网上搜集1.信噪比.信噪比表示在规定的条件下,传输信道特定点上的有用功率与与它同时存在的噪声功率的比值用Photoshop分析20-23色块,得出各个色块的平均值(meanY)和标准偏差(SD)SNR=20*log(MeanY/ SD)平均 SNR 30db pass35db good2. 图像的动态范围是指输出图像的最亮和最暗部分之间的相对比值通俗的讲,就是在一个暗态的房间里面,透过玻璃照室外明媚阳光下的景物,室内和室外的物体是否都能够清晰的显现.HDR,其为高动态范围的
2020-08-13 22:52:53 1030
原创 camera杂项---镜头
广角又称短镜头,广角镜头是一种焦距短于标准镜头、视角大于标准镜头、焦距长于鱼眼镜头、视角小于鱼眼镜头的摄影镜头。广角镜头又分为普通广角镜头和超广角镜头两种普通广角镜头的焦距一般为38-24毫米,视角为60-84度;超广角镜头的焦距为20-13毫米,视角为94-118度。由于广角镜头的焦距短,视角大,在较短的拍摄距离范围内,能拍摄到较大面积的景物。广角数码相机的镜头焦距很短,视角较宽,而景深却很深,比较适合拍摄较大场景的照片,如建筑、风景等题材广角镜头的基本特点是,镜头视角大,视野宽阔。从某一视点观察到
2020-08-13 22:12:08 509
原创 camera内存之---dma_api简述(4)
Camera 内存相关知识,真的绕不开dma相关接口。这里自我总结一下。下面只是个人的理解,方便自己以后修正:一般isp内部会有单向的dma,也就是摄像头数据搬运到ddr,dma一般需求连续物理内存,那么dma api会提供内存分配,映射的接口。我们可以把它看做一个框架接口,具体实现这些接口对上不用关心。对下就可以有多种实现,比如cma,单个设备预留内存,iommu指向的总线内存,以及早期用到的ion内存。Dma api 对下也提供了相关接口用于实现不同种类的操作函数。1.简单说明几种内存地址Pa:
2020-08-12 22:41:16 1726
原创 camera内存之---gralloc_buffer(3)
因为camera要申请gralloc buf的缘故,打算仔细看看grallocbuf的原理,其实之前大概知道一些,这次梳理一下。因为部分接口封成了库,所以也没有去看相关代码,但是可以理解概念,知道gralloc是什么,怎么用就可以了。Gralloc封装了用户层对帧缓冲区的操作接口,他可以申请图形缓冲区,然后将个缓冲区映射到应用程序上来,接下来就可以绘制界面。主要是用于gpu和fb的操作,gpu用于分配图形缓冲,fb用于渲染帧缓冲。但是rk从安卓7.1之后实现drm驱动,fb部分被删除了,应该是底层包含
2020-08-12 22:30:16 1992 1
原创 camera内存之---cma模块(2)
先解释下cmaCMA,Contiguous Memory Allocator,是内存管理中的一个模块,用于分配连续物理内存。主要是针对多媒体,camera这种需要分配大段连续物理内存的模块使用(camera需要用到dma,dma正常只支持物理连续内存搬运)。Cma还可以与dma子系统继承在一起,使用dma的设备驱动只需要访问dma相关api即可。先看下cma结构体用于描述一个cmastruct cma { unsigned long base_pfn;//物理地址起始页帧号 unsign
2020-08-11 23:15:49 927
原创 camera内存之---iommu使用(1)
先说下iommu几个名词iommu_group:代表共享同一个streamid的一组device,也就是多个device可以在同个groupdomain :代表一个具体的设备使用iommu的详细specKernel has DMA mapping API fromorigin. ARM defines IOMMU which can be used to connect scattered physicalmemory as a continuous region for devices which
2020-08-10 23:17:43 2939 1
原创 camera_kernel之---videobuffer的入队与出队(5)
1.继续上节,申请完并mmap完内存后,就需要把当前buf入队,qbuf函数调用流程如下v4l_qbuf-- >vb2_ioctl_qbuf-- >vb2_qbuf-- >vb2_internal_qbuf-- >vb2_core_qbufint vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb){…… vb = q->bufs[index];//获取当前buf switch (vb-&g
2020-08-09 22:52:01 1166
原创 camera_kernel之---videobuffer的申请与map(4)
对于camera 模块除了逻辑之外,我关注的点就内存的使用,后续还会写些内存相关的部分。这里只探讨如何申请buffer。当前buffer申请分为enum v4l2_memory {V4L2_MEMORY_MMAP = 1,V4L2_MEMORY_USERPTR = 2,V4L2_MEMORY_OVERLAY = 3,V4L2_MEMORY_DMABUF = 4,};mmap是下面详细要讲的。OVERLAY这种方式
2020-08-08 23:47:09 1312
原创 camera_kernel之---media子系统(3)
在rk 9.0之前还没有实现这个子系统,为了解决多媒体设备的复杂性和流动性,我的理解是把多媒体各个模块树状链接,可以很方便的操作各个链接点的格式分辨率等。但是这样需要代码来支持,所以就有media子系统,虽然增加了大段代码,但是这样操作更加灵活。由于media子系统在网上很多,这里只做简单讲述,后面自己看看代码。Media子系统是一种pipeline形式Rk从sensor到ddr设定了4个设备如下sensor —> DPHY —> isp —> stream其中每个设备都认为是
2020-08-08 18:10:54 2145 2
原创 camera_kernel之---videobuf2简单介绍(2)
videobuf2是嵌入到v4l2子系统,以供驱动与用户空间提供数据申请与交互的接口集合,它实现了包括buffer分配,根据状态可以入队出队的控制流。文件目录kernel/drivers/media/v4l2-core 相关videobuf2相关文件如下,videobuf相关的文件可以不关心,只讨论videobuf2├── videobuf2-core.c├── videobuf2-dma-contig.c├── videobuf2-dma-sg.c├── videobuf2-dvb.c├──
2020-08-08 16:16:25 1903
原创 camerahal之---rkisp各线程解说(3)
前面讲解的是hal的接口实现,但是实际会感觉比较干涩,为了融通hal的关系以及逻辑,写下这篇文章可以更好地理解代码Hal代码中各个配置以及处理,都是通过向线程发消息来处理。1.RequestThread在open的时候接口函数是hal_dev_open接下来执行openCameraHardwareCamera3HAL* halDev =new Camera3HAL(id, module);调用halDev->init ,halDev->init 内部低啊用mCameraHw =
2020-08-08 15:07:21 2189
原创 camera_kernel之---v4l2简单介绍(1)
V4l2接触的最早,网上也有很多资料,本来不想拿出来介绍。但是作为一个整体资料,还是简单写下。V4l2作为视频设备的内核驱动,为linux视频设备提供接口,内部包含了videobuf的相关操作接口,后续会单独写文档。先看目录文件kernel/drivers/media/v4l2-core├── v4l2-async.c├── v4l2-clk.c├── v4l2-common.c├── v4l2-compat-ioctl32.c├── v4l2-ctrls.c├── v4l2-dev.c├─
2020-08-07 22:21:40 2193
原创 camerahal之---rkisp-hal3内部实现(2)
上一章节只是简单介绍hal接口需要实现的几个函数如何定义。并没有真正说到接口内部的实现。我们可以这样认为。外面作为一个对camerahal的外部框架接口。内部由rkisp具体实现。先介绍比较重要的几个类。1.RKISP1CameraHw这个是rk创建的硬件描述类早在Camera3HAL::init时候通过mCameraHw = ICameraHw::createCameraHW(mCameraId);然后执行mCameraHw->init函数RKISP1CameraHw继承ICamera
2020-08-06 23:36:28 1838 1
原创 camerahal之---hal3主要接口实现(1)
Hal需要实现的接口就是libhardware\include\hardware\camera3.htypedef struct camera3_device { /** * common.version must equal CAMERA_DEVICE_API_VERSION_3_0 to identify this * device as implementing version 3.0 of the camera device HAL. * * Per
2020-08-05 23:26:31 2050
原创 camerahal之---camerahal流程及使用特性翻译总览(0)
这篇文章主要讲camerahal接口调用流程和使用方法Camera3.h 注释自我笔记1.Camerahal 的版本号:Hal接口camera_module_t.get_camera_info camera_module_t.common.module_api_version实现接口CameraHWInfo::CameraHWInfo() :mMainDevicePathName(DEFAULT_MAIN_DEVICE),mHasMediaController(false){mBoard
2020-08-04 23:09:06 2693
原创 camera应用调用之---camera参数设置(metadata)(4)
摄像头设置参数和获取的时候在hal1的时候是用的SetParameter/GetParameter在hal3中用Metadata取代这种方式,不需要单独调用设置参数,参数可以封装在Capture_Request。创建CameraCaptureSession的会话,系统可以向摄像头发送Capture(包含metadata),摄像头返回metadata,以及buffer。system/media/camera/include/system/Camera_metadata_tags.hcamera_meta
2020-08-03 22:58:23 3338
原创 camera应用调用之---camera数据接收与显示(预览)(3)
1可以认为,创建会话是预览的第一步。上一章节单独开来,以免这内容过多。2之后,需要下发抓图命令设置看过上一章会大概知道各个框架的结构,所以下发命令会更容易看懂应用AndroidCameraDeviceProxy::createCaptureRequest里面调用mCameraDevice.createCaptureRequest具体实现在CameraDeviceImpl::createCaptureRequest()进入framework这里调用简单贴下过程,创建CaptureRequest
2020-08-02 23:17:55 2086 1
原创 camera应用调用之---创建会话(2)
上节说了Open camera成功之后,会返回CameraDeviceImpl,接下来就是创建会话。会话主要创建CameraCaptureSessionImplframeworks\base\core\java\android\hardware\camera2\impl\CameraDeviceImpl.java public void createCaptureSession(List<Surface> outputs, CameraCaptureSessio
2020-08-02 14:32:55 1023
原创 camera应用调用之---open camera流程(1)
网上这个文档应该相当多,早些年其实看文章简单的过了一下,并没有真正记住,但是再自己读着走遍流程并记录下,作为完整文档一部分。安卓系统,各种Manager提供了系统层的控制接口,CameraManager也不例外,除去apk,那camera framework应该从CameraManager入口开始。一般:CameraManager manager =(CameraManager)Context.getSystemService(Context.CAMERA_SERVICE)可以获取CameraMana
2020-08-01 23:20:13 3327
原创 camera启动之---cameraserver启动与cameraprovider链接(4)
Camera服务还是从rc文件开始frameworks/av/camera/cameraserver/cameraserver.rcservice cameraserver /system/bin/cameraserverclass mainuser cameraservergroup audio camera input drmrpc readprocioprio rt 4writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/
2020-08-01 16:38:22 1104
原创 camera启动之---hal3启动(3)
Hal3由cameraprovicer加载并启动。hal开始跑都是先获取硬件信息存入全局变量从上节分析调用到1首先加载的时候hardware/rockchip/camera/Camera3HALModule.cpp调用static void initCameraHAL(void) {ALOGI("@%s: RockChip Camera Hal3 Release version %s ", __FUNCTION__, rkHal3Version);//可以打印跟踪…… Platfor
2020-07-31 23:41:51 1561
原创 camera启动之---cameraprovider加载hal过程(2)
所谓开机的过程就是加载和启动何种服务的过程。上一篇说HwServiceManager启动过程,之后camera provider也会被启动。hardware\interfaces\camera\provider\2.4\default里面有里面的android.hardware.camera.provider@2.4-service.rc 文件编译后会到vendor/etc/init目录下,在开机时,init进程会读取并解析这个脚本,然后启动里面的service.cpp里面有main函数,这就是入口
2020-07-31 12:40:22 1462
原创 camera启动之---HwServiceManager进程启动过程(1)
序言1245为了介绍CameraProvider启动过程,有必要简单说下HwServiceManager进程,因为CameraProvider会注册到HwServiceManager中,是各个硬件进程服务的管理器。HwServiceManager 进程由 init 进程启动脚本hwservicemanager.rc目录在system/hwservicemanager/hwservicemanager.rc我们直接看服务main函数,在system/hwservicemanager/service.c
2020-07-30 23:30:54 1234
原创 camera序言
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-07-30 22:32:05 329
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人