枚举视频捕获设备：https://learn.microsoft.com/zh-cn/windows/win32/medfound/enumerating-video-capture-devices

媒体基础中的音频/视频捕获：https://learn.microsoft.com/zh-cn/windows/win32/medfound/audio-video-capture-in-media-foundation，里面有枚举打印示例代码。

如何设置视频捕获格式：https://learn.microsoft.com/zh-cn/windows/win32/medfound/how-to-set-the-video-capture-format



```
palmDetectionProcess
facePalmDetectionProcess # 处理每帧，在MPP的回调函数里面
uart_msg_proc() -> cmd_exec()执行串口协议命令

sock_cmd_exec() 内部线程逻辑之间通信

线程函数frame_proc_task()
algo_cb()->onFacePalmDetectionPassed()->app_server_alive()->sock_cmd_exec:SOCK_CMD__ALIVE_PALM

ST__PlamRegister()->__PalmRegister() -> PalmFeatureExtract() -> spv2_get_feature()

frame_proc_task()
frame_sync_task() // L015 V200 __DUAL_SNS_FAKE__ 双sensor活体
```



## 门锁开发环境搭建

安装如下 python 环境：

```shell
sudo apt-get install lz4 unzip python3-pip
pip3 install yoctools # 安装在 ~/.local 目录下

# Ubuntu下product实际为product64
cd ~/.local/bin
ln -s product64 product

# 以下两条命令打印版本，验证是否安装成功，如无版本信息输出，最好重启一下机器。可能安装yoctools后，可能yoc、product还找不到
yoc -V	
product version

# 将 python 软链接定向为 python3
cd /usr/bin
ln -s python3 python
```

原门锁构建环境应该是采用 CenterOS 搭建的，所以很多脚本使用的是 `sh`，在 Ubuntu 环境下，需要注意构建输出，一旦出现疑似脚本错误的问题，可以将脚本开头的 `#/bin/sh` 改为 `#/bin/bash` 再重试。例如脚本文件 `Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1/bin/riscv64-unknown-elf-g++`。

修改编译器位置，我习惯于将编译器独立于项目工程之外：

```makefile title="solutions/smart_doorbell/Makefile"
HOST_TOOLS := /opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1/bin
```

上述步骤执行完毕之后，即可编译打包：

```shell
./boot-rebuild.sh # 编译boot
./rebuild-app.sh y L015 V200 R002	# 编译烧录固件

# 编译OTA固件，11为OTA版本号,这个版本号只做固件文件名显示。
# 实际的版本设置在 cv181x_alios/solutions/smart_doorbell/package.yaml.L015_V200R002 
./rebuild-app-ota.sh y L015 V200 R002 05
600X800
```





# Flash设置

```
__FLASH_16MB__
cv181x_alios/boards/cv181xc_qfn/configs/config.yaml
cv181x_alios/boards/cv181xc_qfn/configs/partition_alios_spinor.xml
cv181x_alios/solutions/smart_doorbell/face_lock_app/flash-part.h
```

修改`cv181x_alios/pack-ota.sh`,以支持将boot打进ota升级文件中。（有升级变砖风险）

```
# $ota_pack_tool $OTA_PKG imtb yoc.bin algo.bin.1 boot $@
```

