前段时间申请了EASY-EAI Nano开发套件,带有一个屏幕,本篇测试一下HiSpark摄像头通过USB连接EASY-EAI板子进行摄像头显示。
之前在开发HiSpark摄像头的时候,烧录了自己的测试固件,是没有USB摄像头功能的(UVC输出功能),因此在测试之前,需要先烧一个支持UVC图像输出功能的固件,官网提供了这个固件:
本篇记录一下烧录过程,显示串口方式擦除固件:
然后USB方式烧录固件:
最后串口输入如下指令重启板子:
xsetenv bootcmd "sf probe 0;sf read 0x40000000 0x100000 0x600000;go 0x40000000";saveenv
reset
测试USB摄像头的显示,主要是编写EASY-EAI板子的代码:
int main()
{
char *pusb = NULL;
int ret = 0;
disp_screen_t screen = {0};
signal(SIGINT, sigterm_handler);
/* camera init */
ret = usbcamera_init(USB2_0, USB_DIRECT, CAMERA_WIDTH, CAMERA_HEIGHT, 180);
if (ret) {
printf("error func:%s, line:%d\n", __func__, __LINE__);
goto exit_donothing;
}
/* display init */
screen.screen_width = DISP_WIDTH;
screen.screen_height = DISP_HEIGHT;
screen.wins[0].enable = 1;
screen.wins[0].in_fmt = IMAGE_TYPE_RGB888;
screen.wins[0].in_w = CAMERA_WIDTH;
screen.wins[0].in_h = CAMERA_HEIGHT;
screen.wins[0].rotation = 90;
screen.wins[0].win_x = 0;
screen.wins[0].win_y = 0;
screen.wins[0].win_w = 720;
screen.wins[0].win_h = 1280;
ret = disp_init_pro(&screen);
if (ret) {
printf("error func:%s, line:%d\n", __func__, __LINE__);
goto exit_freeusb;
}
/* alloc buffer for cap data */
pusb = (char *)malloc(IMAGE_SIZE);
if (!pusb) {
printf("error: %s, %d\n", __func__, __LINE__);
ret = -1;
goto exit_freeusb_freedisp;
}
g_run = 1;
while(g_run) {
ret = usbcamera_getframe(USB2_0, USB_DIRECT, pusb);
if (!ret) {
disp_commit_pro(pusb, 0, IMAGE_SIZE);
}
}
free(pusb);
pusb = NULL;
exit_freeusb_freedisp:
disp_exit_pro();
exit_freeusb:
usbcamera_exit(USB2_0, USB_DIRECT);
exit_donothing:
return ret;
}
最终的测试效果如下,可以在EASY-EAI板子屏幕上显示HiSpark摄像头的图像,分辨率设置的为1280x720。
本篇进行HiSpark摄像头的USB摄像头功能在EASY-EAI板子屏幕上的显示测试。