(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)
以上信息表示最终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)
(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)
(3)CTS测试出现的Fail项
例如如下两项:
我们这里以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();
}
}
可以看到这里也有录像测试,此时测试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)
通过排查发现是需要进行如下修改才可以Pass,移除对应1080P的Preview选项。
//vendor/mediatek/proprietary/custom/mtxxxx/hal/imgsensor_metadata/common/config_static_metadata_project.h

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