• Mtk平台录像失败的简单分析


    (1)Mtk提供的FAQ分析

    在这里插入图片描述

    https://online.mediatek.com/FAQ#/SW/FAQ21583

    (2)MediaRecorder没有录取到数据的报错

    07-04 19:23:41.029   645  7726 E MPEG4Writer: The number of recorded samples is 0
    07-04 19:23:41.029   645  7726 E MPEG4Writer: 0 frames to dump timeStamps in Video track 
    07-04 19:23:41.030   645  7726 I MPEG4Writer: Received total/0-length (0/0) buffers and encoded 0 frames. - Video
    07-04 19:23:51.058   645  1823 E MPEG4Writer: Stop() called but track is not started or stopped
    07-04 19:23:51.065  7146  7146 E MediaRecorder: stop failed: -1007 0xa983cb80
    
    07-04 19:23:51.155  7146  7167 E TestRunner: java.lang.RuntimeException: stop failed.
    07-04 19:23:51.155  7146  7167 E TestRunner: 	at android.media.MediaRecorder.stop(Native Method)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    以上信息表示最终buffer没有写进MPEG4Writer。

    可从以下方面进行检查:

    (A)关掉fuse尝试

    //可以输入如下命令关掉fuse,看一下是否是fuse导致的 
    adb root
    adb shell setprop persist.sys.fflag.override.settings_fuse false
    adb shell setprop persist.sys.fuse false
    adb reboot
    
    //或者使用settings:
    Settings->System->Developer options->Feature flags 
    Close the settings_fuse item, then restart the phone
    
    //查看是否已关闭:
    adb shell "mount | grep fuse"
    
    none on /sys/fs/fuse/connections type fusectl (rw,relatime)
    /dev/fuse on /mnt/user/0/emulated type fuse (rw,lazytime,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,allow_other)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    (B)metadata当中MTK_SENSOR_INFO_TIMESTAMP_SOURCE配置的检查

    //低端平台不支持MTK_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
    CONFIG_ENTRY_VALUE(MTK_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME, MUINT8)
    
    CONFIG_ENTRY_VALUE(MTK_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN, MUINT8)
    
    • 1
    • 2
    • 3
    • 4

    (3)CTS测试出现的Fail项

    例如如下两项:

    • CtsCameraTestCases——android.hardware.cts.CameraTest#testRecordingHint()
    • CtsCameraTestCases——android.hardware.cts.CameraTest#testLockUnlock()

    我们这里以testRecordingHint为例,简单看一下最终调用到的源码。

    private void recordVideoSimple(CamcorderProfile profile,
                  SurfaceHolder holder) throws Exception {
              mCamera.unlock();
              MediaRecorder recorder = new MediaRecorder();
              try {
                  recorder.setCamera(mCamera);
                  recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
                  recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                  recorder.setProfile(profile);
                  recorder.setOutputFile(mRecordingPath);
                  recorder.setPreviewDisplay(holder.getSurface());
                  recorder.prepare();
                  recorder.start();
                  Thread.sleep(2000);
                  recorder.stop();
              } finally {
                  recorder.release();
                  mCamera.lock();
              }
          }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    可以看到这里也有录像测试,此时测试Fail的原因如下:

    //Fail原因
    07-04 19:23:41.029   645  7726 E MPEG4Writer: The number of recorded samples is 0
    07-04 19:23:41.029   645  7726 E MPEG4Writer: 0 frames to dump timeStamps in Video track 
    07-04 19:23:41.030   645  7726 I MPEG4Writer: Received total/0-length (0/0) buffers and encoded 0 frames. - Video
    
    //Fail Log选择的Size
    07-04 19:23:29.891  6313  6313 I mtkcam-dev3-utils: [beginConfigureStreams] stream re-configuration: streamId:0 type(0:0) size(1920x1080:1920x1080) format(34:34) dataSpace(0:0) usage(0x900:0x900)
    
    //Pass Log选择的Size
    07-04 20:57:13.285   717   717 I mtkcam-dev3-utils: [beginConfigureStreams] stream re-configuration: streamId:0 type(0:0) size(1280x720:1280x720) format(34:34) dataSpace(0:0) usage(0x900:0x900)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    通过排查发现是需要进行如下修改才可以Pass,移除对应1080P的Preview选项。

    //vendor/mediatek/proprietary/custom/mtxxxx/hal/imgsensor_metadata/common/config_static_metadata_project.h
    
    • 1

    在这里插入图片描述
    具体原因应该是1080P超出了2M的Sensor的Spec,进而导致Sensor不出数据,最终没有数据写入MPEG4Writer。

  • 相关阅读:
    解决docker运行elastic服务端启动不成功
    Leaflet结合Echarts实现迁徙图
    GraphQL(1):GraphQL简介
    [Vulnhub] mrRobot
    GB/T 14710-2009 医用电器环境要求及试验方法
    linux之前后端项目部署与发布
    EGF中多项式exp的组合意义
    基于逻辑回归、SVM 等算法预测用户信用评分 代码+数据
    【指纹识别】基于Gabor滤波器的指纹识别研究附matlab代码
    [033量化交易] python获取每股收益 净利润 总股本
  • 原文地址:https://blog.csdn.net/dongxianfei/article/details/125624458