目录
查看APP设置的fps以及计算得到的m_usecaseNumBatchedFrames, selected use case信息
后置人像模式下,人脸坐标显示异常,向左下方偏移
现象:问题出现的时候可以发现人脸框的大小为实际的两倍,图像移动的时候跟随相同方向移动。
原因:双摄的时候打开的为虚拟ID, 其中包含了两个摄像头信息,在数据返回的时候ReturnFrameworkResult函数中,会根据是否为remosaic sensor对metadata做一次除2处理。除2处理的信息包括:ANDROID_SCALER_CROP_REGION/
ANDROID_CONTROL_AE_REGIONS/ANDROID_CONTROL_AF_REGIONS/ANDROID_STATISTICS_FACE_RECTANGLES/,为了解决CTS问题才这个处理过程中,删除了定焦sensor的ANDROID_CONTROL_AF_REGIONS信息,并设置ANDROID_LENS_STATE为ANDROID_LENS_STATE_STATIONARY。
我们出问题的原因是IsQuadCFASensor的判断错误,错误的原因是当前cameraID信息中保存的是tel 模组的信息(tel跟wide在F7B项目上是反的),使用tel的信息去做判断,结果为非remosaic sensor,所有上面的这些坐标都没有进行除2处理,所以结果为放大2倍的位置信息。处理方法为搜索当前id对应的所有physical camera信息,查看是否有qcaf的设置,如果能找到,则判断当前为qcfa sensor.
微信在相同的分辨率支持能力下选择小的分辨率
现象:微信朋友圈中拍照,图片尺寸为352×800,对比机拍摄的图片为896*1920,拍摄的照片质量较差
原因:微信的照片是取的预览中的数据进行的jpeg,所以预览的分辨率决定了最终生成照片的尺寸,对比机选择的为1920×1440,而我们的选择为800×600,查找分辨率支持,我们也对1920×1440进行了支持,而且屏幕的分辨率也是一样的1080×2340但是为什么没有选到呢?原来微信应用对分辨率的支持取决于1.屏幕分辨率的大小. 2.应用能够使用的内存的大小即[dalvik.vm.heapsize]:配置,当大于等于512m时才选择1080P之上的分辨率,如果小于这个值的话,分辨率则不超过1080P,getprop dalvik.vm.heapsize发现我们的F7B项目设置的为256M,所以选择到了小分辨率上面.通过设置setprop dalvik.vm.heapsize 512m后发现表现很F1一致,选择的分辨率为1920×1440,拍摄图片正常.
相关文件:device/xxxx/yyyy /yyyy.mk dalvik.vm.heapsize=XXXm
WA方案是sensor锁定在30fps
.../camx/src/swl/sensor/camxsensornode.cpp
VOID SensorNode::PrepareSensorUpdate(SensorParam* pSensorParam, NodeProcessRequestData* pNodeProcessRequestData)
if (pSensorParam->currentLineCount > (frameLengthLines - pExposureControlInfo->verticalOffset))
{
pSensorParam->currentLineCount = frameLengthLines - pExposureControlInfo->verticalOffset;
}
Usecase/pipelines创建过程log
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][0] 0 //ZSLSnapshotJpegType = 0, // snapshot to JPEG
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][1] 5 //ZSLPreviewRawType, // preview
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][2] 2 //InternalZSLYuv2JpegType, // YUV to JPEG
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][3] 4 //Merge3YuvCustomTo1YuvType, // merge 3 YUV to 1 YUV
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][4] 1 //ZSLSnapshotYUVType, // snapshot to YUV
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][5] 7 //MFNRPrefilterType, // MFNR prefilter
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][6] 8 //MFNRBlendType, // MFNR blend
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][7] 9 //MFNRPostFilterType, // MFNR post filter
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][8] 3 //InternalZSLYuv2JpegMFNRType, // YUV to JPEG for MFNR
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][9] 15 //AdvancedAsdMetaType, //add for feature asd
E CHIUSECASE: [ERROR ] chxadvancedcamerausecase.cpp:6123 BuildUsecase() pipelines[0][10] 10 //SWMFMergeYuvType, // SW multi frame
m_pipelineToSession[11]: = {0, 1, 2, 3, 4, 5, 5, 5, 5, 6, 7};
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [0/11], pipeline name:ZSLSnapshotJpeg, pipeline type:0, session id:0, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [1/11], pipeline name:ZSLPreviewRaw, pipeline type:5, session id:1, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [2/11], pipeline name:InternalZSLYuv2Jpeg, pipeline type:2, session id:2, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [3/11], pipeline name:Merge3YuvCustomTo1Yuv, pipeline type:4, session id:3, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [4/11], pipeline name:ZSLSnapshotYUV, pipeline type:1, session id:4, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [5/11], pipeline name:MfnrPrefilter, pipeline type:7, session id:5, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [6/11], pipeline name:MfnrBlend, pipeline type:8, session id:5, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [7/11], pipeline name:MfnrPostFilter, pipeline type:9, session id:5, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [8/11], pipeline name:InternalZSLYuv2JpegMFNR, pipeline type:3, session id:5, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [9/11], pipeline name:AdvancedAsdMeta, pipeline type:15, session id:6, camera id:2
I CHIUSECASE: [INFO ] chxadvancedcamerausecase.cpp:4335 Initialize() [10/11], pipeline name:SWMFMergeYuv, pipeline type:10, session id:7, camera id:2
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x759cdf3000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper1, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09df760, name: NodeCommonThreadJobFamily0x759d28a000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b08d3908, name: imx586_sunny, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b08d3908, name: imx586_sunny_OIS, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x759a9f2000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper2, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper1, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x75985a2000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper3, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper2, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0a40bb0, name: NonCameraSensors, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x75941b0000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper4, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper3, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x7591fe7000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper5, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper4, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x758fbc1000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper6, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper5, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x758c3ef000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper7, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper6, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b09af298, name: Metadata Type: PerFrameDebugData P:0x7589ff3000, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0978210, name: DeferredWorkerWrapper8, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper7, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b08363f0, name: FDManagerThread, handle: 0
CamX : [ERROR][UTILS ] camxthreadjobregistry.cpp:97 RegisterNewJob() Registering a new job - addr: 0x75b0970c30, name: CHISessionWrapper8, handle: 0
查看APP设置的fps以及计算得到的m_usecaseNumBatchedFrames, selected use case信息
E CHIUSECASE: [CONFIG ] chxextensionmodule.cpp:2109 InitializeOverrideSession() Session_parameters FPS range 30:30, BatchSize: 1 FPS: 30 SkipPattern: 1, cameraId = 0 selected use case = 1
CHX_LOG("Sensor Output for cameraID %d, RAW: %dX%d, output: %dX%d", cameraID, *pSensorw, *pSensorh, maxWidth, maxHeight);