1. 程式人生 > >imx6 V4L2視訊採集和播放(輸入video0,輸出為video17)

imx6 V4L2視訊採集和播放(輸入video0,輸出為video17)

next:
        memset(&capture_buf, 0, sizeof(capture_buf));
        capture_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        capture_buf.memory = V4L2_MEMORY_MMAP;
        if (ioctl(fd_capture_v4l, VIDIOC_DQBUF, &capture_buf) < 0) {
            printf("VIDIOC_DQBUF failed.\n");
            return TFAIL;
        }

        memset(&output_buf, 0, sizeof(output_buf));
        output_buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
        output_buf.memory = V4L2_MEMORY_MMAP;
        if (i < g_output_num_buffers) {
            output_buf.index = i;
            if (ioctl(fd_output_v4l, VIDIOC_QUERYBUF, &output_buf) < 0)
            {
                printf("VIDIOC_QUERYBUF failed\n");
                return TFAIL;
            }
        } else {
            output_buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
            output_buf.memory = V4L2_MEMORY_MMAP;
            if (ioctl(fd_output_v4l, VIDIOC_DQBUF, &output_buf) < 0)
            {
                printf("VIDIOC_DQBUF failed\n");
                return TFAIL;
            }
        }

        memcpy(output_buffers[output_buf.index].start, capture_buffers[capture_buf.index].start, g_frame_size);
        if (ioctl(fd_capture_v4l, VIDIOC_QBUF, &capture_buf) < 0) {
            printf("VIDIOC_QBUF failed\n");
            return TFAIL;
        }

        output_buf.timestamp.tv_sec = tv_start.tv_sec;
        output_buf.timestamp.tv_usec = tv_start.tv_usec + (g_frame_period * i);
        if (g_vdi_enable)
            output_buf.field = g_tb ? V4L2_FIELD_INTERLACED_TB :
                          V4L2_FIELD_INTERLACED_BT;
        if (ioctl(fd_output_v4l, VIDIOC_QBUF, &output_buf) < 0)
        {
            printf("VIDIOC_QBUF failed\n");
            return TFAIL;
        }
        if (i == 1) {
            type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
            if (ioctl(fd_output_v4l, VIDIOC_STREAMON, &type) < 0) {
                printf("Could not start stream\n");
                return TFAIL;
            }
        }
    }