C 视频4 Linux 2读取MMAP地址

C 视频4 Linux 2读取MMAP地址,c,static,v4l2,C,Static,V4l2,我试图写出我从video 4 linux 2示例程序中获得的内存。但是,它不起作用。我在尝试访问指针时遇到分段错误。我希望这不是一个愚蠢的错误,因为我已经为此花了几天时间。下面是代码:(它没有格式化,因为与html冲突太多。) 我的计算机正在使用执行的mmap分支。它在这一行的writeFile()中识别故障: mRGB=mScreen->像素[像素] 我使用的是在这里找到的v4l2示例代码 以下是我所做的更改: 在第497行我换了 fmt.fmt.pix.pixelformat = V4L2

我试图写出我从video 4 linux 2示例程序中获得的内存。但是,它不起作用。我在尝试访问指针时遇到分段错误。我希望这不是一个愚蠢的错误,因为我已经为此花了几天时间。下面是代码:(它没有格式化,因为与html冲突太多。) 我的计算机正在使用执行的
mmap
分支。它在这一行的
writeFile()
中识别故障: mRGB=mScreen->像素[像素]

我使用的是在这里找到的v4l2示例代码

以下是我所做的更改:

在第497行我换了

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB332;
fmt.fmt.pix.field = V4L2_FIELD_NONE;
我还在某个地方的704号线附近的main(…)上添加了一条线

close_device();
writeFile();
fprintf(stderr, "\n");
我插入了下面指定的
writeFile()
方法:

typedef struct Screen {
  unsigned char pixels[640*480];
} Screen;


static void writeFile() {
  const int dimx = 640, dimy = 480;
  int mNumPixels = dimx * dimy;

  Screen *mScreen;

  int i, pixel;
  FILE *file = fopen("output","w");
  if (file == NULL) return;
  /* shift the bits around */
  (void)fprintf(file, "P6\n%d %d\n255\n", dimx, dimy);

  for (i = 1; i < n_buffers; i++) {
    mScreen = buffers[i].start;
    printf("\npointer to mScreen is: %p\n", mScreen);

    for (pixel = 0; pixel < 640*480; pixel++) {      
      static unsigned char color[3];
      unsigned char mRGB = 0;
      printf("%d:%x\n", pixel, mRGB);
      fflush(stdout);
      mRGB = mScreen->pixels[pixel];
      color[0] = (mRGB & 0xE0) >> 5;
      color[1] = (mRGB & 0x1D) >> 2;
      color[2] = mRGB & 0x03;

      fwrite(color, sizeof(unsigned char)*3, 1, file);
    }
  }
  fclose(file);
}
typedef结构屏幕{
无符号字符像素[640*480];
}屏幕;
静态void writeFile(){
常数int dimx=640,dimy=480;
int mNumPixels=dimx*dimy;
屏幕*mScreen;
inti,像素;
FILE*FILE=fopen(“输出”,“w”);
if(file==NULL)返回;
/*移位*/
(无效)fprintf(文件“P6\n%d%d\n255\n”,dimx,dimy);
对于(i=1;i像素[像素];
颜色[0]=(mRGB&0xE0)>>5;
颜色[1]=(mRGB&0x1D)>>2;
颜色[2]=mRGB&0x03;
fwrite(颜色,sizeof(无符号字符)*3,1,文件);
}
}
fclose(文件);
}

示例代码的uninit\u device()修改可用内存,使指针不再可用。必须在调用此方法/函数之前调用writeFile()方法。

从哪里得到指针大小为2个字符的信息???尝试
malloc(sizeof(char*))
。而且你从来没有释放过这个内存。@PaulOgilvie这个指针显然从未使用过,所以这是内存泄漏,但它可能也在调试海报中留下的东西。像素循环不应该转到10,而应该转到
缓冲区[i]。长度
。我找不到
屏幕
的定义。确保它被定义为一个
结构
,有一个成员,
像素
,这是一个
无符号字符数组
@JohnByrne。您应该向我们展示您在哪里更改示例程序来调用writeFile()函数。您是否在调试器中运行了它,以找出导致错误的指针访问?抱歉,这是调试代码,我从未取消分配它。所以这将是一个内存泄漏。另外,我还包括了Screen的结构定义。