簡體   English   中英

(與V4L2相關)這兩行是做什么的?

[英](V4L2 related) What do these 2 lines do?

s->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
s->buf.memory = V4L2_MEMORY_MMAP;

我必須承認我不熟悉V4L2 API。 我在上面的兩行中查找,第一行是建立緩沖區類型,第二行是將視頻設備專用內存的指針傳遞給緩沖區。

問題是,我不知道我是否做出正確的猜測,我需要有人詳細解釋第二行的工作方式。

第二行確定如何使用緩沖區。 合法值是:

表3.5。 枚舉v4l2_memory

V4L2_MEMORY_MMAP    1   The buffer is used for memory mapping I/O.  
V4L2_MEMORY_USERPTR 2   The buffer is used for user pointer I/O.  
V4L2_MEMORY_OVERLAY 3   [Not Yet Implemented]  
V4L2_MEMORY_DMABUF  4   The buffer is used for DMA shared buffer I/O. 

您包含的代碼實際上並未分配緩沖區。 這里是表示一個較為完整的代碼片段mmap緩沖器ING:

    CLEAR(req);
    req.count = 2;
    req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    req.memory = V4L2_MEMORY_MMAP;
    xioctl(fd, VIDIOC_REQBUFS, &req);

    buffers = calloc(req.count, sizeof(*buffers));
    for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {
            CLEAR(buf);

            buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE;
            buf.memory      = V4L2_MEMORY_MMAP;
            buf.index       = n_buffers;

            xioctl(fd, VIDIOC_QUERYBUF, &buf);

            buffers[n_buffers].length = buf.length;
            buffers[n_buffers].start = v4l2_mmap(NULL, buf.length,
                          PROT_READ | PROT_WRITE, MAP_SHARED,
                          fd, buf.m.offset);

            if (MAP_FAILED == buffers[n_buffers].start) {
                    perror("mmap");
                    exit(EXIT_FAILURE);
            }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM