日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTS测试中CameraTest#testPreviewFpsRange项

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTS测试中CameraTest#testPreviewFpsRange项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)源碼分析

android.hardware.cts.CameraTest#testPreviewFpsRange
這一項測試主要是通過獲取fps range列表,然后通過設置不同的fps參數,來檢測返回的每一幀frame的fps是否在設置的最小值和最大值幀率之間。

public void testPreviewFpsRange() throws Exception {for (int id : mCameraIds) {Log.i(TAG, "dxf_openId = " + id);testPreviewFpsRangeByCamera(id);}}private void testPreviewFpsRangeByCamera(int cameraId) throws Exception {initializeMessageLooper(cameraId);// Test if the parameters exists and minimum fps <= maximum fps.final int INTERVAL_ERROR_THRESHOLD = 10;int[] defaultFps = new int[2];Parameters parameters = mCamera.getParameters();parameters.getPreviewFpsRange(defaultFps);//獲取系統可支持fps range列表List<int[]> fpsList = parameters.getSupportedPreviewFpsRange();assertTrue(fpsList.size() > 0);boolean found = false;for(int[] fps: fpsList) {assertTrue(fps[Parameters.PREVIEW_FPS_MIN_INDEX] > 0);assertTrue(fps[Parameters.PREVIEW_FPS_MIN_INDEX] <=fps[Parameters.PREVIEW_FPS_MAX_INDEX]);if (!found && Arrays.equals(defaultFps, fps)) {found = true;}}assertTrue("Preview fps range must be in the supported list.", found);// Test if the list is properly sorted.for (int i = 0; i < fpsList.size() - 1; i++) {int minFps1 = fpsList.get(i)[Parameters.PREVIEW_FPS_MIN_INDEX];int maxFps1 = fpsList.get(i)[Parameters.PREVIEW_FPS_MAX_INDEX];int minFps2 = fpsList.get(i + 1)[Parameters.PREVIEW_FPS_MIN_INDEX];int maxFps2 = fpsList.get(i + 1)[Parameters.PREVIEW_FPS_MAX_INDEX];assertTrue(maxFps1 < maxFps2|| (maxFps1 == maxFps2 && minFps1 < minFps2));}// Test if the actual fps is within fps range.Size size = parameters.getPreviewSize();int format = mCamera.getParameters().getPreviewFormat();int bitsPerPixel = ImageFormat.getBitsPerPixel(format);byte[] buffer1 = new byte[size.width * size.height * bitsPerPixel / 8];byte[] buffer2 = new byte[size.width * size.height * bitsPerPixel / 8];byte[] buffer3 = new byte[size.width * size.height * bitsPerPixel / 8];FpsRangePreviewCb callback = new FpsRangePreviewCb();int[] readBackFps = new int[2];//遍歷fpsList從中拿到最大和最小的Fps,并同步傳入reset函數for (int[] fps: fpsList) {Log.i(TAG, "dxf_fpsList fps[Parameters.PREVIEW_FPS_MIN_INDEX] = " + fps[Parameters.PREVIEW_FPS_MIN_INDEX]+ ", fps[Parameters.PREVIEW_FPS_MAX_INDEX] = " + fps[Parameters.PREVIEW_FPS_MAX_INDEX]);parameters = mCamera.getParameters();//設置需要測試的預覽fpsparameters.setPreviewFpsRange(fps[Parameters.PREVIEW_FPS_MIN_INDEX],fps[Parameters.PREVIEW_FPS_MAX_INDEX]);callback.reset(fps[Parameters.PREVIEW_FPS_MIN_INDEX] / 1000.0,fps[Parameters.PREVIEW_FPS_MAX_INDEX] / 1000.0);mCamera.setParameters(parameters);parameters = mCamera.getParameters();parameters.getPreviewFpsRange(readBackFps);MoreAsserts.assertEquals(fps, readBackFps);mCamera.addCallbackBuffer(buffer1);mCamera.addCallbackBuffer(buffer2);mCamera.addCallbackBuffer(buffer3);mCamera.setPreviewCallbackWithBuffer(callback);mCamera.startPreview();try {// Test the frame rate for a while.Thread.sleep(3000);} catch(Exception e) {// ignore}mCamera.stopPreview();//... }

這里我們重點關注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项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。