camera video数据流
在Android系统中,实现一个具有录像功能的应用程序只需要调用MediaRecorder的相应接口即可。下面简单分析下从MediaRecorder往下的结构:
支撑MediaRecorder的framework结构
APP调用的应用层MediaRecorder接口最终对应的实质接口位于StagefrightRecorder.cpp中,在这里面会统一管理录像需要的视频数据、音频数据、编码器等;这里只关注视频数据的情况,StagefrightRecorder通过CameraSource来获取视频数据,这个CameraSource往下的结构见下图:
CameraSource往下的软件结构
可以看到CameraSource最终还是通过Camera框架中的客户端接口来实现对camera的控制。对于camera录像的回显和编码,CameraSource中注册的数据回调接口会传递到HAL层,这样HAL层调用回调后StagefrightRecord即可通过CameraSource得到图像帧来编码;另外,开始录像时调用setPreviewDisplay接口传递的一个surface到HAL层后,HAL层会直接去写surface对应的buffer来回显。