• <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
      
      
      <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
    • <dd id="2awkm"><s id="2awkm"></s></dd>
      <tbody id="2awkm"></tbody>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><noscript id="2awkm"></noscript></menu>

      C 熱插拔示例代碼-Hot Plugin

      # 熱拔插示例-HotPlugin

       

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

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

       

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

      //設備連接處理
      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ù)內(nèi)將pipeline停止,并將退出pipeline標記isExit設為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ù)將會在設備上下線回調(diào)函數(shù)內(nèi)被調(diào)用

      //設備狀態(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并注冊設備上下線回調(diào)

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

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

       

      退出主循環(huá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 );
      }

       


      • <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
        <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
        
        
        <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
      • <dd id="2awkm"><s id="2awkm"></s></dd>
        <tbody id="2awkm"></tbody>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><noscript id="2awkm"></noscript></menu>
        黄色操B视频 | 国内自拍视频网站 | 99热99热99 | 婷婷五月狠狠 | 青娱乐极品91 |