
<img src="https://i-blog.csdnimg.cn/direct/b3888b ... fe3f7d.png" alt="在这里插入图片描述">

(因为不知道那种图片格式可以插入, 所以三种都列出来)
介绍: 我正在测试 ESP32P4 接 OV5645 摄像头, 再通过 高速 USB 接 PC , 通过 PotPlayer 64 bit 接收 MJPEG 或 H264 功能, 参考官方例程 esp-video-components/esp_video/examples/uvc
问题: P4 输出 H264 需要通过 M2M 转换, 输入格式只支持 YUV420 (格式顺序如下), 在摄像头驱动库中有提供几种预设的配置 managed_components\espressif__esp_cam_sensor\sensors\ov5645\ov5645.c , 其中有包含 YUV420 的格式, 但实际使用发现这样编码出来的 H264 是绿屏效果, 如上面镇楼图.
* @note ESP_H264_RAW_FMT_O_UYY_E_VYY格式说明:
* - 奇数行: u y y u y y u y y...
* - 偶数行: v y y v y y v y y...
分析①: 我起初怀疑是我编码配置没设置好等原因, 因为我使用AI生成理论YUV420数据丢进去编码, 依旧是显示不正常的, 后来通过例程 https://github.com/espressif/esp-idf/tr ... erals/h264 和 手册 https://docs.espressif.com/projects/esp ... .html#jpeg 明白, 实际上所需的 YUV420 格式还不是常规的平面顺序, 是交错顺序. 然后再使用AI生成彩色条形码数据, 再编码为H264, 显示正常.
分析②: 将摄像头输出格式修改为RGB565, 通过遍历数组逐一修改像素点的方式, 转换为 YUV420, 再编码H264, 显示正常. 使用 像素处理加速器 (PPA) 外设进行转换, 效果一样, 显示正常. 但是这样的帧率极低. 原本960P有30帧/秒, 骤降只有12帧/秒了.
分析③: 对比库中的寄存器数组配置 ov5645_MIPI_2lane_yuv420_960p_30fps / ov5645_MIPI_2lane_yuv422_960p_30fps / ov5645_MIPI_2lane_rgb565_960p_30fps . 发现配置项完全相同, 除了输出格式的宏定义不同 ov5645_settings_yuv420/yuv422/rgb565, 库中有以下注释, 代表原本这个配置可能不是兼容 YUV420 的, 但被拷贝着来用了. MIPI data rate is 448 Mbps/lane 应该需要修改.
/* MIPI_2lane_SXGA(YUV422&RGB565) 1280x960,30fps */
/* MIPI data rate is 448 Mbps/lane */
ov5645_settings_rgb565,
分析④: 待确认正确的修改值是什么.
---
题外话, 我查看 PPA 的例程时发现一段配置: 请教这段配置是作为什么用的, 是为显示屏lcd还是摄像头cam使用?
//---------------MIPI LDO Init------------------//
esp_ldo_channel_handle_t ldo_mipi_phy = NULL;
esp_ldo_channel_config_t ldo_mipi_phy_config = {
.chan_id = CONFIG_EXAMPLE_USED_LDO_CHAN_ID,
.voltage_mv = CONFIG_EXAMPLE_USED_LDO_VOLTAGE_MV,
};
ESP_ERROR_CHECK(esp_ldo_acquire_channel(&ldo_mipi_phy_config, &ldo_mipi_phy));