• 4069阅读
  • 0回复

如何把多FILE文件中的图片数据提取出来 [复制链接]

上一主题 下一主题
离线陈媛媛
 
只看楼主 正序阅读 楼主  发表于: 2007-01-08
源程序代码如下:
int
to_yuv (FILE *out, int fd, int width, int height)
{
  struct video_mbuf vid_buf;
  struct video_mmap vid_mmap;
  int do_read = 0;
  int done = 0;
  char *map;
  int size;
  int num = 0;
  double ms_time0, ms_time1;
  int tpf = 40;   /* 40 ms time per frame (= 25 fps) */

  if (ioctl (fd, VIDIOCGMBUF, &vid_buf) == -1) {
    do_read = 1;
  } else {
    fprintf (stderr, "buffsize=%d frames=%d\n",vid_buf.size,vid_buf.frames);
  }

  if (!do_read) {
    map = mmap (0, vid_buf.size, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);
    if ((unsigned char *)-1 == (unsigned char *)map) {
        perror ("mmap()");
        return -1;
    }
    vid_mmap.format = VIDEO_PALETTE_YUV420P;
    vid_mmap.frame = 0;
    vid_mmap.width = width;
    vid_mmap.height =height;
    size = (width * height) + (width * height / 2);

    fprintf (stderr, "%dx%d bufsize=%d size=%d\n",
          width, height, vid_buf.size, size);

    printf ("YUV4MPEG%d %d %d\n", width, height, 3);

    if (ioctl (fd, VIDIOCMCAPTURE, &vid_mmap) == -1) {
        perror ("ioctl VIDIOCMCAPTURE");
        munmap (map, vid_buf.size);
        return -1;
    }
    vid_mmap.frame = 1;
    if (ioctl (fd, VIDIOCMCAPTURE, &vid_mmap) == -1) {
        perror ("ioctl VIDIOCMCAPTURE");
        munmap (map, vid_buf.size);
        return -1;
    }
    while (!done) {
        ms_time0 = ms_time(); /* milli seconds */
        vid_mmap.frame = vid_mmap.frame > 0 ? 0 : 1;
        if (ioctl (fd, VIDIOCSYNC, &vid_mmap.frame) == -1) {
          perror ("ioctl VIDIOCSYNC");
          munmap (map, vid_buf.size);
          return -1;
        }
        printf ("FRAME\n");
        fwrite (map + vid_buf.offsets[vid_mmap.frame], 1, size, stdout);
        if (ioctl (fd, VIDIOCMCAPTURE, &vid_mmap) == -1) {
          perror ("ioctl VIDIOCMCAPTURE");
          munmap (map, vid_buf.size);
          return -1;
        }
        num++;
        ms_time1 = ms_time () - ms_time0;
        if (ms_time1 < (double)tpf) {
          usleep (tpf - (int)ms_time1);
        } else {
          fprintf (stderr, "delayed: dt=%f\n",ms_time1 - (double)tpf);
        }
    }
    munmap (map, vid_buf.size);
  } else {
    fprintf (stderr, "still not implemented\n");
  }
  return 0;
}
他是把多针的图像数据都fwrite (map + vid_buf.offsets[vid_mmap.frame], 1, size, stdout);存在了stdout中如何把它里面的每一针数据提取出来啊?各位帮帮忙啊!!不胜感激
[ 此贴被XChinux在2007-01-08 16:17重新编辑 ]
仁者无敌
快速回复
限100 字节
 
上一个 下一个