USB UVC カメラで Motion JPEG を取得

Pocket

せっかくなので、USB の UVC カメラで Motion JPEG を取得したことのメモ

linux で UVC カメラで画像を取得する場合は、video4linux2 を使います

カメラの画像を取得する場合、YUYV では取得画像の縦横のサイズから
読むべきサイズがわかります

しかし、Motion JPEG の場合は、動的にサイズが変わるのでわかりません
何バイト読み込めばいいのか?

struct v4l2_buffer の bytesused のバイト数を読み込めばいいのです


struct v4l2_buffer buf;

memset(buf, '\0', sizeof(buf));

buf.type   = V4L2_BUF_type_VIDEO_CAPture;
buf.memory = V4L2_MEMORY_MMAP;

ioctl(fd, VIDIOC_DQBUF, &buf);

fp = fopen("hoge.jpg", "wp");
fwrite(buffers[buf.index].start , buf.bytesused, 1, fp);
fclose(fp);

buf.bytesused に Motion Jpeg のサイズが書き込まれますので、
fwrite で書き込みましょう

もちろん、buffers は mmap とヒモ付てありますよ

参考は Video4Linux2 の APIを参考にしてます

コメントを残す