开源相机管理库Aravis例程学习(三)——注册回调multiple-acquisition-callback
开源相机管理库Aravis例程学习(三)——回调multiple-acquisition-callback
- 简介
- 例程代码
- arv_camera_create_stream
- ArvStreamCallbackType
- ArvStreamCallback
简介
本文针对官方例程中的:02-multiple-acquisition-callback做简单的讲解。
aravis版本:0.8.31
操作系统: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
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。