快捷导航

    1. 设备型号:MIIVII Apex AD10
    2. 镜像版本:5.1.2-3.0.0.45
    复制代码

  • 需将多路GMSL2摄像头同步数据保存,同时需要保存cameras_sdk_demo
    1. mvcam.GetImagePtr(outbuf, timestamp, camera_no, g_camera_dev)
    复制代码
    函数返回的timestamp,存在0值的情况。
  • 我终止保存时间戳的程序,过了一段时间,重新再次打开时timestamp保存正常。
    1. /*demo程序主函数,分别打开n个窗口,并通过反复分别调用GetImageCvMat和GetImagePtr接口获取图像和时间戳在窗口中显示*/
    2. int main(int argc, char *argv[]) {

    3.     camera_context_t ctx[8] = {};

    4.     stCameraCfgSend.async_camera_num = 0;
    5.     stCameraCfgSend.async_freq = 0;
    6.     stCameraCfgSend.async_camera_bit_draw = 0;
    7.     stCameraCfgSend.sync_camera_num = 8;
    8.     stCameraCfgSend.sync_freq = 30;
    9.     stCameraCfgSend.sync_camera_bit_draw = 0xff;

    10.     if (!parse_cmdline(argc, argv)) {
    11.         return -1;
    12.     }
    13.     char dev_node_tmp = dev_node[10];
    14.     for(int i = 0; i < camera_num; i++){
    15.         dev_node[10] = dev_node_tmp + i;
    16.         ctx[i].dev_node = dev_node;
    17.         ctx[i].camera_fmt_str = camera_fmt_str;
    18.         ctx[i].output_fmt_str = output_fmt_str;
    19.         ctx[i].cam_w = cam_w;
    20.         ctx[i].cam_h = cam_h;
    21.         ctx[i].out_w = out_w;
    22.         ctx[i].out_h = out_h;
    23.     }
    24.     miivii::MvGmslCamera mvcam(ctx, camera_num, stCameraCfgSend);

    25.     std::string windowName("DisplayCamera ");
    26.     for (uint32_t i = 0; i < camera_num; i++) {
    27.         cv::namedWindow(windowName + std::to_string(i), cv::WindowFlags::WINDOW_AUTOSIZE);
    28.         cv::moveWindow(windowName + std::to_string(i), 200 * i, 200 * i);
    29.     }
    30.     cv::Mat outMat[camera_num];
    31.     uint8_t *outbuf[camera_num];
    32.     cv::Mat imgbuf[camera_num];
    33.     signal(SIGINT, &handler);
    34.     bool quit = false;
    35.     uint64_t timestamp;
    36.    
    37.     // save videos for every camera
    38.         // 初始化自定义保存视频数据和timestamp变量
    39.    
    40.    
    41.     while (!quit) {
    42.         if (exitRequested) {
    43.             quit = true;
    44.             break;
    45.         }
    46.         uint8_t camera_no = dev_node[10] - 0x30;
    47.         /*use cv data to get image*/
    48. // 这里删除mvcam.GetImageCvMat(outMat, timestamp, camera_no, g_camera_dev)

    49.         /*use raw data to get image*/
    50.         if (mvcam.GetImagePtr(outbuf, timestamp, camera_no, g_camera_dev)) {
    51.             for (uint32_t i = 0; i < camera_num; i++) {
    52.                 if ( ctx[i].output_fmt_str == "UYVY") {
    53.                     imgbuf[i] = cv::Mat(out_h, out_w, CV_8UC2, outbuf[i]);
    54.                     cv::Mat mrgba(out_h, out_w, CV_8UC3);
    55.                     cv::cvtColor(imgbuf[i], mrgba, cv::COLOR_YUV2BGR_UYVY);
    56.                     cv::imshow(windowName + std::to_string(i), mrgba);
    57.                 } else if (ctx[i].output_fmt_str == "ABGR32") {
    58.                     imgbuf[i] = cv::Mat(out_h, out_w , CV_8UC4, outbuf[i]);
    59.                     cv::cvtColor(imgbuf[i], imgbuf[i], cv::COLOR_RGBA2BGR);
    60.                     cv::imshow(windowName + std::to_string(i), imgbuf[i]);
    61.                 } else if (ctx[i].output_fmt_str == "BGRA32") {
    62.                     imgbuf[i] = cv::Mat(out_h, out_w , CV_8UC4, outbuf[i]);
    63.                     cv::cvtColor(imgbuf[i], imgbuf[i], cv::COLOR_BGRA2BGR);
    64.                     cv::imshow(windowName + std::to_string(i), imgbuf[i]);

    65.                     // write frame to video
    66.                     // 保存时间戳,这里是问题所在处,使用mvcam.GetImagePtr(outbuf, timestamp, camera_no, g_camera_dev)
    67.                     // 保存同步函数所返回的timestamp,存在0值得情况。
    68.                     timestamp_in[i]<<timestamp<<"\n";
    69.                 }
    70.                 CheckTimeStampLog(timestamp,dev_node_tmp - 0x30 + i);
    71.             }
    72.             
    73.             // 一些处理
    74.         } else {
    75.             std::cerr << "Can't get image form camera." << std::endl;
    76.         }
    77.         //auto t2 = std::chrono::steady_clock::now();
    78.         //double dr_ms = std::chrono::duration<double, std::milli>(t2 - t1).count();
    79.         //printf("GetImagePtr dr_ms: %f\n", dr_ms);
    80.         if (cv::waitKey(1) == 27) {// Wait for 'esc' key press to exit
    81.             break;
    82.         }
    83.     }
    84.     // free resources
    85.     // 释放资源
    86.     return 0;
    87. }
    复制代码

  • 问题,我在保存米文cameras_sdk_demo中得到的同步时间戳,为什么会存在0值得情况?同时,过一段时间再次打开,保存时间戳正常。



demo中函数保存timestamp存在0值的情况

demo中函数保存timestamp存在0值的情况

AD10采用授时方式

AD10采用授时方式

demo中函数保存timestamp正常的情况

demo中函数保存timestamp正常的情况
举报 使用道具
| 回复

共 1 个关于本帖的回复 最后回复于 2024-3-18 17:59

xiaojun@miivii 米文官方工程师 发表于 2024-3-18 17:59 | 显示全部楼层
本帖最后由 xiaojun@miivii 于 2024-3-18 18:00 编辑

您好,

我们内部做了讨论并review了您的代码。

1,请查看一下您的miivii-gmsl-camera SDK的版本
  1. dpkg -l | grep  "miivii-gmsl-camera"
复制代码


2,如问题复现,请帮忙提供如下log:
/tmp/cameras_sdk_demo_video%d.log
(CheckTimeStampLog函数内保存)

3,我们计划内部测试复现,请问您复现环境接入了几路GMSL Camera,具体型号是什么?

多谢!
您需要登录后才可以回帖 登录 | 点我注册

精彩推荐

  • canbus与vcu相连接,出现bus-off状态
  • 有线连接失败
  • Apex 串口通讯
  • 关于SPI通信问题咨询
  • MIIVII APEX DUAL ORIN米文域控制器产品合

明星用户