📄 usb.cpp
字号:
#include "USB.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
#include <linux/videodev.h>
#include <jpeglib.h>
#include <memory.h>
#include <bits/pthreadtypes.h>
#include <unistd.h>
#include <string.h>
#include <qimage.h>
Highlight::USB::USB(char* name):devName(name)
{
vd.frame = 0;
vd.map = 0;
curWidth = DEFAULT_WIDTH;
curHeight = DEFAULT_HEIGHT;
n = 1;
isOpen = false;
isShow = true;
// currentGrap = 0;
// currentDisplay = 1;
// isFirstGrap = true;
}
bool Highlight::USB::openDevice()
{
#ifdef MYDEBUGE
Log.DoLog("openDevice start!\n");
#endif
if ((vd.fd = open(devName, O_RDWR)) < 0)
{
return false;
}
#ifdef MYDEBUGE
Log.DoLog("openDevice end!\n");
#endif
isOpen = true;
return true;
}
bool Highlight::USB::getPicture()
{
if (ioctl(vd.fd, VIDIOCGPICT, &vd.picture) < 0)
{
return false;
}
vd.picture.depth = 32;
vd.picture.palette = VIDEO_PALETTE_RGB32;
if(ioctl(vd.fd, VIDIOCSPICT, &vd.picture))
{
return false;
}
return true;
}
bool Highlight::USB::getCapability()
{
if (ioctl(vd.fd, VIDIOCGCAP, &(vd.capability)) < 0)
{
return false;
}
return true;
}
bool Highlight::USB::initDevice()
{
Log.DoLog("initDevice start\n");
if(!getCapability())
{
return false;
}
if(!getPicture())
{
return false;
}
Log.DoLog("initDevice end\n");
//playMode(false);
curWidth = DEFAULT_WIDTH;
curHeight = DEFAULT_HEIGHT;
changeResolution();
return true;
}
/*
bool Highlight::USB::getMemory( int width,int height)
{
if(vd.map)
{
free(vd.map);
}
vd.map = (unsigned char *)malloc(width*height*4);
if(!vd.map)
{
return false;cermonitor.rb
(spark.rb) sparkRegisterCustomRender InternalSoccerRender
(FontServer) ERROR: font file 'VeraMono.ttf' not found
(spark.rb) sparkRegisterCustomInput InternalSoccerInput
(InternalSoccerRender) Unable to get font VeraMono.ttf 16
(ScriptServer) Running internalsoccerbindings.rb
(soccerbindings.rb) setting up bindings
(ScriptServer) updating cached script variables
(ScriptServer) updating cached script variables
(ScriptServer) updating cached script variables
(SimulationServer) entering runloop
(SimulationServer) running in single thread
(NetControl) 'AgentControl' setting up a server on TCP
}
return true;
}*/
bool Highlight::USB::readData()
{
ioctl(vd.fd, VIDIOCMCAPTURE, &vd.mmap);
ioctl(vd.fd, VIDIOCSYNC, 0);
returnBuf = (unsigned char*)vd.map;
return true;
}
void Highlight::USB::closeDevice()
{
munmap(vd.map,curWidth*curHeight*4*n);
if( close(vd.fd) < 0)
{
exit(EXIT_FAILURE);
}
#ifdef MYDEBUGE
Log.DoLog("close success");
#endif
isOpen = false;
return;
}
unsigned char* Highlight::USB::getBuffer()
{
#ifdef MYDEBUGE
//Log.DoLog("currentGrap is %d\n", currentGrap);
#endif
//return (unsigned char*)vd.map + vd.mbuf.offsets[currentDisplay];
return returnBuf;
}
void Highlight::USB::setPicture(video_picture &newPic)
{
#ifdef MYDEBUGE
Log.DoLog("THe hue is %d\n",newPic.hue);
Log.DoLog("THe hue is %d\n",newPic.contrast);
Log.DoLog("THe hue is %d\n",newPic.brightness);
#endif
ioctl(vd.fd, VIDIOCSPICT, &newPic);
}
void Highlight::USB::setCapability(video_capture &newPic)
{
ioctl(vd.fd, VIDIOCSCAPTURE, &newPic);
}
void Highlight::USB::setContrast(int contrast)
{
vd.picture.contrast = contrast;
setPicture(vd.picture);
}
int Highlight::USB::getContrast()
{
return vd.picture.contrast;
}
void Highlight::USB::setBrightness(int brightness)
{
vd.picture.brightness = brightness;
setPicture(vd.picture);
}
int Highlight::USB::getBrightness()
{
return vd.picture.brightness;
}
void Highlight::USB::setHue(int hue)
{
vd.picture.hue = hue;
setPicture(vd.picture);
}
int Highlight::USB::getHue()
{
return vd.picture.hue;
}
void Highlight::USB::playMode(bool isHigh)
{
munmap(vd.map, curWidth * curHeight * 4 * n);
if(isHigh)
{
getCapability();
curWidth = vd.capability.maxwidth;
curHeight = vd.capability.maxheight;
changeResolution();
#ifdef MYDEBUGE
Log.DoLog("the isHigh is %d\n",isHigh);
Log.DoLog("the maxwidth is %d the maxheight is %d\n",vd.capability.maxwidth,vd.capability.maxheight);
#endif
}
else
{
curWidth = DEFAULT_WIDTH;
curHeight = DEFAULT_HEIGHT;
changeResolution();
#ifdef MYDEBUGE
Log.DoLog("the isHigh is %d\n",isHigh);
Log.DoLog("the maxwidth is %d the maxheight is %d\n",vd.capability.minwidth,vd.capability.minheight);
#endif
}
}
void Highlight::USB::setMmap()
{
vd.mmap.frame = 0;
vd.mmap.width = curWidth;
vd.mmap.height = curHeight;
vd.mmap.format = VIDEO_PALETTE_RGB32;
vd.map = mmap(0, curWidth*curHeight*4*n, PROT_READ|PROT_WRITE, MAP_SHARED, vd.fd, 0);
}
void Highlight::USB::setCapture()
{
vd.capture.width = curWidth;
vd.capture.height = curHeight;
Log.DoLog("the capture W is %d the capture H is %d\n",curWidth,curHeight);
ioctl(vd.fd, VIDIOCSCAPTURE, &vd.capture);
}
void Highlight::USB::changeResolution()
{
setCapture();
setMmap();
}
bool Highlight::USB::isopen()
{
return isOpen;
}
bool Highlight::USB::isshow()
{
return isShow;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -