开源相机管理库Aravis例程学习(六)——camera-features
简介
本文针对官方例程中的:04-camera-features做简单的讲解。并介绍其中调用的arv_camera_get_integer,arv_camera_get_string。
aravis版本:0.8.31
操作系统:ubuntu-20.04
gcc版本:9.4.0
例程代码
这段代码使用Aravis的API,获取相机的一些基本设置,如图像的宽度、高度和像素格式,主要操作步骤如下:
- 连接相机
- 获取图像宽度,高度,像素格式等信息
- 释放资源
/* SPDX-License-Identifier:Unlicense */
/* Aravis header */
#include <arv.h>
/* Standard headers */
#include <stdlib.h>
#include <stdio.h>
/*
* Connect to the first available camera, then display the current settings for image width and height, as well as the
* pixel format, using the more generic ArvCamera feature API.
*/
int main (int argc, char **argv)
{
ArvCamera *camera;
GError *error = NULL;
//连接相机
camera = arv_camera_new (NULL, &error);
if (ARV_IS_CAMERA (camera)) {
int width;
int height;
const char *pixel_format;
printf ("Found camera '%s'\n", arv_camera_get_model_name (camera, NULL));
/* Retrieve generally mandatory features for transmitters */
if (!error) width = arv_camera_get_integer (camera, "Width", &error);
if (!error) height = arv_camera_get_integer (camera, "Height", &error);
if (!error) pixel_format = arv_camera_get_string (camera, "PixelFormat", &error);
if (error == NULL) {
printf ("Width = %d\n", width);
printf ("Height = %d\n", height);
printf ("Pixel format = %s\n", pixel_format);
}
g_clear_object (&camera);
}
if (error != NULL) {
/* En error happened, display the correspdonding message */
printf ("Error: %s\n", error->message);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
这个例程与03-camera-api实现的功能相似,但是不同的是本文的代码使用的是更为通用的API(arv_camera_get_integer和arv_camera_get_string)来获取的相机的参数。
我们查看03-camera-api中的arv_camera_get_region,arv_camera_get_pixel_format_as_string的函数定义可以发现,他们的底层其实就是通过调用arv_camera_get_integer和arv_camera_get_string来实现的相关功能:
//file: arvcamera.c
void arv_camera_get_region (ArvCamera *camera, gint *x, gint *y, gint *width, gint *height, GError **error)
{
ArvCameraPrivate *priv = arv_camera_get_instance_private (camera);
GError *local_error = NULL;
g_return_if_fail (ARV_IS_CAMERA (camera));
if (x != NULL)
*x = priv->has_region_offset ? arv_camera_get_integer (camera, "OffsetX", &local_error) : 0;
if (y != NULL && local_error == NULL)
*y = priv->has_region_offset ? arv_camera_get_integer (camera, "OffsetY", &local_error) : 0;
if (width != NULL && local_error == NULL)
*width = arv_camera_get_integer (camera, "Width", &local_error);
if (height != NULL && local_error == NULL)
*height = arv_camera_get_integer (camera, "Height", &local_error);
if (local_error != NULL)
g_propagate_error (error, local_error);
}
const char * arv_camera_get_pixel_format_as_string (ArvCamera *camera, GError **error)
{
return arv_camera_get_string (camera, "PixelFormat", error);
}
运行结果:

函数说明
arv_camera_get_integer
简介:获取已连接相机的一个整数型特性的值
gint64 arv_camera_get_integer (
ArvCamera* camera,
const char* feature,
GError** error
)
Available since: 0.8.0
arv_camera_get_string
简介:获取已连接相机的一个字符串型特性的值
const char* arv_camera_get_string (
ArvCamera* camera,
const char* feature,
GError** error
)
Available since: 0.8.0
开源相机管理库Aravis例程学习(六)——camera-features的更多相关文章
- Git---初入开源代码管理库的学习过程003
Git常用命令总结 上接<Git 初入开源代码管理库的学习过程>学了一周Git,基本有了个认识.每一位比我厉害的,都是大牛,网上找了几篇博客和教材(感谢你们),边学习边实践用了四天,写笔记 ...
- Android Fresco (Facebook开源的图片加载管理库)
Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...
- 值得学习的C语言开源项目和库
收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具. ...
- C++的开源跨平台日志库glog学习研究(三)--杂项
在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...
- C++的开源跨平台日志库glog学习研究(二)--宏的使用
上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. ...
- 微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证
前端时间花了1个多星期的时间写了使用jQuery.Validate进行客户端验证,但是那仅仅是客户端的验证,在开发项目的过程中,客户端的信息永远是不可信的,所以我们还需要在服务器端进行服务器端的验证已 ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- iOS、mac开源项目及库汇总
原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ...
- Android开源项目及库搜集
TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...
- iOS -- 开源项目和库
TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 ...
随机推荐
- 数字集成电路设计之CMOS
数字集成电路设计理论 1.基本的理论结构 现在主流的集成电路器件还是CMOS,所以理论的结构还是基于CMOS.CMOS有N和P两种MOS组合组合在一起.CMOS最简单的器件就是反相器.然后是标准的逻辑 ...
- KingbaseES Json 系列九:Json路径查询函数
KingbaseES Json 系列九--Json路径查询函数(JSONB_PATH_EXISTS,JSONB_PATH_MATCH,JSONB_PATH_QUERY,JSONB_PATH_QUERY ...
- 【Java】这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b" ...
- MySQL访问控制和用户管理
访问控制 你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权.这就是所谓的访问控制,管理访问控制需要创建和管理用户账号. 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表: ...
- #结论#洛谷 3199 [HNOI2009]最小圈
题目 求有向图最小平均权值回路. \(n\leq 3*10^3,m\leq 10^4\) 分析 设 \(f_k(x)\) 表示从点 \(x\) 出发恰好走 \(k\) 条边的最短路, 那么答案就是 \ ...
- 深入理解 C++ 语法:从基础知识到高级应用
C++ 语法 让我们将以下代码分解以更好地理解它: 示例 #include <iostream> using namespace std; int main() { cout <&l ...
- Git入门指南:从新手到高手的完全指南
Git是一种强大的分布式版本控制系统,广泛应用于软件开发中.它的使用不仅可以帮助开发团队更好地管理代码,还可以提高团队协作效率和代码质量.随着软件开发的不断发展,版本控制成为了程序员必备的一项技能.G ...
- C#中yield return的作用
C#中yield return的作用 yield return作用在 return 时,保存当前函数的状态,下次调用时继续从当前位置处理.示例说明如下代码所示,主函数使用 foreach 输出 Get ...
- openGauss中如何管理表空间
openGauss 中如何管理表空间 在 openGauss 中,表空间是一个目录,在物理数据和逻辑数据间提供了抽象的一层,为所有的数据库对象分配存储空间,里面存储的是它所包含的数据库的各种物理文件. ...
- 如何巧妙应对iOS键盘难题?
前言 写过移动端的同学或多或少都遇到过软键盘带来的各种各样的问题,最典型的就是输入框被软键盘遮挡.fixed元素失效等问题,并且这些问题在iOS上的表现让人难以接受. webview的差异 在移动端上 ...