(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相关推荐

  1. MTK平台如何确定Tuning的Scenario

    (1)概述 我们都知道,Camera的效果文件在如下目录下,我们以gc08a3_mipi_raw这个摄像头为例来看效果文件的目录结构. vendor/mediatek/proprietary/cust ...

  2. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  3. LinuxGPIO操作和MTK平台GPIO

    GPIO口配置是一个历史性的问题,不管我们使用什么MCU,单片机也好,ARM也好,都离不开驱动GPIO口.Linux下有一个宏,GPIO_GPIO_SYSFS,打开这个宏后,编译烧录到设备端,去看看s ...

  4. mtk android 5.1 logo,Android ROM DIY之MTK平台手机通用移植

    在之前的文章中,我们讨论过ROM刷机原理,修改ROM包以及如何让ROM包获取root权限.那么接下来,我们谈谈MTK平台手机ROM移植的话题.如果你是ROM小白,那么建议可以先看看之前的文章. ROM ...

  5. MTK 平台修改或查看USB驱动能力有三种方法

    MTK 平台修改或查看USB驱动能力有三种方法:  1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hardware t ...

  6. Android Camera (13)---MTK平台相机插值修改

    MTK平台相机插值修改 一.注意事项 二.HAL层修改 三.APP层修改 四.部分插值整理 五.快速编译指令 一.注意事项 Camera插值在底层已经做好,我们只需要在中间层和app层添加一个对应的p ...

  7. Android 系统(205)---MTK平台分区回读

    MTK平台分区回读 有时遇到各种开机卡死或重启问题,往往我们依靠分区回读的方法来验证是否为软件问题. 在MTK平台我们利用flash_tool工具来回读分区,简单归结为一下步骤. 1.首先选择Down ...

  8. Android 系统(159)----MTK 平台过CTA时,发生权限未明示问题

    MTK 平台过CTA时,发生权限未明示问题 Background:CTA是针对中国大陆地区的一个安全认证,目的是提高移动智能终端自身的安全防护能力,防范移动智能终端上的各种安全威胁,避免用户的利益受到 ...

  9. MTK 驱动(78)----MTK 平台查看eMMC和DDR的工作频率

    eMMC和DDR的工作clk确认 MTK 平台查看eMMC和DDR的工作频率 eMMC: adb shell cat /sys/kernel/debug/mmc0/clock DDR: adb she ...

最新文章

  1. 李昱:百度产品登录协议介绍
  2. C语言 system函数
  3. Android 开发知识集合目录
  4. 如何启用计算机的远程服务,远程桌面服务,教您怎么打开远程桌面服务
  5. gitee如何搭建mysql_Windows基于gitee使用hexo搭建个人博客笔记
  6. Nodejs系列课程,从入门到进阶帮你打通全栈
  7. php类3个属性是哪3种,PHP获取类私有属性的3种方法
  8. gtk-vnc linux,vncviewer远程链接桌面linux
  9. [转载] python全局变量的使用
  10. 2021东营高考成绩查询,2021东营市地区高考成绩排名查询,东营市高考各高中成绩喜报榜单...
  11. Python基础知识从hello world 开始(第一天)
  12. 数据分析之帕累托(贡献度)分析
  13. php,tp5关键词,分词模糊查询并根据查询条件排序
  14. 北京东方国信科技有限公司
  15. Java爬虫之jsoup的使用
  16. Leetcode494. 目标和
  17. PAL和NTSC有什么区别
  18. 在win7中要修改计算机的虚拟内存,Win7虚拟内存要设置?
  19. CSS3画布Canvas知识点
  20. STL和FIG文件的结构

热门文章

  1. matlab绘制银河系,科学家们是如何绘制宇宙星系图的?
  2. docker logs-查看docker容器日志
  3. cxf webservice接口
  4. php页面会返回状态200,服务器404错误页面http状态返回值为200的原因解析
  5. 图像视频伪造检测,针对DeepFake技术检测效果不佳
  6. aws云服务器会自动扣费吗,亚马逊AWS云服务器不合理扣费怎么处理
  7. 基于SpringBoot生鲜商城
  8. Unet实现细胞分割
  9. SameSite cookie 理解与设置
  10. 浏览器被劫持打开变成hao123 和 vs CODE编译器无法打开浏览器问题