人工智能
直播中

陈启清

4年用户 17经验值
擅长:嵌入式技术
私信 关注

【爱芯派 Pro 开发板试用体验】用rust接视频输入输出

现在来了解一下视频输入输出的相关API,如何通过rust接Axera的视频输入输出,以便将内容读取,然后给模型做分析,后面做结果输出。

主要API以及调用流程,请参考文档《24 - AX VO API 文档.pdf》和《16 - AX VIN 开发参考.pdf》,主要用到了libax_proton.so,libax_vo.so和libax_ivps动态库,提供的函数具体参考文档。

以下是部分参考代码:

视频输入部分代码:

extern "C" {
// 声明需要调用的函数签名
pub fn AX_VIN_Init() -> i32; //初始化vin模块
pub fn AX_VIN_Deinit() -> i32; //释放vin模块
pub fn AX_VIN_CreateDev(devID: u8) -> i32;  //创建dev, dev取值范围[0, AX_VIN_MAX_DEV_NUM]
pub fn AX_VIN_DestroyDev(devID: u8) -> i32; //销毁对应的dev
pub fn AX_VIN_EnableDev(devID: u8) -> i32;  //使能dev
pub fn AX_VIN_DisableDev(devID: u8) -> i32; //禁止dev
}

视频输出部分代码,结构体和枚举定义内容会很多,这里贴一部分样例:

extern "C" {
// 声明需要调用的函数签名
pub fn AX_VO_Init() -> i32; //初始化vo模块的软硬件资源
pub fn AX_VO_Deinit() -> i32; //释放o模块的软硬件资源
pub fn AX_VO_SetPubAttr(devID: u8, pub_attr: &AxVoPubAttrT) -> i32;  //设置指定显示设备的公共属性
pub fn AX_VO_SetCSC(devID: u8, csc: &AxVoCscT) -> i32; // 设置显示设备 CSC
pub fn AX_VO_Enable(devID: u8) -> i32;  //使能dev
pub fn AX_VO_Disable(devID: u8) -> i32; //禁止dev
}

#[repr(u8)]  // Use u8 so it matches with C enum size
pub enum AxVoModeE {
AxVoModelOffline = 0,
AxVoModelOnline,
AxVoModelButt,
}

#[repr(u8)]
pub enum AxVoIntfTypeE {
AxVoIntfDpt,
AxVoIntfBt601,
AxVoIntfBt656,
AxVoIntfBt1120,
AxVoIntfDsi,
AxVoIntfHdmi,
AxVoIntfButt
}

#[repr(u8)]
pub enum AxVoOutFmtE {
AxVoOutFmtUnused = 0,
AxVoOutFmtRgb565,
AxVoOutFmtRgb666,
AxVoOutFmtRgb666lp,
AxVoOutFmtRgb888,
AxVoOutFmtRgb101010,
AxVoOutFmtYuv422,
AxVoOutFmtYuv422_10,
AxVoOutFmtButt
}

以下是简单的测试,输入模块的初始化,创建设备,销毁设备,以及使能和禁止设备等简单操作的样例。

1702820067845.png

更多回帖

发帖
×
20
完善资料,
赚取积分