<blockquote id="76sxc"></blockquote>
<cite id="76sxc"><track id="76sxc"></track></cite>
<legend id="76sxc"></legend>

  • <blockquote id="76sxc"><p id="76sxc"></p></blockquote>
    <sub id="76sxc"><p id="76sxc"></p></sub>

          C 熱插拔示例代碼-Hot Plugin

          # 熱拔插示例-HotPlugin

           

          功能描述: 設(shè)備熱拔插監(jiān)控,檢測到設(shè)備上線自動連接設(shè)備打開深度流,檢測到設(shè)備掉線自動斷開設(shè)備連接。,并通過ESC_KEY鍵退出程序

          > 本示例基于C Low Level API進行注冊設(shè)備上下線回調(diào),基于High Level API進行開流取幀演示

           

          創(chuàng)建設(shè)備連接處理函數(shù),函數(shù)內(nèi)創(chuàng)建pipeline并調(diào)用create_and_start_with_config開啟彩色流和深度流。

          //設(shè)備連接處理
          void handle_device_connected(ob_device_list *connect_list) {
              ob_error *error = NULL;

              std::lock_guard<std::recursive_mutex> lk(pipeline_holder_mutex);
              uint32_t                              count = ob_device_list_device_count(connect_list, &error);
              check_error(error);
              printf("Device connect: %d\n", count);
              for(uint32_t i = 0; i < count; i++) {
                  const char *uid = ob_device_list_get_device_uid(connect_list, i, &error);
                  check_error(error);
                  std::string str_uid = std::string(uid);
                  auto        itr     = pipeline_holder_map.find(str_uid);
                  if(itr != pipeline_holder_map.end()) {
                      printf("Deveice connect, device already connection.");
                      print_device_info(itr->second->device_info);
                      printf("\n");
                  }
                  else {
                      ob_device *device = ob_device_list_get_device(connect_list, i, &error);
                      check_error(error);

                      ob_pipeline *pipeline = ob_create_pipeline_with_device(device, &error);
                      check_error(error);

                      ob_device_info *device_info = ob_device_get_device_info(device, &error);
                      check_error(error);

                      std::shared_ptr<pipeline_holder> holder(new pipeline_holder{ device, device_info, pipeline, false, 0, 0, 0, 0, 0 });
                      start_stream(holder);
                      pipeline_holder_map.insert({ str_uid, holder });

                      printf("Deveice connect, ");
                      print_device_info(device_info);
                      printf("\n");
                  }
              }
          }

           

          創(chuàng)建設(shè)備斷開處理函數(shù),函數(shù)內(nèi)將pipeline停止,并將退出pipeline標(biāo)記isExit設(shè)為true

          void handle_device_disconnected(ob_device_list *disconnect_list) {
              ob_error *error = NULL;

              std::lock_guard<std::recursive_mutex> lk(pipeline_holder_mutex);
              uint32_t                              count = ob_device_list_device_count(disconnect_list, &error);
              check_error(error);
              printf("Device disconnect: %d\n", count);

              for(uint32_t i = 0; i < count; i++) {
                  const char *uid = ob_device_list_get_device_uid(disconnect_list, i, &error);
                  check_error(error);
                  std::string str_uid = std::string(uid);
                  auto        itr     = pipeline_holder_map.find(str_uid);
                  if(itr != pipeline_holder_map.end()) {
                      auto holder = itr->second;
                      stop_stream(holder);
                      pipeline_holder_map.erase(str_uid);

                      printf("Deveice discconnect, ");
                      print_device_info(holder->device_info);
                      printf("\n");

                      delete_holder(holder);
                  }
                  else {
                      const char *uid = ob_device_list_get_device_uid(disconnect_list, i, &error);
                      check_error(error);
                      printf("Device disconnect, Unsolve device, uid: %s\n", uid);
                  }
              }
          }

           

          設(shè)備連接、斷開處理函數(shù)將會在設(shè)備上下線回調(diào)函數(shù)內(nèi)被調(diào)用

          //設(shè)備狀態(tài)改變回調(diào)
          void on_device_changed_callback(ob_device_list *removed, ob_device_list *added, void *user_data) {
              handle_device_disconnected(removed);
              handle_device_connected(added);

              ob_error *error = NULL;

              // Need to manually destroy the device list
              // destroy device list
              ob_delete_device_list(removed, &error);
              check_error(error);

              // destroy device list
              ob_delete_device_list(added, &error);
              check_error(error);
          }

           

          主函數(shù)main內(nèi),創(chuàng)建一個Context并注冊設(shè)備上下線回調(diào)

           //創(chuàng)建上下文
          ob_context* ctx = ob_create_context( &error );

          //注冊設(shè)備回調(diào)
          ob_set_device_changed_callback( ctx, on_device_changed_callback, NULL, &error );

           

          退出主循環(huán)后,需要將相關(guān)資源釋放

          if ( pipeline ) {
              //停止pipeline
              ob_pipeline_stop( pipeline, &error );
              // 銷毀pipeline
              ob_delete_pipeline( pipeline, &error );
          }
          // 銷毀dev_list
          if ( dev_list ) {
              ob_delete_device_list( dev_list, &error );
          }
          // 銷毀ctx
          if ( ctx ) {
              ob_delete_context( ctx, &error );
          }

           


          <blockquote id="76sxc"></blockquote>
          <cite id="76sxc"><track id="76sxc"></track></cite>
          <legend id="76sxc"></legend>

        1. <blockquote id="76sxc"><p id="76sxc"></p></blockquote>
          <sub id="76sxc"><p id="76sxc"></p></sub>

                水果派解说AV无码一区 | 抱着娇妻让粗大玩3p在线观看 | 免费成人视频在线观看 | 亚洲人成色777777精品音频 | 国产精品嫩草AV | 黄片在线播放视频 | 老女人色黄大片 | 爱福利视频一区二区 | 好爽好大好舒服 | 免费麻豆网站 |