在大核使用真实屏幕显示并编码正常,使用虚拟屏幕进行编码画面是幻影和运行时间长不再抓实时画面,附上视频链接

Viewed 83

问题描述


编码流程:
送帧线程进行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
image.png

硬件板卡


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

0 Answers