MTK平台如何决定SensorMode
(1)决定Scenario的源码
Sensor Scenario是根据App下的Config参数中的image size决定的Scenario。
代码如下:
//vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/policy/config/SensorSettingPolicy.cppenum eMode
{eNORMAL_PREVIEW = 0,eNORMAL_VIDEO,eNORMAL_CAPTURE,eSLIM_VIDEO1,eSLIM_VIDEO2,eCUSTOM1,eCUSTOM2,eCUSTOM3,eCUSTOM4,eCUSTOM5,eCUSTOM6,eCUSTOM7,eCUSTOM8,eCUSTOM9,eCUSTOM10,eCUSTOM11,eCUSTOM12,eCUSTOM13,eCUSTOM14,eCUSTOM15,eNUM_SENSOR_MODE,
};enum{SENSOR_SCENARIO_ID_NORMAL_PREVIEW,SENSOR_SCENARIO_ID_NORMAL_CAPTURE,SENSOR_SCENARIO_ID_NORMAL_VIDEO,SENSOR_SCENARIO_ID_SLIM_VIDEO1,SENSOR_SCENARIO_ID_SLIM_VIDEO2,SENSOR_SCENARIO_ID_CUSTOM1,SENSOR_SCENARIO_ID_CUSTOM2,SENSOR_SCENARIO_ID_CUSTOM3,SENSOR_SCENARIO_ID_CUSTOM4,SENSOR_SCENARIO_ID_CUSTOM5,/*************************************************************************** All unnamed scenario id for a specific sensor must be started with* values >= SENSOR_SCENARIO_ID_UNNAMED_START.**************************************************************************/SENSOR_SCENARIO_ID_UNNAMED_START = 0x100,};FunctionType_Configuration_SensorSettingPolicy makePolicy_Configuration_SensorSetting_Default()
{//...// 3. default rules policy:// find the smallest size that is "larger" than max of stream size// (not the smallest difference)CHECK_ERROR( determineScenDefault(res, pStatic, pParsedAppImageInfo, false) );//...{MINT32 forceSensorMode = ::property_get_int32("vendor.debug.cameng.force_sensormode", -1);if( forceSensorMode != -1 ){switch( forceSensorMode ){case SENSOR_SCENARIO_ID_NORMAL_PREVIEW:res = pStatic->mSetting[eNORMAL_PREVIEW];break;case SENSOR_SCENARIO_ID_NORMAL_CAPTURE:res = pStatic->mSetting[eNORMAL_CAPTURE];break;case SENSOR_SCENARIO_ID_NORMAL_VIDEO:res = pStatic->mSetting[eNORMAL_VIDEO];break;case SENSOR_SCENARIO_ID_SLIM_VIDEO1:res = pStatic->mSetting[eSLIM_VIDEO1];break;case SENSOR_SCENARIO_ID_SLIM_VIDEO2:res = pStatic->mSetting[eSLIM_VIDEO2];break;case SENSOR_SCENARIO_ID_CUSTOM1:res = pStatic->mSetting[eCUSTOM1];break;case SENSOR_SCENARIO_ID_CUSTOM2:res = pStatic->mSetting[eCUSTOM2];break;case SENSOR_SCENARIO_ID_CUSTOM3:res = pStatic->mSetting[eCUSTOM3];break;case SENSOR_SCENARIO_ID_CUSTOM4:res = pStatic->mSetting[eCUSTOM4];break;case SENSOR_SCENARIO_ID_CUSTOM5:res = pStatic->mSetting[eCUSTOM5];break;case SENSOR_SCENARIO_ID_CUSTOM6:res = pStatic->mSetting[eCUSTOM6];break;case SENSOR_SCENARIO_ID_CUSTOM7:res = pStatic->mSetting[eCUSTOM7];break;case SENSOR_SCENARIO_ID_CUSTOM8:res = pStatic->mSetting[eCUSTOM8];break;case SENSOR_SCENARIO_ID_CUSTOM9:res = pStatic->mSetting[eCUSTOM9];break;case SENSOR_SCENARIO_ID_CUSTOM10:res = pStatic->mSetting[eCUSTOM10];break;case SENSOR_SCENARIO_ID_CUSTOM11:res = pStatic->mSetting[eCUSTOM11];break;case SENSOR_SCENARIO_ID_CUSTOM12:res = pStatic->mSetting[eCUSTOM12];break;case SENSOR_SCENARIO_ID_CUSTOM13:res = pStatic->mSetting[eCUSTOM13];break;case SENSOR_SCENARIO_ID_CUSTOM14:res = pStatic->mSetting[eCUSTOM14];break;case SENSOR_SCENARIO_ID_CUSTOM15:res = pStatic->mSetting[eCUSTOM15];break;default:MY_LOGW("Unknown sensorMode: %d", forceSensorMode);break;}CAM_ULOGMI("Force set sensorMode: %d. Selected sensorMode: %d", forceSensorMode, res.sensorMode);}}CAM_ULOGMI("select size(%4dx%-4d)@%-3d sensorMode:%d hdrSensorMode:%d hdrHalMode:%d, hfpsMode:%d",res.sensorSize.w, res.sensorSize.h, res.sensorFps,res.sensorMode,pStreamingFeatureSetting->p1ConfigParam.at(sensorId).hdrSensorMode, pStreamingFeatureSetting->p1ConfigParam.at(sensorId).hdrHalMode, streamHfpsMode);(*pvOut).emplace(sensorId, res);}return OK;};
}static auto
determineScenDefault(SensorSetting& res,std::shared_ptr<SensorParams>& pParams,std::shared_ptr<ParsedAppImageStreamInfo> const& pParsedAppImageInfo,bool isVideo
) -> int
{bool hit = false;for ( int i=0; i<eNUM_SENSOR_MODE; ++i ) {auto const& mode = static_cast<eMode>(i);auto const& size = pParams->mSetting[ pParams->mAltMode[mode] ].sensorSize;MY_LOGI("dxf_determineScenDefault Image.w = %d , Image.h = %d , size.w = %d , size.h = %d , mode = %d",pParsedAppImageInfo->maxImageSize.w,pParsedAppImageInfo->maxImageSize.h,size.w,size.h,mode);if ( !isVideo&& ( mode == eNORMAL_VIDEO|| mode == eSLIM_VIDEO1|| mode == eSLIM_VIDEO2 ) ){MY_LOGI("skip video related mode since it didn't have full capbility");continue;}//通过判断Image Size与Sensor Size来决定Sensor Modeif ( pParsedAppImageInfo->maxImageSize.w <= size.w &&pParsedAppImageInfo->maxImageSize.h <= size.h ){res = pParams->mSetting[ pParams->mAltMode[mode] ];hit = true;break;}}if ( !hit ) {// pick largest oneMY_LOGW("select capture mode");res = pParams->mSetting[eNORMAL_CAPTURE];}return OK;
}
(2)Log分析
04-07 01:16:25.919811 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [0] (1632x1224)@30 sensorMode:0(PREVIEW)
04-07 01:16:25.919832 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [1] (3264x2448)@30 sensorMode:2(VIDEO)
04-07 01:16:25.919850 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [2] (3264x2448)@30 sensorMode:1(CAPTURE)
04-07 01:16:25.919865 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [3] (1632x1224)@30 sensorMode:3(SLIM_VIDEO1)
04-07 01:16:25.919878 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [4] (1632x1224)@30 sensorMode:4(SLIM_VIDEO2)
04-07 01:16:25.919893 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [5] ( 0x0 )@0 sensorMode:5(CUSTOM1)
04-07 01:16:25.919907 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [6] ( 0x0 )@0 sensorMode:6(CUSTOM2)
04-07 01:16:25.919919 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [7] ( 0x0 )@0 sensorMode:7(CUSTOM3)
04-07 01:16:25.919931 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [8] ( 0x0 )@0 sensorMode:8(CUSTOM4)
04-07 01:16:25.919945 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [9] ( 0x0 )@0 sensorMode:9(CUSTOM5)
04-07 01:16:25.919957 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [10] ( 0x0 )@0 sensorMode:10(CUSTOM6)
04-07 01:16:25.919972 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [11] ( 0x0 )@0 sensorMode:11(CUSTOM7)
04-07 01:16:25.919985 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [12] ( 0x0 )@0 sensorMode:12(CUSTOM8)
04-07 01:16:25.919999 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [13] ( 0x0 )@0 sensorMode:13(CUSTOM9)
04-07 01:16:25.920011 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [14] ( 0x0 )@0 sensorMode:14(CUSTOM10)
04-07 01:16:25.920023 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [15] ( 0x0 )@0 sensorMode:15(CUSTOM11)
04-07 01:16:25.920036 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [16] ( 0x0 )@0 sensorMode:16(CUSTOM12)
04-07 01:16:25.920048 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [17] ( 0x0 )@0 sensorMode:17(CUSTOM13)
04-07 01:16:25.920061 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [18] ( 0x0 )@0 sensorMode:18(CUSTOM14)
04-07 01:16:25.920074 987 987 I mtkcam-SensorSettingPolicy: [parseSensorParamsSetting] candidate [19] ( 0x0 )@0 sensorMode:19(CUSTOM15)//Image.w和Image.h为最大配置的Picture Size,size.w和size.h为sensor的pre/cap/video mode配置的grabwindow_width和grabwindow_height
04-07 01:16:25.920378 987 987 I mtkcam-SensorSettingPolicy: [determineScenDefault] dxf_determineScenDefault Image.w = 3264 , Image.h = 2448 , size.w = 3264 , size.h = 2448 , mode = 204-07 01:16:25.920395 987 987 I mtkcam-SensorSettingPolicy: select size(3264x2448)@30 sensorMode:1 hdrSensorMode:0 hdrHalMode:0, hfpsMode:0
04-07 01:16:25.920424 987 987 D mtkcam-ConfigSettingPolicyMediator: [evaluateConfiguration] Configuring fConfigP1HwSetting
04-07 01:16:25.920446 987 987 W mtkcam-P1HwSettingPolicy: [evaluateDeviceRawBitDepth] By default bitdepth:10
04-07 01:16:25.920489 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] max_rrzo_size: target size(6144x4608)
04-07 01:16:25.920514 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] sensor size: target size(3264x2448)
04-07 01:16:25.920526 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] target rrzo stream: target size(1440x1080)
04-07 01:16:25.920537 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] eis lower bound limitation: target size(1440x1080)
04-07 01:16:25.920549 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] preview upper bound limitation: target size(1440x1080)
04-07 01:16:25.920559 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] rrzo size(1440x1080)
04-07 01:16:25.920569 987 987 D mtkcam-P1HwSettingPolicy: [configP1HwSetting] sensor size upper bound limitation: target size(1440x1088)
04-07 01:16:25.920580 987 987 D mtkcam-P1HwSettingPolicy: aligned rrzo size(1440x1088)//kernel log
<4>[46737.150910] (7)[20254:camerahalserver]gc08a3_camera_sensor[control] scenario_id = 1
<4>[46737.174331] (2)[20254:camerahalserver]gc08a3_camera_sensor[get_default_framerate_by_scenario] scenario_id = 1
(3)问题
问:发现预览走某一个Scenario后,拍照并不会重新设定Scenario,这是符合原本设计吗?
答:
符合原本设计,从log中看,拍照帧走的是zsl(零快拍)模式,所以不会在拍照时切换Scenario(sensor mode)
04-07 01:18:34.487293 987 1156 I mtkcam-PipelineModelSession: [submitRequest] <Default/0> requestNo:71 { repeating:0 control.aeTargetFpsRange:5,30 control.captureIntent:2 control.enableZsl:1 control.processRawEn:0 control.mode:1 control.sceneMode:0 control.videoStabilizationMode:0 edge.mode:2 }04-07 01:18:34.503388 987 1156 D mtkcam-PipelineModelSessionDefault: [onProcessEvaluatedFrame] [requestNo:71] submit Zsl Request
MTK平台如何决定SensorMode相关推荐
- MTK平台如何确定Tuning的Scenario
(1)概述 我们都知道,Camera的效果文件在如下目录下,我们以gc08a3_mipi_raw这个摄像头为例来看效果文件的目录结构. vendor/mediatek/proprietary/cust ...
- MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率
1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...
- LinuxGPIO操作和MTK平台GPIO
GPIO口配置是一个历史性的问题,不管我们使用什么MCU,单片机也好,ARM也好,都离不开驱动GPIO口.Linux下有一个宏,GPIO_GPIO_SYSFS,打开这个宏后,编译烧录到设备端,去看看s ...
- mtk android 5.1 logo,Android ROM DIY之MTK平台手机通用移植
在之前的文章中,我们讨论过ROM刷机原理,修改ROM包以及如何让ROM包获取root权限.那么接下来,我们谈谈MTK平台手机ROM移植的话题.如果你是ROM小白,那么建议可以先看看之前的文章. ROM ...
- MTK 平台修改或查看USB驱动能力有三种方法
MTK 平台修改或查看USB驱动能力有三种方法: 1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hardware t ...
- Android Camera (13)---MTK平台相机插值修改
MTK平台相机插值修改 一.注意事项 二.HAL层修改 三.APP层修改 四.部分插值整理 五.快速编译指令 一.注意事项 Camera插值在底层已经做好,我们只需要在中间层和app层添加一个对应的p ...
- Android 系统(205)---MTK平台分区回读
MTK平台分区回读 有时遇到各种开机卡死或重启问题,往往我们依靠分区回读的方法来验证是否为软件问题. 在MTK平台我们利用flash_tool工具来回读分区,简单归结为一下步骤. 1.首先选择Down ...
- Android 系统(159)----MTK 平台过CTA时,发生权限未明示问题
MTK 平台过CTA时,发生权限未明示问题 Background:CTA是针对中国大陆地区的一个安全认证,目的是提高移动智能终端自身的安全防护能力,防范移动智能终端上的各种安全威胁,避免用户的利益受到 ...
- MTK 驱动(78)----MTK 平台查看eMMC和DDR的工作频率
eMMC和DDR的工作clk确认 MTK 平台查看eMMC和DDR的工作频率 eMMC: adb shell cat /sys/kernel/debug/mmc0/clock DDR: adb she ...
最新文章
- 李昱:百度产品登录协议介绍
- C语言 system函数
- Android 开发知识集合目录
- 如何启用计算机的远程服务,远程桌面服务,教您怎么打开远程桌面服务
- gitee如何搭建mysql_Windows基于gitee使用hexo搭建个人博客笔记
- Nodejs系列课程,从入门到进阶帮你打通全栈
- php类3个属性是哪3种,PHP获取类私有属性的3种方法
- gtk-vnc linux,vncviewer远程链接桌面linux
- [转载] python全局变量的使用
- 2021东营高考成绩查询,2021东营市地区高考成绩排名查询,东营市高考各高中成绩喜报榜单...
- Python基础知识从hello world 开始(第一天)
- 数据分析之帕累托(贡献度)分析
- php,tp5关键词,分词模糊查询并根据查询条件排序
- 北京东方国信科技有限公司
- Java爬虫之jsoup的使用
- Leetcode494. 目标和
- PAL和NTSC有什么区别
- 在win7中要修改计算机的虚拟内存,Win7虚拟内存要设置?
- CSS3画布Canvas知识点
- STL和FIG文件的结构