如何修改光圈,焦距等摄像头相关信息
转自:http://blog.csdn.net/fulinwsuafcie/article/details/18617251
Android 平台上使用照相机拍照时,一般都会将当前的拍照参数写入到照片详细信息当中去:
主要有写如下信息:
那么这些信息是在哪里产生的呢,又是怎么写到照片详细信息中去的呢?
其中文件名,时间,路径等信息都是通过上层 APP 直接生成并且写入到详细信息的。而其它的信息则和驱动相关,包括照片宽度,高度,照片大小,光圈,焦距,曝光时间,ISO等参数。
一般摄像头不同,相关的参数就会有差别,摄像头的一些参数信息是直接写在摄像头的驱动信息当中的。我们通过更改驱动信息中的参数就可以最终改变写入到照片详细信息中的各项参数。
拍照的时候上层会通过 Feature Control这个接口来调用 GetExifInfo 的函数,此时 query 到的信息会写进去。具体如下所示:
在驱动中有如下代码:
1 UINT32 HI255BMIPIFeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId, 2 UINT8 *pFeaturePara,UINT32 *pFeatureParaLen) 3 { 4 UINT16 u2Temp = 0; 5 UINT16 *pFeatureReturnPara16=(UINT16 *) pFeaturePara; 6 UINT16 *pFeatureData16=(UINT16 *) pFeaturePara; 7 UINT32 *pFeatureReturnPara32=(UINT32 *) pFeaturePara; 8 UINT32 *pFeatureData32=(UINT32 *) pFeaturePara; 9 PNVRAM_SENSOR_DATA_STRUCT pSensorDefaultData=(PNVRAM_SENSOR_DATA_STRUCT) pFeaturePara; 10 MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData=(MSDK_SENSOR_CONFIG_STRUCT *) pFeaturePara; 11 MSDK_SENSOR_REG_INFO_STRUCT *pSensorRegData=(MSDK_SENSOR_REG_INFO_STRUCT *) pFeaturePara; 12 MSDK_SENSOR_GROUP_INFO_STRUCT *pSensorGroupInfo=(MSDK_SENSOR_GROUP_INFO_STRUCT *) pFeaturePara; 13 MSDK_SENSOR_ITEM_INFO_STRUCT *pSensorItemInfo=(MSDK_SENSOR_ITEM_INFO_STRUCT *) pFeaturePara; 14 MSDK_SENSOR_ENG_INFO_STRUCT *pSensorEngInfo=(MSDK_SENSOR_ENG_INFO_STRUCT *) pFeaturePara; 15 16 17 switch (FeatureId) 18 {<span style="white-space:pre"> </span>…… 19 case SENSOR_FEATURE_GET_RESOLUTION: 20 *pFeatureReturnPara16++=HI255B_FULL_GRAB_WIDTH; 21 *pFeatureReturnPara16=HI255B_FULL_GRAB_HEIGHT; 22 *pFeatureParaLen=4; 23 break; 24 case SENSOR_FEATURE_GET_EXIF_INFO: 25 HI255BMIPIGetExifInfo(*pFeatureData32); 26 break; 27 default: 28 break; 29 } 30 return ERROR_NONE; 31 } /* HI255BMIPIFeatureControl() */ 32 33 void HI255BMIPIGetExifInfo(UINT32 exifAddr) 34 { 35 SENSOR_EXIF_INFO_STRUCT * pExifInfo = (SENSOR_EXIF_INFO_STRUCT*)exifAddr; 36 pExifInfo->FNumber = 24; 37 pExifInfo->CapExposureTime = HI255BMIPI_sensor.capExposureTime; 38 pExifInfo->RealISOValue = HI255BMIPI_sensor.isoSpeed; 39 }
路径:ALPS.JB3.TDD.MP.V2_xxx\mediatek\custom\common\kernel\imgsensor\xxx_mipi_yuv\xxxxyuv_Sensor.c
注意:Exif 信息中,只有光圈即F值,曝光时间及当前实际的 ISO 值是从底层来获取的,其它都是由 hal 层写进去的。
1,FNumber 按照实际的光圈值填写即可;
2,拍照的曝光时间在 Capture 函数里面获取,单位为us(微秒),然后赋给全局变量;
3,ISO 值是指当菜单上的 ISO value 为 Auto 的时候,由驱动通过 ISP 来进行计算得到一个当前的 ISO 值。一般是从 capture 函数里面读当前的 Gain 值, 不同的Gain 值范围对应不同的 ISO 值,这里返回给上层的是 AE_ISO_100, AE_ISO_200 这样的值,与 shutter 一样,不同的sensor 可能判断条件和范围不一样的。
另外,在HAL层 \ALPS.JB3.TDD.MP.V2_TD_XXX\mediatek\platform\mt6572\hardware\camera\core\featureio\pipe\aaa\aaa_hal_yuv.cpp 文件中会去读取摄像头驱动中所摄的参数,如下函数所示:
1 MBOOL Hal3AYuv::set3AEXIFInfo(IBaseCamExif *pIBaseCamExif) const 2 { 3 MY_LOG("[%s()] \n", __FUNCTION__); 4 5 SENSOR_EXIF_INFO_STRUCT mSensorInfo; 6 EXIF_INFO_T rEXIFInfo; 7 memset(&rEXIFInfo, 0, sizeof(EXIF_INFO_T)); 8 memset(&mSensorInfo, 0, sizeof(SENSOR_EXIF_INFO_STRUCT)); 9 10 m_pSensorHal->sendCommand(static_cast<halSensorDev_e>(m_i4SensorDev),SENSOR_CMD_GET_YUV_EXIF_INFO,(int)&mSensorInfo,0,0); 11 12 MY_LOG("FNumber=%d, AEISOSpeed=%d, AWBMode=%d, CapExposureTime=%d, FlashLightTimeus=%d, RealISOValue=%d\n", 13 mSensorInfo.FNumber, m_rParam.u4IsoSpeedMode, m_rParam.u4AwbMode, 14 mSensorInfo.CapExposureTime, m_bExifFlashOn, mSensorInfo.RealISOValue); 15 16 rEXIFInfo.u4FNumber = 24;//mSensorInfo.FNumber>0 ? mSensorInfo.FNumber : 28; 17 rEXIFInfo.u4FocalLength = 319; 18 rEXIFInfo.u4SceneMode = m_rParam.u4SceneMode; 19 rEXIFInfo.u4AWBMode = m_rParam.u4AwbMode; 20 rEXIFInfo.u4CapExposureTime = mSensorInfo.CapExposureTime>0? mSensorInfo.CapExposureTime : 0; 21 rEXIFInfo.u4FlashLightTimeus = m_bExifFlashOn; //mSensorInfo.FlashLightTimeus>0? mSensorInfo.FlashLightTimeus : 0; 22 rEXIFInfo.u4AEISOSpeed = m_rParam.u4IsoSpeedMode; 23 rEXIFInfo.i4AEExpBias = 0; 24 25 pIBaseCamExif->set3AEXIFInfo(&rEXIFInfo); 26 27 return MTRUE; 28 }
照片宽高设置之前的博文中有介绍。浏览模式不知道是一个什么东东?而照片大小则是由 JPEG 压缩比来决定的。
转载于:https://www.cnblogs.com/zl1991/p/5203497.html
如何修改光圈,焦距等摄像头相关信息相关推荐
- mysql 中修改对象_在MySQL中,创建一个数据库后,还可以对象其进行修改,不过这里的修改是指可以修改被创建数据库的相关参数,也可以修改数据库名。...
[多选题]注射时,在( )情况下,采用较高的注射速率. [单选题]通常,所设置的模具温度是指和制品接触的模腔内表面在( ). [单选题]反映某一事件发生强度的指标应选用 [判断题]当试样制备之后 ...
- php http头设置相关信息
HTTP 状态码 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response. HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别 1XX 提示信 ...
- 修改git历史提交的commit信息
本文是基于idea的操作,亲测可用 前言: 很多公司都会自定义 Git - 使用强制策略,那么他的commit信息就会有固定的格式,一旦不是这个格式,就会出现push失败 但是push失败,很多也只在 ...
- 【简易爬虫】找回B站“已失效视频”的相关信息
目录 前言 一.网页抓取已失效视频的相关信息 二.脚本运行环境的配置(PYTHON) 1.配置python环境(略) 2.引入库 三.使用脚本 1.参数count是收藏视频页面的总页数(第四行代码) ...
- Qt windows下获取CPU、主板、硬盘、网卡等相关信息
首先磁盘ID和磁盘序列号是不一样的,磁盘的一些相关信息可通过以下方式获取 查看步骤,右键我的电脑---->选择属性---->选择设备管理器---->展开磁盘驱动器 就可以看到磁 ...
- Android中使用logger打印完整的okhttp网络请求和响应的所有相关信息(请求行、请求头、请求体、响应行、响应行、响应头、响应体)
如果你的项目中的网络请求库是Retrofit的话,他的底层封装的是OkHttp,通常调试网络接口时都会将网络请求和响应相关数据通过日志的形式打印出来.OkHttp也提供了一个网络拦截器okhttp-l ...
- mapgis同arcmap之间的数据转换, 投影变换,误差校正,坐标,基础资料,教程的相关信息的汇集...
关于mapgis同arcmap之间的数据转换, 投影变换,误差校正,坐标,基础资料,教程的相关信息的汇集 "http://www.w3c.org/TR/1999/REC-html401-19 ...
- Linux之显示系统相关信息
戊戌年1月4日 姓名:Kevin 1.显示系统相关信息 uname -a(全部信息) -s(系统名) -n(网络上主机名) -r(内核版本) -v(系统版本) -m(硬件类型) 2.显示/修改计算机主 ...
- 电商收付通,商户进件,上传身份证、营业执照自动识别相关信息
作为开发者,当然希望开发的系统,对使用者能够更友好,使用的越简单,越方便越好,缩短工作时间,提高效率.也可以说是一种使用体验,体验效果越好那当然说明系统越棒了. 二级商户进件的时候,需要提交的资料不少 ...
最新文章
- LTE Paging时频资源
- 一文讲懂图像处理中的低通、高通、带阻和带通滤波器
- Consul入门03 - 注册服务
- [转载]ASP.NET开发经验积累
- python运行列表的结果不同_python 3 代码一模一样,出现运行结果不同的情况(只是不以为一样而已)...
- 233. 数字 1 的个数
- 各位 PHPer,Serverless 正当时
- java内部注释类如何使用_java 内部类的使用
- hnu 暑期实训之公交系统
- Python进阶(六)文件操作
- python中grid的用法_Python Grid使用和布局
- DDD领域驱动设计:四层架构应用
- html关于圣诞节主题的网页,灵感: 8个以圣诞节为主题的网站欣赏
- 浅谈深度信念网络(Deep Belief Network)
- 学计算机的话美国社区大学对应课程,美国加州社区大学转UC伯克利计算机专业有什么课程上的要求?...
- 制定项目目标利器SMART原则
- git rebase命令实际操作记录
- 我是如何把大象装进冰箱里的……
- Java编程学习:初学者怎样学好Java
- centeros7上安装nginx