通过LOG分析可知
1.360Camera App有把Preview Size从728x480 改成854x480
01-01 00:20:50.833 146 2180 D MtkCam/ParamsManager:[setParameters] Preview Size change: 728x480/854x480 -> (854x480)
2.传递给Camera Service的Surface是Null.
01-01 00:20:50.743 1896 1896 D Camera : app passedNULL surface
01-01 00:20:50.744 141 396 I SurfaceFlinger: [staticbool android::LayerScreenshot::isFrozen()] LayerScreenshot top:163 (orient:128,alpha:1)
01-01 00:20:50.744 141 396 I SurfaceFlinger: No needto freeze screen...
01-01 00:20:50.744 141 396 D hwcomposer_v1.0: [HWC]pre=2/gl=1/ui=0/mm=0
01-01 00:20:50.744 141 396 I SurfaceFlinger:[doDisplayComposition] skip composition for DisplayDevice(type:0) sincedirtyRegion is empty
01-01 00:20:50.744 141 396 D hwcomposer_v1.0: [SYNC]Disable unused layers...
01-01 00:20:50.746 141 1123 D SurfaceFlinger:requestNextVsync(575)
01-01 00:20:50.747 146 146 D CameraClient:setPreviewDisplay(0x0) (pid 1896)3.
3.360Camera APP有去拿Preview Buffer,一次handleMessage:16 表示 Camera App Framework传递一帧Preview FrameBuffer给APP
01-01 00:20:51.800 1896 1896 I Camera : handleMessage:16
01-01 00:20:52.234 1896 1896 I Camera : handleMessage:16
01-01 00:20:52.406 1896 1896 I Camera : handleMessage:16
01-01 00:20:52.531 1896 1896 I Camera : handleMessage:16
4. 猜测Render Tag是Camera360App打出来的。
01-01 00:20:51.211 1896 1896 E Render : Previewsize:854/480
01-01 00:20:51.211 1896 1896 E Render : Screensize:737/480
可以得到如下结论:
360Camera APP是拿到Preview Buffer,处理后(加特效 or resize等)再交给Surface Flinger去display的。
Render应该是根据Preview Size和Screen Size算出一个ratio,对Preview Buffer做resize。
但这里拿到的Screen Size是一个奇怪的值:737x480,具体的逻辑可能需要看Source Code才知道。
能断定是360Camera App问题,可能未考虑到ScreenSize为737x480 这种Case。
這是三方Camera app的問題,他可能沒有處理比較特殊的比例,
所以三方Camera App有打Error log.
本文分析了360CameraApp在预览尺寸调整过程中的问题,发现应用将预览尺寸从728x480更改为854x480,并且在某些情况下传递给CameraService的Surface为Null。此外,还发现应用获取了预览缓冲区并进行了处理(如加特效或调整大小),然后将其传递给SurfaceFlinger进行显示。在处理过程中遇到了一个奇怪的屏幕尺寸737x480的问题。
823

被折叠的 条评论
为什么被折叠?



