介绍除了默认的Preview数据流之外,增加录像数据流。要求同时获取,并能够支持不同的分辨率。
1. 描述
高通平台支持同时获取Preview和录像,要获取双路视频流的话,除了Android系统默认支持获取Preview的数据流外,只需要在软件层面增加获取录像数据流的操作。以下详细介绍如何获取录像的数据流,Preview不做介绍。
2. 分析
首先,camera AF层基本的框架图如下:
Camera的录像的数据流程如下:
可以看出,录像的数据由HAL层回调到Framework层的Camera.cpp中,但并没有将数据丢到对应的Camera.java中,而是丢到CameraSource中,然后OMX Codec通过CameraSource获取数据,直接进行编码存储。
通过Preview和录像的数据流程可以看出,两路数据都会由HAL层回调到在Framework层的Camera.cpp中,对APP 层来说,此处就是数据的源头。由于Android中录像是通过MediaRecorder实现的,但是真正是由Stagefright框架来完成的,MediaRecorder并不直接接触到数据。如果通过MediaRecorder实现数据获取改动较大,不易完成。基于Camera现有的获取Preview数据流的回调机制,再增加录像数据流的回调会更方便。
3. 解决过程
1 新增接口
根据图2-1,Camera.java中没有直接录像的对外接口,所以我们需要添加录像的相关接口如下:
public native final void startRecording() throws IOException;
public native final void stopRecording();
都是本地方法,需要在android_hardware_Camera.cpp中添加映射如下:
{ "startRecording", "()V", (void *)android_hardware_Camera_startRecording },
{ "stopRecording", "()V", (void