摄像头录像开发流程
音视频录像开发流程
此文档主要以方便客户可以快速开发为目的,所以此文档主要说明录像组件开发demo 的使用。客户可在文档下留言,会动态对文档进行改动。
1. 录像功能开发的流程图

图 1
2. 录音功能开发的流程图

图2
3. 原理图
3.1.音频音频硬件连接原理图

图4
注意,MIC和MICLDO 的硬件连接分别是PA1和PA0。
3.2. BF30A2t 图像传感器的硬件连接原理图

图5
4. 音视频录像组件的软件开发流程
4.1.图像录像开发流程
1) 相关宏定义
文件路径:apps\watch\board\br28\board_ 701n_demo\board_ 701n_demo.capps\watch\video\avi_recode_demo.c
I2C结构体配置const struct soft_iic_config soft_iic_cfg[]={}主要配置IIC 的硬件 GPIO 引脚。 而\avi_recode_demo . c 的宏定义, 只要配置 JPG 编码对应配置,包括 SPI 数 据 包 包 头 SPI_FEND_SIZE、 包 尾 SPI_LEND_SIZE、 以 及 行 头 SPI_FHEAD_SIZE 和行尾 SPI_LHEAD_SIZE 的大小。 同时,配置图像的像素为 240* 320, JPG 一次编码的大小为 DMA_LBUF_SIZE,但注意, 当 JPG 编码质量大的时候需要增大该变量。 SPI 通信是 JL701N 使用 SPI2 从机通信, SPI 时钟由 IO_PORTA_ 05 提供。
图6
2) 按键响应和处理事件入口
文件路径:apps\watch\task_manager\app_common.c
使用按键作为录像事件的触发机制, key2是触发录像功能, key l是复位,也是触发录像回放的按键。
图7
通过 key2 按键事件 KEY_UI_SHORTCUT 触发录像组件的录像功能,其中 avi_set_recode_flag()和 reset_stop_flag()函数分别是视频流转化为avi编码的标志和停止录像的标志,avi_recode_demo()函数是获取视频流后,进行avi视频编码函数,set_play_mode(1)设置开始录像的标志;
图8
2) avi录像编码函数
文件路径:apps\watch\video\avi_recode_demo.c
avi_recode_demo()是avi视频编码函数,其主要是配置音视频同步封装配置, 以及实现 avi视频编码功能,其中vpkg_cycle_time = cycle_time配置视频采样率,info.minfo.vid_fps = fps 是配置视频帧率, 该图像传感器的最大视频帧率为 30fps,值得注意的是, info.minfo.aud_en = l是开启音频封装的重要标志, 同时,音频的采样率info.minfo.aud_sr = 8000要和mic 的adc采样率保持一致。
图9
3) 录像标志
文件路径:apps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c
set_play_mode()函数是设置录像与否的标志,通过设置play_mode变量的值来决定是否开始录像,play_mode=l开始录像,play_mode=0 回放录像,这两个状态是在ui_action_watch.c 文件中DRAW_DEMO_onchange()函数中通过ON_CHANGE_FIRST_SHOW事件实现,如图 ll所示。
图 10
4) 录像开始线程
文件路径:apps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c cpu\br28\audio_enc\audio_mic_cbuf.c 和apps\watch\video\avi_recode_demo.c
开启录像操作的函数在是DRAW_DEMO_onchange()函数中实现,在play_mode置位 1 的时候,开启录音线程creat_aud_task()和录像线程creat_vid_task(); 其内部实现的函数如图 14和图 12所示。
图 11
5) 音视频流处理线程
a. 录视频文件路径:apps\watch\video\avi_recode_demo.c
视频录制线程实现函数vid_stream_task(),其内容是初始化BF30A2 图像传感器和开启 mic数据采集,其内容二是通过spi获取图像传感器数据,将分辨率为240320 的图像保存在lbuf 中,并通过将240320分辨率的图片分成10张分辨率为240*32 的图片进行YUV编码处理。
需要注意是,音频和视频流的avi编码接口函数aud_din(u8 *data, u32 len)和 vid_stream_din(u8 *data, u32 len)的传参指针u8 *data是需要外部申请一段动态内存后传入,其在avi编码函数内部自动进行释放,若传参指针变量不是动态申请的内存,可能会出现系统错误等问题。
图 12
Mic录音的adc采样率MIC2CBUF_SR宏大小要与avi音频编码的info. minfo.aud_sr = 8000 采样率保持一致。
图 13
b. 录音文件路径:cpu\br28\audio_enc\audio_mic_cbuf.c
音频数据采用cbuf 的管理方式,每次编码8K数据(对应avi编码的buf 大小)。
图 14
6) 录像播放线程
文件路径:apps\watch\task_manager\app_common.c和apps\watch\video\avi_replay_demo.capps\watch\ui\lcd\STYLE_WATCH_NEW\ui_action_watch.c
图 15
a. 文件路径:apps\watch\task_manager\app_common.capps\watch\video\avi_replay_demo.c
图 16
4.2.录像结束
回播结束:删除回播线程;
录像结束:删除录音线程、录像线程和avi视频编码线程:
图 17
5. 修改的文件全观

图 18
