开源相机管理库Aravis例程学习(三)——注册回调multiple-acquisition-callback

04-27 1456阅读

开源相机管理库Aravis例程学习(三)——回调multiple-acquisition-callback

  • 简介
  • 例程代码
  • arv_camera_create_stream
  • ArvStreamCallbackType
  • ArvStreamCallback

    简介

    本文针对官方例程中的:02-multiple-acquisition-callback做简单的讲解。

    aravis版本:0.8.31

    开源相机管理库Aravis例程学习(三)——注册回调multiple-acquisition-callback

    操作系统:ubuntu-20.04

    gcc版本:9.4.0

    例程代码

    这段代码使用Aravis的API,控制相机连续采集,并异步地在回调函数中获取10个有效图像,主要操作步骤如下:

    • 连接相机
    • 设置采集模式为连续采集
    • 创建流对象(同时注册回调),并向流对象的buffer池中添加buffer
    • 开始采集
    • 获取10张有效图像后停止采集
    • 释放资源

      与连续采集multiple-acquisition-main-thread不同的是,本例中图像获取过程以及停止采集条件的改变都是异步进行的(在回调函数中)。

      /* SPDX-License-Identifier:Unlicense */
      /* Aravis header */
      #include 
      /* Standard headers */
      #include 
      #include 
      #include 
      #include "LogManager.h"
      //用于回调函数中传递和储存流的状态和计数器
      typedef struct {
      	ArvStream *stream;
      	int counter;
      	gboolean done;
      } ArvStreamCallbackData;
      //回调函数
      //根据不同的回调类型处理视频流事件
      static void stream_callback (void *user_data, ArvStreamCallbackType type, ArvBuffer *buffer)
      {
      	ArvStreamCallbackData *callback_data = (ArvStreamCallbackData *) user_data;
      	/* 回调函数内尽量不做非必要的耗时操作 */
      	switch (type) {
      		case ARV_STREAM_CALLBACK_TYPE_INIT:
      			PAW_INFO("ARV_STREAM_CALLBACK_TYPE_INIT");
      			break;
      		case ARV_STREAM_CALLBACK_TYPE_START_BUFFER:
      			PAW_INFO("ARV_STREAM_CALLBACK_TYPE_START_BUFFER");
      			break;
      		case ARV_STREAM_CALLBACK_TYPE_BUFFER_DONE:
      			PAW_INFO("ARV_STREAM_CALLBACK_TYPE_BUFFER_DONE");
      			//从buffer池中取出buffer
      			g_assert (buffer == arv_stream_pop_buffer(callback_data->stream));
      			g_assert (buffer != NULL);
      			//检索10个有效buffer
      			if (callback_data->counter 

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]