CTS测试中CameraTest#testPreviewFpsRange项
生活随笔
收集整理的這篇文章主要介紹了
CTS测试中CameraTest#testPreviewFpsRange项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)源碼分析
android.hardware.cts.CameraTest#testPreviewFpsRange
這一項測試主要是通過獲取fps range列表,然后通過設置不同的fps參數,來檢測返回的每一幀frame的fps是否在設置的最小值和最大值幀率之間。
這里我們重點關注reset函數,將最小最大fps傳入后。
private final class FpsRangePreviewCbimplements android.hardware.Camera.PreviewCallback {//...public void reset(double minFps, double maxFps) {this.mMinFps = minFps;this.mMaxFps = maxFps;mMaxFrameInterval = 1000.0 / mMinFps;mMinFrameInterval = 1000.0 / mMaxFps;Log.i(TAG, "dxf_reset mMinFps = " + mMinFps + ", mMaxFps = " + mMaxFps+ ", mMinFrameInterval = " + mMinFrameInterval+ ", mMaxFrameInterval = " + mMaxFrameInterval);}// This method tests if the actual fps is between minimum and maximum.// It also tests if the frame interval is too long.public void onPreviewFrame(byte[] data, android.hardware.Camera camera) {//...// Check if the fps is within range.double fpsMargin = 0.5; // x100 = percentif (mIsExternalCamera) {fpsMargin = 0.6;}double avgInterval = (double)(arrivalTime - mFrames.get(0))/ mFrames.size();double fps = 1000.0 / avgInterval;Log.i(TAG, "dxf_Actual_Min avgInterval = " + avgInterval + ", fps = " + fps+ ", mMinFps = " + mMinFps + ", mMinFps * (1.0 - fpsMargin) = " + mMinFps * (1.0 - fpsMargin));//判斷fps是否大于最小幀率的0.5倍assertTrue("Actual fps (" + fps + ") should be larger " +"than min fps (" + mMinFps + ")",fps >= mMinFps * (1.0 - fpsMargin));Log.i(TAG, "dxf_Actual_Max avgInterval = " + avgInterval + ", fps = " + fps+ ", mMaxFps = " + mMaxFps + ", mMaxFps * (1.0 + fpsMargin) = " + mMaxFps * (1.0 + fpsMargin));//判斷fps是否小于最大幀率的1.5倍assertTrue("Actual fps (" + fps + ") should be smaller" +"than max fps (" + mMaxFps + ")",fps <= mMaxFps * (1.0 + fpsMargin));//...} }(2)測試Fail的分析
android.camera.cts android.hardware.cts.CameraTest#testPreviewFpsRange FAILURE: junit.framework.AssertionFailedError: Actual fps (31.15264797507788) should be smallerthan max fps (15.0)at junit.framework.Assert.fail(Assert.java:50)at junit.framework.Assert.assertTrue(Assert.java:20)at android.hardware.cts.CameraTest$FpsRangePreviewCb.onPreviewFrame(CameraTest.java:2307)at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1249)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:223)at android.hardware.cts.CameraTest$1.run(CameraTest.java:204)可以看到實際幀率是31fps,而此刻設置的最大幀率才15fps,所以出現了Fail。測試過程Log如下:
//后攝 I CameraTest: dxf_openId = 0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 10000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 10000 I CameraTest: dxf_reset mMinFps = 10.0, mMaxFps = 10.0, mMinFrameInterval = 100.0, mMaxFrameInterval = 100.0 I CameraTest: dxf_Actual_Min avgInterval = 95.2, fps = 10.504201680672269, mMinFps = 10.0, mMinFps * (1.0 - fpsMargin) = 5.0 I CameraTest: dxf_Actual_Max avgInterval = 95.2, fps = 10.504201680672269, mMaxFps = 10.0, mMaxFps * (1.0 + fpsMargin) = 15.0 I CameraTest: dxf_Actual_Min avgInterval = 98.6, fps = 10.141987829614605, mMinFps = 10.0, mMinFps * (1.0 - fpsMargin) = 5.0 I CameraTest: dxf_Actual_Max avgInterval = 98.6, fps = 10.141987829614605, mMaxFps = 10.0, mMaxFps * (1.0 + fpsMargin) = 15.0CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 15000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 15000 CameraTest: dxf_reset mMinFps = 15.0, mMaxFps = 15.0, mMinFrameInterval = 66.66666666666667, mMaxFrameInterval = 66.66666666666667 I CameraTest: dxf_Actual_Min avgInterval = 68.5, fps = 14.598540145985401, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 68.5, fps = 14.598540145985401, mMaxFps = 15.0, mMaxFps * (1.0 + fpsMargin) = 22.5 I CameraTest: dxf_Actual_Min avgInterval = 67.14285714285714, fps = 14.893617021276597, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 67.14285714285714, fps = 14.893617021276597, mMaxFps = 15.0, mMaxFps * (1.0 + fpsMargin) = 22.5I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 15000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 20000 I CameraTest: dxf_reset mMinFps = 15.0, mMaxFps = 20.0, mMinFrameInterval = 50.0, mMaxFrameInterval = 66.66666666666667 I CameraTest: dxf_Actual_Min avgInterval = 50.0, fps = 20.0, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 50.0, fps = 20.0, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0 I CameraTest: dxf_Actual_Min avgInterval = 49.85, fps = 20.060180541624874, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 49.85, fps = 20.060180541624874, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 20000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 20000 I CameraTest: dxf_reset mMinFps = 20.0, mMaxFps = 20.0, mMinFrameInterval = 50.0, mMaxFrameInterval = 50.0 I CameraTest: dxf_Actual_Min avgInterval = 49.75, fps = 20.100502512562816, mMinFps = 20.0, mMinFps * (1.0 - fpsMargin) = 10.0 I CameraTest: dxf_Actual_Max avgInterval = 49.75, fps = 20.100502512562816, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0 I CameraTest: dxf_Actual_Min avgInterval = 49.7, fps = 20.120724346076457, mMinFps = 20.0, mMinFps * (1.0 - fpsMargin) = 10.0 I CameraTest: dxf_Actual_Max avgInterval = 49.7, fps = 20.120724346076457, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 5000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 30000 I CameraTest: dxf_reset mMinFps = 5.0, mMaxFps = 30.0, mMinFrameInterval = 33.333333333333336, mMaxFrameInterval = 200.0 I CameraTest: dxf_Actual_Min avgInterval = 48.4, fps = 20.66115702479339, mMinFps = 5.0, mMinFps * (1.0 - fpsMargin) = 2.5 I CameraTest: dxf_Actual_Max avgInterval = 48.4, fps = 20.66115702479339, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0 I CameraTest: dxf_Actual_Min avgInterval = 48.75, fps = 20.512820512820515, mMinFps = 5.0, mMinFps * (1.0 - fpsMargin) = 2.5 I CameraTest: dxf_Actual_Max avgInterval = 48.75, fps = 20.512820512820515, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 30000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 30000 I CameraTest: dxf_reset mMinFps = 30.0, mMaxFps = 30.0, mMinFrameInterval = 33.333333333333336, mMaxFrameInterval = 33.333333333333336 I CameraTest: dxf_Actual_Min avgInterval = 35.851851851851855, fps = 27.892561983471072, mMinFps = 30.0, mMinFps * (1.0 - fpsMargin) = 15.0 I CameraTest: dxf_Actual_Max avgInterval = 35.851851851851855, fps = 27.892561983471072, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0 I CameraTest: dxf_Actual_Min avgInterval = 35.57142857142857, fps = 28.11244979919679, mMinFps = 30.0, mMinFps * (1.0 - fpsMargin) = 15.0 I CameraTest: dxf_Actual_Max avgInterval = 35.57142857142857, fps = 28.11244979919679, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0 //前攝 I CameraTest: dxf_openId = 1I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 15000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 15000 I CameraTest: dxf_reset mMinFps = 15.0, mMaxFps = 15.0, mMinFrameInterval = 66.66666666666667, mMaxFrameInterval = 66.66666666666667 I CameraTest: dxf_Actual_Min avgInterval = 68.0, fps = 14.705882352941176, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 68.0, fps = 14.705882352941176, mMaxFps = 15.0, mMaxFps * (1.0 + fpsMargin) = 22.5 I CameraTest: dxf_Actual_Min avgInterval = 67.42857142857143, fps = 14.83050847457627, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 67.42857142857143, fps = 14.83050847457627, mMaxFps = 15.0, mMaxFps * (1.0 + fpsMargin) = 22.5I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 15000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 20000 I CameraTest: dxf_reset mMinFps = 15.0, mMaxFps = 20.0, mMinFrameInterval = 50.0, mMaxFrameInterval = 66.66666666666667 I CameraTest: dxf_Actual_Min avgInterval = 50.31578947368421, fps = 19.874476987447697, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 50.31578947368421, fps = 19.874476987447697, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0 I CameraTest: dxf_Actual_Min avgInterval = 50.0, fps = 20.0, mMinFps = 15.0, mMinFps * (1.0 - fpsMargin) = 7.5 I CameraTest: dxf_Actual_Max avgInterval = 50.0, fps = 20.0, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 20000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 20000 I CameraTest: dxf_reset mMinFps = 20.0, mMaxFps = 20.0, mMinFrameInterval = 50.0, mMaxFrameInterval = 50.0 I CameraTest: dxf_Actual_Min avgInterval = 50.0, fps = 20.0, mMinFps = 20.0, mMinFps * (1.0 - fpsMargin) = 10.0 I CameraTest: dxf_Actual_Max avgInterval = 50.0, fps = 20.0, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0 I CameraTest: dxf_Actual_Min avgInterval = 50.1578947368421, fps = 19.937040923399792, mMinFps = 20.0, mMinFps * (1.0 - fpsMargin) = 10.0 I CameraTest: dxf_Actual_Max avgInterval = 50.1578947368421, fps = 19.937040923399792, mMaxFps = 20.0, mMaxFps * (1.0 + fpsMargin) = 30.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 5000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 30000 I CameraTest: dxf_reset mMinFps = 5.0, mMaxFps = 30.0, mMinFrameInterval = 33.333333333333336, mMaxFrameInterval = 200.0 I CameraTest: dxf_Actual_Min avgInterval = 49.8421052631579, fps = 20.06335797254488, mMinFps = 5.0, mMinFps * (1.0 - fpsMargin) = 2.5 I CameraTest: dxf_Actual_Max avgInterval = 49.8421052631579, fps = 20.06335797254488, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0 I CameraTest: dxf_Actual_Min avgInterval = 49.75, fps = 20.100502512562816, mMinFps = 5.0, mMinFps * (1.0 - fpsMargin) = 2.5 I CameraTest: dxf_Actual_Max avgInterval = 49.75, fps = 20.100502512562816, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0I CameraTest: dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = 30000, fps[Parameters.PREVIEW_FPS_MAX_INDEX] = 30000 I CameraTest: dxf_reset mMinFps = 30.0, mMaxFps = 30.0, mMinFrameInterval = 33.333333333333336, mMaxFrameInterval = 33.333333333333336 I CameraTest: dxf_Actual_Min avgInterval = 33.1, fps = 30.211480362537763, mMinFps = 30.0, mMinFps * (1.0 - fpsMargin) = 15.0 I CameraTest: dxf_Actual_Max avgInterval = 33.1, fps = 30.211480362537763, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0 I CameraTest: dxf_Actual_Min avgInterval = 32.733333333333334, fps = 30.54989816700611, mMinFps = 30.0, mMinFps * (1.0 - fpsMargin) = 15.0 I CameraTest: dxf_Actual_Max avgInterval = 32.733333333333334, fps = 30.54989816700611, mMaxFps = 30.0, mMaxFps * (1.0 + fpsMargin) = 45.0以上所示的Fps Range配置范圍是在metadata中配置的,如下:
//config_static_metadata.tuning_3a.xxxx_mipi_raw.h //后攝 CONFIG_METADATA_BEGIN(MTK_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)CONFIG_ENTRY_VALUE(10, MINT32)CONFIG_ENTRY_VALUE(10, MINT32)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(5, MINT32)CONFIG_ENTRY_VALUE(30, MINT32)CONFIG_ENTRY_VALUE(30, MINT32)CONFIG_ENTRY_VALUE(30, MINT32) CONFIG_METADATA_END() //前攝 CONFIG_METADATA_BEGIN(MTK_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(15, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(20, MINT32)CONFIG_ENTRY_VALUE(5, MINT32)CONFIG_ENTRY_VALUE(30, MINT32)CONFIG_ENTRY_VALUE(30, MINT32)CONFIG_ENTRY_VALUE(30, MINT32) CONFIG_METADATA_END()出現此題的原因可能是效果/sensor drv有問題,導致實際預覽的fps和設置的fps差異過大導致的。
//AE_Tuning_Parastatic AE_DEVICES_INFO_T g_rDevicesInfo ={1024, // u4MinGain32768, // u4MaxGain100, // u4MiniISOGain32, // u4GainStepUnit10000, // u4PreExpUnit30, // u4PreMaxFrameRate10000, // u4VideoExpUnit60, // u4VideoMaxFrameRate1024, // u4Video2PreRatio10000, // u4CapExpUnit30, // u4CapMaxFrameRate1024, // u4Cap2PreRatio10000, // u4Video1ExpUnit30, // u4Video1MaxFrameRate1024, // u4Video12PreRatio10000, // u4Video2ExpUnit30, // u4Video2MaxFrameRate1024, // u4Video22PreRatio//...};(3)在Framework來對此項測試進行規避(Android 11)
此項測試的應用包名和類名如下:
android.camera.cts/android.hardware.cts.GLSurfaceViewCtsActivity(A)在ActivityRecord當中來記錄。
//frameworks/base/services/core/java/com/android/server/wm/ActivityRecord.java//add start String str = intent.getComponent().getClassName(); if (str.contains("android.hardware.cts.CameraCtsActivity")){SystemProperties.set("sys.cts.cameraGLSurfaceView","1"); }else{SystemProperties.set("sys.cts.cameraGLSurfaceView","0"); } //add end(B)在Camera中的幀率使用時進行條件判斷。
//frameworks/base/core/java/android/hardware/Camera.javapublic List<int[]> getSupportedPreviewFpsRange() {String str = get(KEY_PREVIEW_FPS_RANGE + SUPPORTED_VALUES_SUFFIX);//add startif("1".equals(SystemProperties.get("sys.cts.cameraGLSurfaceView","0"))) {str = "(5000,30000)";}//add endreturn splitRange(str);}以上測試具體也可以參考另外一篇文章CTS測試中testCameraToSurfaceTextureMetadata項,二者規避方法一樣。
這種規避方式是只測試[5,30]這一組fps,由于這一組fps的測試范圍較大[2.5,45],從而出現容易pass的情況。
總結
以上是生活随笔為你收集整理的CTS测试中CameraTest#testPreviewFpsRange项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20200417-SiC+移相全桥文献
- 下一篇: 中兴失去的五年——未来该何去何从