系统软件包¶
ISP系统库¶
ISP安装编译¶
1、安装ISP库:
sudo dnf install librockchip_isp
2、编译链接:
LDDFLAGS: = -lcam_engine_cifisp -lcam_ia
3、包含头文件:
#include <rockchip/rockchip_isp.h>
ISP接口说明¶
(1)rkisp_start: 创建ISP引擎实例
int rkisp_start(void* &engine, int vidFd, const char* ispNode, const char* tuningFile);
参数说明:
1)Engine:ISP引擎实例地址,rkisp_start创建引擎实例后,由该参数返回实例地址。
2)vidFd:Video stream fd,用户捕获图像时,使用的video节点句柄。
3)ispNode:ISP节点名,例如”/dev/video1”,该节点与用户捕获图像的节点不同。
4)tuningFile:IQ xml 文件。例如”/etc/cam_iq_ov9750.xml”,里面记录了摄像头3A(自动白平衡,自动曝光,自动对焦)操作所需的参数。
返回值:成功返回0且engine不为NULL。
注意:
1、对于内置摄像头而言,n个摄像头会枚举出4个video节点。
video(4*(n-1)+2)节点为用户捕获图像操作的video节点,如video2,video6。
video(4*(n-1)+1)节点为ISP库进行3A操作的video节点,如video1,video5。
2、 使用结束后必须使用rkisp_stop停止ISP引擎,释放占用的资源。
3、必须选择与摄像头相互匹配的tuningFile,否则ISP引擎无法工作。
4、目前ISP摄像头获取的图像格式V4L2_PIX_FMT_NV12
(2)rkisp_stop:停止并销毁ISP引擎实例,释放占用的资源
int rkisp_stop(void* &engine)
参数说明:
engine: ISP引擎实例地址,由rkisp_start创建
返回值:成功返回0。
(3)rkisp_setFocusMode:设置对焦模式
int rkisp_setFocusMode(void* &engine, enum HAL_AF_MODE fcMode);
参数说明:
1)engine: ISP引擎实例地址,由rkisp_start创建
2)fcMode:对焦模式设置
HAL_AF_MODE_NOT_SET:关闭对焦功能
HAL_AF_MODE_CONTINUOUS_VIDE:设置持续对焦
返回值:成功返回0。
注意:OV9750不支持自动对焦,不允许设置对焦模式(默认关闭即可),否则会出错。
MPP系统库¶
MPP安装编译¶
1、安装MPP库:
sudo dnf install librockchip_mpp-devel
2、编译链接:
LDDFLAGS: = -lrockchip_mpp
3、包含头文件:
#include <rockchip/rockchip_mpp.h>
MPP接口说明¶
1、创建MPP解码器实例:MppDecoderCreate, 成功返回MPP结构指针
MppDecoder *dec = MppDecoderCreate();
2、销毁MPP实例:MppDecoderDestroy
MppDecoderDestroy(dec);
3、解码图像入队操作:enqueue
dec->ops->enqueue(dec, data, size)
参数说明:
1)data:存放H264图像数据
2)size:图像大小
4、解码图像出队操作:dequeue;阻塞直到mpp成功解码后,次函数返回。
DecFrame *frame = dec->ops->dequeue(dec);
DecFrame结构成员说明:
1)v4l2Format:解码出来的图像格式,目前只支持V4L2_FIX_FMT_NV12
2)width:图像的宽度
3)height:图像的高度
5、释放DecFrame指针:freeFrame;成功解码并处理图像后,必须调用此函数释放内存。
dec->ops->freeFrame(dec, frame);
RGA系统库¶
RGA安装编译¶
1、安装RGA库:
sudo dnf install librockchip_rga-devel
2、编译链接:
LDDFLAGS: = -lrockchip_rga -ldrm
3、包含头文件:
extern “c” {
#include <rockchip/rockchip_rga.h>
}
RGA接口说明¶
1、RgaCreate:创建RGA实例,返回RGA结构指针
RockchipRga *rga = rgaCreate();
2、RgaDestory:销毁RGA实例
RgaDestory(rga);
3、initCtx:清空RGA上下文
rga->ops->initCtx(rga);
注意:如果不清空上下文,下次执行RGA操作时会沿用之前设置图像参数。
4、setRotate设置选择旋转角度
rga->ops->setRotate(rga, rotate);
参数说明:
1)rotate: 旋转角度
RGA_ROTATE_NONE:不旋转
RGA_ROTATE_90:逆时针旋转90度
RGA_ROTATE_180:逆时针旋转180度
RGA_ROTATE_270:逆时针旋转270度
RGA_ROTATE_VFLIP:垂直镜像
RGA_ROTATE_HFLIP:水平镜像
5、setFillColor:设置色彩填充
rga->ops->setFillColor(rga, color);
参数说明:
Color:颜色值
蓝色:0xffff0000
绿色:0xff00ff00
红色:0xff0000ff
6、setCrops:设置剪切窗口
设置源图像剪切窗口:
rga->ops->setSrcCrop(rga, cropX, cropY, cropW, cropH);
设置目标图像剪切窗口:
rga->ops->setSrcCrop(rga, cropX, cropY, cropW, cropH);
参数说明:
1)、cropX:原点横坐标
2)、cropY:原点纵坐标
3)、cropW:窗口宽度
4)、cropH:窗口高度
7、 setFormat:设置图像格式
设置源图像格式:
rga->ops->setSrcFormat(rga, v4l2Format, width, height);
设置目标图像格式:
rga->ops->setDstFormat(rga, v4l2Format, width, height);
参数说明:
1)、V4l2Format:v4l2图像格式,支持的格式见/usr/include/rockchip/rockchip_rga.h
2)、Width:图像宽度
3)、Height:图像高度
8、setBuffer:设置图像Buffer
设置源图像Buffer的文件描述符(DMA内存fd):
rga->ops->setSrcBufferFd(rga, fd);
设置源图像Buffer指针(用户空间内存指针):
rga->ops->setSrcBufferPtr(rga, ptr);
设置目标图像Buffer的文件描述符(DMA内存fd):
rga->ops->setDstBufferFd(rga, fd);
设置目标图像Buffer指针(用户空间内存指针):
rga->ops->setDstBufferPtr(rga, ptr);
9、执行图像处理操作
执行操作:
rga->ops->go(rga);
Rtspclient系统库¶
Rtspclient安装编译¶
1、安装RTSP库:
librockchip_rtsp-devel
2、编译链接:
LDDFLAGS: = -lrockchip_rtsp
3、 包含头文件:
#include <rockchip/rockchip_rtsp.h>
Rtspclient接口说明¶
1、构造函数:
RtspClient(std::string url, std::string username = "", std::string password = "");
Rtsplcient client(“rtsp://xxx.xxx.xxx.xxx/xxx”, “username”, “password”);
参数说明:
1)、Url:IPC摄像头的RTSP网络地址
2)、Username:IPC摄像头的用户名,默认为空
3)、Password:IPC摄像头的密码,默认为空
2、设置回调函数:
setDataCallback(FRtspCallBack callBack);
client.setDataCallback(std::bind(&priv_class::onRstpHandle, priv_point, std::placeholders::_1, std::placeholders:_2));
参数说明:
1)、priv_class类回调函数:void onRtspHandle(unsigned char *buf, size_t len)
说明:Rtspclient每接收到一帧都会回调此函数;
其中buf存放H264图像数据,len为图像的大小。
2)、priv_point:类指针
3)、 _1&&_2:占位符
3、开始获取RTSP流:
enable();
client.enable();
4、停止获取RTSP流:
disable();
client.disable();