现在来了解一下视频输入输出的相关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
}
以下是简单的测试,输入模块的初始化,创建设备,销毁设备,以及使能和禁止设备等简单操作的样例。
更多回帖