staticintv4l2_stream_on(void){/* 打开摄像头、摄像头开始采集数据 */enumv4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;if(0>ioctl(v4l2_fd, VIDIOC_STREAMON,&type)){fprintf(stderr,"ioctl error: VIDIOC_STREAMON: %s\n",strerror(errno));return-1;}return0;}
yuyv格式数据转换为RGB565
unsignedshortyuyv_to_rgb565(unsignedshort y,unsignedshort u,unsignedshort v){int16_t r, g, b;// 将Y, U, V从8位无符号转换为带符号的16位值 int16_t y1 = y;int16_t u1 = u -128;int16_t v1 = v -128;
r = y1 +1.042*(v1);
g = y1-0.34414*(u1)-0.71414*v1;
b = y1+1.772*u1;// 将r, g, b值限制在0-255的范围内
r = r <0?0:(r >255?255: r);
g = g <0?0:(g >255?255: g);
b = b <0?0:(b >255?255: b);// 将r, g, b值转换为RGB565格式 return((r >>3)<<11)|((g >>2)<<5)|(b >>3);}
数据读取
读取图像帧用lcd显示
staticvoidv4l2_read_data(void){structv4l2_buffer buf ={0};unsignedshort*base;unsignedshort*start;int min_w, min_h;int j;if(width > frm_width)//以下判断仅为了适配屏幕大小
min_w = frm_width;else
min_w = width;if(height > frm_height)
min_h = frm_height;else
min_h = height;
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;for(;;){for(buf.index =0; buf.index < FRAMEBUFFER_COUNT; buf.index++){ioctl(v4l2_fd, VIDIOC_DQBUF,&buf);//出队printf("length:%d\n",buf_infos[buf.index].length);// cv::Mat bgrImage = convertYUYVtoBGR(buf_infos[buf.index].start,frm_width,frm_height);//使用opencv将yuyv格式转化为jpg图像// cv::imwrite("img.jpg",bgrImage);for(j =0, base=screen_base, start=buf_infos[buf.index].start;j < min_h; j++){//base是屏幕基地址,start是帧起始地址for(int i =0; i < min_w; i +=2){//unsigned short一次两个字节unsignedshort y0 = start[i]&0x00ff;//低字节存放的Yunsignedshort u = start[i]>>8;//高字节存放的U或者Vunsignedshort y1 = start[i +1]&0x00ff;unsignedshort v = start[i +1]>>8;//相邻两个Y共用U和V,YUYV一共4个字节数据unsignedshort rgb0 =yuyv_to_rgb565(y0, u, v);// 第一个像素 unsignedshort rgb1 =yuyv_to_rgb565(y1, u, v);// 第二个像素 *(unsignedshort*)base = rgb0;//RGB565适用于正点原子4.3寸屏幕显示,一个像素两个字节
base +=1;*(unsignedshort*)base = rgb1;
base +=1;}
base = screen_base+(j+1)* line_length;//line_length是屏幕的宽度width
start += frm_width;//指向下一行数据}ioctl(v4l2_fd, VIDIOC_QBUF,&buf);// 数据处理完之后、再入队、往复}}}
问题1:longchain 关键词在中间容易被忽略掉 Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding 论文对大模型在长文本情况下的性能做了一系列实验研究,发现了一个有趣的“Lost in the middle”现象&#x…