Camera常见问题及方案1

目录

后置人像模式下,人脸坐标显示异常,向左下方偏移

微信在相同的分辨率支持能力下选择小的分辨率

WA方案是sensor锁定在30fps

Usecase/pipelines创建过程log

查看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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塞外totem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值