Blame view

kernel/linux-rt-4.4.41/Documentation/DocBook/media/v4l/vidioc-streamon.xml 4.45 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
  <refentry id="vidioc-streamon">
    <refmeta>
      <refentrytitle>ioctl VIDIOC_STREAMON, VIDIOC_STREAMOFF</refentrytitle>
      &manvol;
    </refmeta>
  
    <refnamediv>
      <refname>VIDIOC_STREAMON</refname>
      <refname>VIDIOC_STREAMOFF</refname>
      <refpurpose>Start or stop streaming I/O</refpurpose>
    </refnamediv>
  
    <refsynopsisdiv>
      <funcsynopsis>
        <funcprototype>
  	<funcdef>int <function>ioctl</function></funcdef>
  	<paramdef>int <parameter>fd</parameter></paramdef>
  	<paramdef>int <parameter>request</parameter></paramdef>
  	<paramdef>const int *<parameter>argp</parameter></paramdef>
        </funcprototype>
      </funcsynopsis>
    </refsynopsisdiv>
  
    <refsect1>
      <title>Arguments</title>
  
      <variablelist>
        <varlistentry>
  	<term><parameter>fd</parameter></term>
  	<listitem>
  	  <para>&fd;</para>
  	</listitem>
        </varlistentry>
        <varlistentry>
  	<term><parameter>request</parameter></term>
  	<listitem>
  	  <para>VIDIOC_STREAMON, VIDIOC_STREAMOFF</para>
  	</listitem>
        </varlistentry>
        <varlistentry>
  	<term><parameter>argp</parameter></term>
  	<listitem>
  	  <para></para>
  	</listitem>
        </varlistentry>
      </variablelist>
    </refsect1>
  
    <refsect1>
      <title>Description</title>
  
      <para>The <constant>VIDIOC_STREAMON</constant> and
  <constant>VIDIOC_STREAMOFF</constant> ioctl start and stop the capture
  or output process during streaming (<link linkend="mmap">memory
  mapping</link>, <link linkend="userp">user pointer</link> or
  <link linkend="dmabuf">DMABUF</link>) I/O.</para>
  
      <para>Capture hardware is disabled and no input
  buffers are filled (if there are any empty buffers in the incoming
  queue) until <constant>VIDIOC_STREAMON</constant> has been called.
  Output hardware is disabled and no video signal is
  produced until <constant>VIDIOC_STREAMON</constant> has been called.
  The ioctl will succeed when at least one output buffer is in the
  incoming queue.</para>
  
      <para>Memory-to-memory devices will not start until
  <constant>VIDIOC_STREAMON</constant> has been called for both the capture
  and output stream types.</para>
  
      <para>If <constant>VIDIOC_STREAMON</constant> fails then any already
  queued buffers will remain queued.</para>
  
      <para>The <constant>VIDIOC_STREAMOFF</constant> ioctl, apart of
  aborting or finishing any DMA in progress, unlocks any user pointer
  buffers locked in physical memory, and it removes all buffers from the
  incoming and outgoing queues. That means all images captured but not
  dequeued yet will be lost, likewise all images enqueued for output but
  not transmitted yet. I/O returns to the same state as after calling
  &VIDIOC-REQBUFS; and can be restarted accordingly.</para>
  
      <para>If buffers have been queued with &VIDIOC-QBUF; and
  <constant>VIDIOC_STREAMOFF</constant> is called without ever having
  called <constant>VIDIOC_STREAMON</constant>, then those queued buffers
  will also be removed from the incoming queue and all are returned to the
  same state as after calling &VIDIOC-REQBUFS; and can be restarted
  accordingly.</para>
  
      <para>Both ioctls take a pointer to an integer, the desired buffer or
  stream type. This is the same as &v4l2-requestbuffers;
  <structfield>type</structfield>.</para>
  
      <para>If <constant>VIDIOC_STREAMON</constant> is called when streaming
  is already in progress, or if <constant>VIDIOC_STREAMOFF</constant> is called
  when streaming is already stopped, then 0 is returned. Nothing happens in the
  case of <constant>VIDIOC_STREAMON</constant>, but <constant>VIDIOC_STREAMOFF</constant>
  will return queued buffers to their starting state as mentioned above.</para>
  
      <para>Note that applications can be preempted for unknown periods right
  before or after the <constant>VIDIOC_STREAMON</constant> or
  <constant>VIDIOC_STREAMOFF</constant> calls, there is no notion of
  starting or stopping "now". Buffer timestamps can be used to
  synchronize with other events.</para>
    </refsect1>
  
    <refsect1>
      &return-value;
  
      <variablelist>
        <varlistentry>
  	<term><errorcode>EINVAL</errorcode></term>
  	<listitem>
  	  <para>The buffer <structfield>type</structfield> is not supported,
  	  or no buffers have been allocated (memory mapping) or enqueued
  	  (output) yet.</para>
  	</listitem>
        </varlistentry>
        <varlistentry>
  	<term><errorcode>EPIPE</errorcode></term>
  	<listitem>
  	  <para>The driver implements <link
  	  linkend="pad-level-formats">pad-level format configuration</link> and
  	  the pipeline configuration is invalid.
  	  </para>
  	</listitem>
        </varlistentry>
      </variablelist>
    </refsect1>
  </refentry>