问题描述
编码流程:
送帧线程进行kd_mpi_wbc_dump_frame -> kd_mpi_venc_send_frame -> kd_mpi_wbc_dump_release
编码线程kd_mpi_venc_query_status -> kd_mpi_venc_get_stream -> 映射写入文件 -> 取消映射 -> kd_mpi_venc_release_stream
测试过程:
分别使用 k_connector_type connector_type = LT9611_MIPI_4LAN_1920X1080_30FPS;和k_connector_type connector_type = VIRTUAL_DISPLAY_DEVICE;进行编码测试
结果:
使用LT9611_MIPI_4LAN_1920X1080_30FPS真实hdmi屏幕进行编码是正常
使用VIRTUAL_DISPLAY_DEVICE编码画面是幻影
使用虚拟屏幕,不编码。运行时间在40分钟左右,手在摄像头前,然后保存照片,只会有天花板,不会拍到手,但是程序正常运行
两个文件帧率都是30fps/29fps
文件:https://www.wenshushu.cn/f/hvpjpsvlfs5
不需要注册登录可以直接下载查看
打印连接器信息
connector_info.connector_name, connector_info.resolution.hdisplay,
connector_info.resolution.vdisplay, connector_info.resolution.pclk,
connector_info.buff_num);
虚拟屏幕是手动代码配置的分辨率和帧率
connector_info.resolution.hdisplay = 1920;
connector_info.resolution.vdisplay = 1080;
connector_info.resolution.pclk = 30;
buf是统一在连接器文件配置的2个
运行打印:
真实屏幕
connector info: name:lt9611 , 1920x1080 ,148500 fps ,2 buf
虚拟屏幕
connector info: name:virtdev , 1920x1080 ,30 fps ,2 buf
这里附上送帧线程流程代码
k_vo_wbc_attr wb_attr; // 回写属性
// 配置回写属性
wb_attr.pixel_format = PIXEL_FORMAT_YUV_SEMIPLANAR_420; // NV12
wb_attr.target_size.width = 1920;
wb_attr.target_size.height = 1080;
wb_attr.stride = wb_attr.target_size.width;
kd_mpi_vo_set_wbc_attr(&wb_attr);
kd_mpi_vo_enable_wbc();
while (app_run) {
// 回写的帧信息
k_video_frame_info dump_frame = {0};
kd_mpi_wbc_dump_frame(&dump_frame, -1);
kd_mpi_venc_send_frame(0, &dump_frame, -1);
kd_mpi_wbc_dump_release(&dump_frame);
}
编码线程
k_venc_stream output;
while (app_run) {
k_venc_chn_status status = {0};
// 查询编码器状态(当前包数量等)
kd_mpi_venc_query_status(0, &status);
// 根据当前包数量设置要获取的包数
output.pack_cnt = (status.cur_packs > 0) ? status.cur_packs : 1;
output.pack = static_cast<k_venc_pack *>(
malloc(sizeof(k_venc_pack) * output.pack_cnt));
// 获取编码码流
kd_mpi_venc_get_stream(info->ch_id, &output, -1);
for (i = 0; i < output.pack_cnt; i++) {
// 区分头信息和数据帧(头信息不计入帧数)
if (output.pack[i].type != K_VENC_HEADER) {
out_frames++;
}
--这里映射写入文件取消映射--
}
kd_mpi_venc_release_stream(info->ch_id, &output);
free(output.pack); // 释放包缓冲区
}
配置264
硬件板卡
01的k230开发板1G内存
软件版本
git log : commit 66dd75f0a8b87b081f1bee31e641be738841be0b (HEAD -> main, tag: v1.9, origin/main, origin/HEAD) Author: wuwentao wuwentao@canaan-creative.com Date: Fri Mar 14 18:21:29 2025 +0800 k230 sdk release v1.9
硬件板卡
01的k230开发板1G内存
软件版本
git log : commit 66dd75f0a8b87b081f1bee31e641be738841be0b (HEAD -> main, tag: v1.9, origin/main, origin/HEAD) Author: wuwentao wuwentao@canaan-creative.com Date: Fri Mar 14 18:21:29 2025 +0800 k230 sdk release v1.9