1.自定义录像分辨率
首先录像分辨率默认限制的是1920x1080,因此当你分辨率为1920x1536进行录像时,就会出现录像失败,会出现如下log报错
Intended video encoding frame height (1536) is too large and will be set to (1080)
Video dimension (1920x1080) is unsupported
根据log报错打印,在frameworks\av\media\libmedia\MediaProfiles.cpp中找到该位置,可以看到minFrameHeight 就是media_profiles.xml文件中的minFrameHeight ;
因此,在xml中可以看到h264编码的限制,将maxFrameWidth 以及 maxFrameHeight的值改大就可以了。所以自定义的录像分辨率,首先判断是否大于1080p,然后按照下面步骤去修改即可。
1.在以下三份文件中,可以参考其它分辨率,去添加你定义的分辨率
packages\apps\Camera2\res\values\arrays.xml
packages\apps\Camera2\res\values\strings.xml
packages\apps\Camera2\src\com\android\camera\settings\SettingsUtil.java
2.framework目录下,以下文件参考其它分辨率进行添加
frameworks\base\core\api\current.txt
frameworks\base\media\java\android\media\CamcorderProfile.java
frameworks\av\media\libmedia\MediaProfiles.cpp
frameworks\av\media\libmedia\include\media\MediaProfiles.h
3.在xml文件中添加你自定义的分辨率
device\rockchip\rk3588\rk3588_s\media_profiles_default.xml
2.录像常见的问题
2.1录像画面显示不全
比如hdmiin输入的分辨率是1080p,那么就会按照1080p进行预览;录像默认的是480p的,因为1920x1080是16:9的,而640x480是4:3的,所以如果录像用480p的话,会因为缩放比例不一致的原因导致录像画面异常;所以只需要在media_profiles_default.xml中添加上1080p分辨率即可。
2.2打开录像功能报错
2.2.1分辨率问题
xml中会用cameraid来识别sensor;每一个sensor都可以根据实际来配置所支持的分辨率,例如你的sensor只支持480p的分辨率,但你在xml中配置了1080p的分辨率;因此在打开录像功能时,会出现如” can't connect to the camera “的情况,那是因为录像时,默认打开了1080p的分辨率!因此在xml中将1080p的注释掉就行了。
<CamcorderProfiles cameraId="0"> <CamcorderProfiles cameraId="1">
还有一种情况就是,我们media_profiles_default.xml一般默认是480p的分辨率,如果你在camera3_profiles.xml中没有添加该480p分辨率,那么打开录像就会报错。
2.2.2帧率问题
遇到过接入USB的双目摄像头发现,拍照是正常的,但是录像的时候会提示报错;在dumpsys media.camera 里 可以看到支持帧率有25 但是没30帧,所以xml 里framerate 改成25就解决了。
2.3录像帧率达不到预期
遇到过camera的预览帧率能达到60fps,但是录像帧率只能达到48fps,这个应该跟CPU调度有关,把CPU全部定到最高频率就能达到60fps了。
2.4录像模糊
可以尝试在xml中改大码率maxBitRate ,改成10M,20M试试