blob: bb23745ebcaf41ea331725a0c0a5d60104e9734c [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -03003.. _VIDIOC_STREAMON:
Markus Heiser5377d912016-06-30 15:18:56 +02004
5***************************************
6ioctl VIDIOC_STREAMON, VIDIOC_STREAMOFF
7***************************************
8
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -03009Name
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030010====
Markus Heiser5377d912016-06-30 15:18:56 +020011
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030012VIDIOC_STREAMON - VIDIOC_STREAMOFF - Start or stop streaming I/O
Markus Heiser5377d912016-06-30 15:18:56 +020013
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030014
15Synopsis
Markus Heiser5377d912016-06-30 15:18:56 +020016========
17
Mauro Carvalho Chehabb7e67f62016-07-02 09:49:16 -030018.. cpp:function:: int ioctl( int fd, int request, const int *argp )
Markus Heiser5377d912016-06-30 15:18:56 +020019
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030020
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030021Arguments
Markus Heiser5377d912016-06-30 15:18:56 +020022=========
23
24``fd``
25 File descriptor returned by :ref:`open() <func-open>`.
26
27``request``
28 VIDIOC_STREAMON, VIDIOC_STREAMOFF
29
30``argp``
31
32
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030033Description
Markus Heiser5377d912016-06-30 15:18:56 +020034===========
35
36The ``VIDIOC_STREAMON`` and ``VIDIOC_STREAMOFF`` ioctl start and stop
37the capture or output process during streaming
38(:ref:`memory mapping <mmap>`, :ref:`user pointer <userp>` or
39:ref:`DMABUF <dmabuf>`) I/O.
40
41Capture hardware is disabled and no input buffers are filled (if there
42are any empty buffers in the incoming queue) until ``VIDIOC_STREAMON``
43has been called. Output hardware is disabled and no video signal is
44produced until ``VIDIOC_STREAMON`` has been called. The ioctl will
45succeed when at least one output buffer is in the incoming queue.
46
47Memory-to-memory devices will not start until ``VIDIOC_STREAMON`` has
48been called for both the capture and output stream types.
49
50If ``VIDIOC_STREAMON`` fails then any already queued buffers will remain
51queued.
52
53The ``VIDIOC_STREAMOFF`` ioctl, apart of aborting or finishing any DMA
54in progress, unlocks any user pointer buffers locked in physical memory,
55and it removes all buffers from the incoming and outgoing queues. That
56means all images captured but not dequeued yet will be lost, likewise
57all images enqueued for output but not transmitted yet. I/O returns to
58the same state as after calling
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030059:ref:`VIDIOC_REQBUFS` and can be restarted
Markus Heiser5377d912016-06-30 15:18:56 +020060accordingly.
61
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030062If buffers have been queued with :ref:`VIDIOC_QBUF` and
Markus Heiser5377d912016-06-30 15:18:56 +020063``VIDIOC_STREAMOFF`` is called without ever having called
64``VIDIOC_STREAMON``, then those queued buffers will also be removed from
65the incoming queue and all are returned to the same state as after
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030066calling :ref:`VIDIOC_REQBUFS` and can be restarted
Markus Heiser5377d912016-06-30 15:18:56 +020067accordingly.
68
69Both ioctls take a pointer to an integer, the desired buffer or stream
70type. This is the same as struct
71:ref:`v4l2_requestbuffers <v4l2-requestbuffers>` ``type``.
72
73If ``VIDIOC_STREAMON`` is called when streaming is already in progress,
74or if ``VIDIOC_STREAMOFF`` is called when streaming is already stopped,
75then 0 is returned. Nothing happens in the case of ``VIDIOC_STREAMON``,
76but ``VIDIOC_STREAMOFF`` will return queued buffers to their starting
77state as mentioned above.
78
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030079.. note:: Applications can be preempted for unknown periods right before
80 or after the ``VIDIOC_STREAMON`` or ``VIDIOC_STREAMOFF`` calls, there is
81 no notion of starting or stopping "now". Buffer timestamps can be used
82 to synchronize with other events.
Markus Heiser5377d912016-06-30 15:18:56 +020083
84
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030085Return Value
Markus Heiser5377d912016-06-30 15:18:56 +020086============
87
88On success 0 is returned, on error -1 and the ``errno`` variable is set
89appropriately. The generic error codes are described at the
90:ref:`Generic Error Codes <gen-errors>` chapter.
91
92EINVAL
93 The buffer ``type`` is not supported, or no buffers have been
94 allocated (memory mapping) or enqueued (output) yet.
95
96EPIPE
97 The driver implements
98 :ref:`pad-level format configuration <pad-level-formats>` and the
99 pipeline configuration is invalid.
100
101ENOLINK
102 The driver implements Media Controller interface and the pipeline
103 link configuration is invalid.