参考:https://download.csdn.net/download/who_you_are/9806928
拍照方案
拍照的场景中,一般的视频预览和抓拍的分辨率是不一样的,而且拍照的ISP的效果处理需要对人脸的肤色等做优化处理,也会和视频的预览通路不一样。所以抓拍的数据通路分为单pipe和双pipe两种,并且VI的pipe工作模式分为离线模式和在线模式以及并行模式,拍照的数据通路也建立在VI之上,所以每个pipe可以使用在线或者离线的形式,客户可以根据使用的场景而定。VI和VPSS之间的在线和离线关系只影响到拍照的YUV输出的位置,不影响拍照的控制流。
上文中的单pipe指的是拍照和预览使用同一个ISP通路,双pipe指的是拍照和预览使用的不同ISP通路。
消费类电子还有支持PRO(professional)模式以及zsl(zero shutter lag),PRO模式下ISP会控制sensor的曝光,得到多张曝光时间和增益可调的图片,也可用于HDR算法做多张不同曝光的照片合成,也可以用于拍摄固定曝光时间的照片。zsl模式也就是零延时拍照,可以减少快门或者其他原因的延时,可以拍摄到触发拍照瞬间的图像。
1.双pipe离线的拍照数据通路
双pipe离线的数据通路是一个sensor进来的数据,经过VI dev的时序解析后,分别绑定到2个不同的pipe,上面的pipe用于视频预览和录像,下面的pipe用于拍照。视频的预览和录像的pipe可以在线,可以离线,拍照的pipe是离线的。
预览和录像的分辨率都比较小,所以经过了BAS,做了Bayer scale,主要是减小上面pipe的处理的分辨率,从而降低功耗。DV产品中预览使用的lcd的屏分辨率一般都很小,但是需要预览通路一直存在。
拍照的分辨率比较大,但是用户不会一直拍照,所以下面的pipe用于拍照,一般是在客户需要拍照时才启动下面的pipe通路。
senor的曝光控制是有上面的视频pipe的ISP来控制的。
用户设置曝光相关的属性和触发拍照的接口,用的pipe号都是下面那个拍照用的pipe,内部数据同步有VI和ISP驱动来完成。
2.下面这个是双pipe在线模式拍照:(和上面的离线的模式区别在于拍照的那个pipe是在线的)
3.单pipe的离线拍照数据的通路:
单pipe离线数据通路是视频预览和拍照共用一个pipe。
单pipe离线模式拍照使用的方法是在平时视频预览是整个通路可以采用比较小的分辨率,只有切换到拍照模式的时候才将sensor和VI等切换到大的拍照分辨率。可以节省功耗。
当录像和拍照的分辨率是一样的时候,用户不需要对拍照的isp做特殊的调节,可以从单pipe的视频里面取出YUV编成jpeg来实现拍照的方案。这种方案不需要VI和ISP的驱动做额外的事情,并不需要拍照的mpi的接口。
4.单pipe在线模式的拍照
VI模块目前只支持最多2个pipe的同时在线,如果多个sensor输入的场景,拍照使用在线是,其他的sensor可能要离线处理。
5.并行模式拍照
由于VI_PROC性能的最大是4k@60fps,在VI_CAP输入大数据量的时序超过4k@60fps时,需要采用并行的模式。支持调用mpi的接口来拍照。
6.zsl拍照
zsl模式的拍照通路和双pipe离线模式的拍照通路一样,区别是vi驱动内部会缓存一个RAW数据点额队列。在调用HI_MPI_SNAP_EnablePipe接口后,VI的内部就开始缓存RAW数据,调用HI_MPI_SNAP_TriggerPipe接口会选择zsl的拍照帧,然后将拍照帧送给ISP处理。
7.拼接模式的拍照
拼接的功能是avs的模块实现的。
用户调用HI_MPI_SNAP_MultiTrigger接口拍照,VI驱动内部会将同一时刻不同的sensor的那一帧数据标记为抓拍,用户可以通过venc的HI_MPI_VENC_SetJepgEncodeMode接口编码有抓拍标记的那一帧数据为jpeg。
拍照的后期处理
photo代表消费类的抓拍方案中的拍照后期的算法,包括HDR、mfnr、sfnr、de这几种。拍照后处理算法是运行在CPU和DSP上的软件处理算法。
HDR(high dynamic range):能够提升图像的动态范围,通过拍照的pro模式,得到多张曝光时间和增益可调的图片,然后经过HDR算法合成一张具有高动态范围的图像,相比普通的图像,hdr可以提供更多的动态范围和图像的细节。
HDR合成当前只支持三合一,就是输入三帧不同曝光的连续YUV,输出一张高动态范围的YUV。三帧的输入顺序是最短的曝光的YUV,正常曝光的YUV,长曝光的YUV。
sfnr(single frame noise reduction):单帧降噪。
mfnr(multi frame noise reduction):多帧降噪。当前仅支持四合一的YUV,就是输入四帧连续正常曝光的YUV,输出一张经过时域和空域降噪的yuv。这个算法做完成后,还可以对输出后的yuv做de算法处理。de算法需要的bnr raw数据可以是mfnr输入的四帧yuv里面任意一帧yuv对应的bnr raw。
de(detail enhancement):细节增强。isp中的bnr处理会造成一些细节信息的丢失,de算法可以补偿这些丢失的图像细节。de算法的输入是一张YUV和bnr写出的raw,输出的是细节增强的yuv。输入的bnr raw数据是通过HI_MPI_SNAP_GetBNRRAW接口获取的。
以上几个photo模块的算法处理中的yuv数据仅支持nv12格式(PIXEL_FORMAT_YVU_SEMIPLANAR_420)的非压缩数据,输入图像的动态范围仅支持DYNAMIC_RANGE_SDR8。并且同一时刻只能有一个算法处理被调用,不支持多个算法并行处理。
photo模块的运行依赖于dsp的资源,photo的库默认编译到DSP0的镜像中,所以在调用photo之前需确保调用了HI_MPI_SVP_LoadBin接口加载了DSP0的镜像。(HI_MPI_SVP_DSP_LOadBin具体描述,参考HiSVPN api参考)。