Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ioctl到阻止操作_C++_Graphics_Framebuffer_Ioctl - Fatal编程技术网

C++ ioctl到阻止操作

C++ ioctl到阻止操作,c++,graphics,framebuffer,ioctl,C++,Graphics,Framebuffer,Ioctl,我正在使用ioctl函数访问帧缓冲区 问题是,对于每一帧,我要写三次帧缓冲区 例如,每一帧,我首先用红色填充帧,做一些计算,填充绿色,然后做另一个计算,然后填充蓝色。 换句话说,每一帧,我有三层,红色作为底部,绿色,然后蓝色作为顶部。因此,红色和绿色是看不见的,我能看到的只有蓝色。 现在,我的问题是,当我使用ioctl调用时,它似乎无法识别红色和绿色,但只能识别蓝色。 对于每一帧,我都做了如下操作: 我的getFrameBuffer类似于: 到目前为止,当我调用getFrameBuffer时,它

我正在使用ioctl函数访问帧缓冲区 问题是,对于每一帧,我要写三次帧缓冲区 例如,每一帧,我首先用红色填充帧,做一些计算,填充绿色,然后做另一个计算,然后填充蓝色。 换句话说,每一帧,我有三层,红色作为底部,绿色,然后蓝色作为顶部。因此,红色和绿色是看不见的,我能看到的只有蓝色。 现在,我的问题是,当我使用ioctl调用时,它似乎无法识别红色和绿色,但只能识别蓝色。 对于每一帧,我都做了如下操作:

我的getFrameBuffer类似于:


到目前为止,当我调用getFrameBuffer时,它返回所有蓝色。有没有可能阻止写入帧缓冲区或类似的东西,这样当我调用getFrameBuffer时,我会得到红色?

我不太了解如何使用帧缓冲区,但在我看来getFrameBuffer实际上什么都做不了。它调用两个ioctl,mmaps帧缓冲区设备,然后在不做任何操作的情况下取消它的映射。你这里缺少一些代码吗?在取消映射之前,我写了一个图像opencv cvSetData等,该图像是蓝色的,我想在其中全部显示。如果是这样,也许你应该在这里显示。事实上,您提供的代码没有显示您正在尝试做什么,并且对于您所说的您正在尝试做什么也没有任何意义。我认为你应该展示实际的代码。而且,这似乎与C++无关。也许您应该删除该标记并为opencv添加一个。
Red(); //Frame buffer will be all Red
getFrameBuffer(); // ioctl call
Green();
Blue();
int fd = open("/dev/fb0",O_RDWR);
if (fd == -1)
   printf("Could not open framebuffer\n");
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
if (ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
   printf("Error reading fixed information.\n");
if (ioctl(fd, FBIOGET_VSCREENINFO, &screen_info))
   printf("Could not read variable screen info.\n");
size_t screensize = fixed_info.line_length*screen_info.yres;
unsigned char *fbp = (unsigned char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if ((int)fbp == -1)
   printf("Cannot mapped\n");
munmap(fbp,screensize);