Commit 35c3017a29d278c4405a7f3ab30b814999d156d3
Committed by
Mauro Carvalho Chehab
1 parent
333c8b9778
Exists in
master
and in
39 other branches
[media] v4l: v4l2_subdev userspace frame interval API
The three new ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL, VIDIOC_SUBDEV_G_FRAME_INTERVAL and VIDIOC_SUBDEV_S_FRAME_INTERVAL can be used to enumerate and configure a subdev's frame rate from userspace. Two new video::g/s_frame_interval subdev operations are introduced to support those ioctls. The existing video::g/s_parm operations are deprecated and shouldn't be used anymore. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Acked-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Showing 7 changed files with 360 additions and 0 deletions Inline Diff
Documentation/DocBook/media-entities.tmpl
1 | <!-- Generated file! Do not edit. --> | 1 | <!-- Generated file! Do not edit. --> |
2 | 2 | ||
3 | <!-- Functions --> | 3 | <!-- Functions --> |
4 | <!ENTITY func-close "<link linkend='func-close'><function>close()</function></link>"> | 4 | <!ENTITY func-close "<link linkend='func-close'><function>close()</function></link>"> |
5 | <!ENTITY func-ioctl "<link linkend='func-ioctl'><function>ioctl()</function></link>"> | 5 | <!ENTITY func-ioctl "<link linkend='func-ioctl'><function>ioctl()</function></link>"> |
6 | <!ENTITY func-mmap "<link linkend='func-mmap'><function>mmap()</function></link>"> | 6 | <!ENTITY func-mmap "<link linkend='func-mmap'><function>mmap()</function></link>"> |
7 | <!ENTITY func-munmap "<link linkend='func-munmap'><function>munmap()</function></link>"> | 7 | <!ENTITY func-munmap "<link linkend='func-munmap'><function>munmap()</function></link>"> |
8 | <!ENTITY func-open "<link linkend='func-open'><function>open()</function></link>"> | 8 | <!ENTITY func-open "<link linkend='func-open'><function>open()</function></link>"> |
9 | <!ENTITY func-poll "<link linkend='func-poll'><function>poll()</function></link>"> | 9 | <!ENTITY func-poll "<link linkend='func-poll'><function>poll()</function></link>"> |
10 | <!ENTITY func-read "<link linkend='func-read'><function>read()</function></link>"> | 10 | <!ENTITY func-read "<link linkend='func-read'><function>read()</function></link>"> |
11 | <!ENTITY func-select "<link linkend='func-select'><function>select()</function></link>"> | 11 | <!ENTITY func-select "<link linkend='func-select'><function>select()</function></link>"> |
12 | <!ENTITY func-write "<link linkend='func-write'><function>write()</function></link>"> | 12 | <!ENTITY func-write "<link linkend='func-write'><function>write()</function></link>"> |
13 | 13 | ||
14 | <!ENTITY media-func-close "<link linkend='media-func-close'><function>close()</function></link>"> | 14 | <!ENTITY media-func-close "<link linkend='media-func-close'><function>close()</function></link>"> |
15 | <!ENTITY media-func-ioctl "<link linkend='media-func-ioctl'><function>ioctl()</function></link>"> | 15 | <!ENTITY media-func-ioctl "<link linkend='media-func-ioctl'><function>ioctl()</function></link>"> |
16 | <!ENTITY media-func-open "<link linkend='media-func-open'><function>open()</function></link>"> | 16 | <!ENTITY media-func-open "<link linkend='media-func-open'><function>open()</function></link>"> |
17 | 17 | ||
18 | <!-- Ioctls --> | 18 | <!-- Ioctls --> |
19 | <!ENTITY VIDIOC-CROPCAP "<link linkend='vidioc-cropcap'><constant>VIDIOC_CROPCAP</constant></link>"> | 19 | <!ENTITY VIDIOC-CROPCAP "<link linkend='vidioc-cropcap'><constant>VIDIOC_CROPCAP</constant></link>"> |
20 | <!ENTITY VIDIOC-DBG-G-CHIP-IDENT "<link linkend='vidioc-dbg-g-chip-ident'><constant>VIDIOC_DBG_G_CHIP_IDENT</constant></link>"> | 20 | <!ENTITY VIDIOC-DBG-G-CHIP-IDENT "<link linkend='vidioc-dbg-g-chip-ident'><constant>VIDIOC_DBG_G_CHIP_IDENT</constant></link>"> |
21 | <!ENTITY VIDIOC-DBG-G-REGISTER "<link linkend='vidioc-dbg-g-register'><constant>VIDIOC_DBG_G_REGISTER</constant></link>"> | 21 | <!ENTITY VIDIOC-DBG-G-REGISTER "<link linkend='vidioc-dbg-g-register'><constant>VIDIOC_DBG_G_REGISTER</constant></link>"> |
22 | <!ENTITY VIDIOC-DBG-S-REGISTER "<link linkend='vidioc-dbg-g-register'><constant>VIDIOC_DBG_S_REGISTER</constant></link>"> | 22 | <!ENTITY VIDIOC-DBG-S-REGISTER "<link linkend='vidioc-dbg-g-register'><constant>VIDIOC_DBG_S_REGISTER</constant></link>"> |
23 | <!ENTITY VIDIOC-DQBUF "<link linkend='vidioc-qbuf'><constant>VIDIOC_DQBUF</constant></link>"> | 23 | <!ENTITY VIDIOC-DQBUF "<link linkend='vidioc-qbuf'><constant>VIDIOC_DQBUF</constant></link>"> |
24 | <!ENTITY VIDIOC-DQEVENT "<link linkend='vidioc-dqevent'><constant>VIDIOC_DQEVENT</constant></link>"> | 24 | <!ENTITY VIDIOC-DQEVENT "<link linkend='vidioc-dqevent'><constant>VIDIOC_DQEVENT</constant></link>"> |
25 | <!ENTITY VIDIOC-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_ENCODER_CMD</constant></link>"> | 25 | <!ENTITY VIDIOC-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_ENCODER_CMD</constant></link>"> |
26 | <!ENTITY VIDIOC-ENUMAUDIO "<link linkend='vidioc-enumaudio'><constant>VIDIOC_ENUMAUDIO</constant></link>"> | 26 | <!ENTITY VIDIOC-ENUMAUDIO "<link linkend='vidioc-enumaudio'><constant>VIDIOC_ENUMAUDIO</constant></link>"> |
27 | <!ENTITY VIDIOC-ENUMAUDOUT "<link linkend='vidioc-enumaudioout'><constant>VIDIOC_ENUMAUDOUT</constant></link>"> | 27 | <!ENTITY VIDIOC-ENUMAUDOUT "<link linkend='vidioc-enumaudioout'><constant>VIDIOC_ENUMAUDOUT</constant></link>"> |
28 | <!ENTITY VIDIOC-ENUMINPUT "<link linkend='vidioc-enuminput'><constant>VIDIOC_ENUMINPUT</constant></link>"> | 28 | <!ENTITY VIDIOC-ENUMINPUT "<link linkend='vidioc-enuminput'><constant>VIDIOC_ENUMINPUT</constant></link>"> |
29 | <!ENTITY VIDIOC-ENUMOUTPUT "<link linkend='vidioc-enumoutput'><constant>VIDIOC_ENUMOUTPUT</constant></link>"> | 29 | <!ENTITY VIDIOC-ENUMOUTPUT "<link linkend='vidioc-enumoutput'><constant>VIDIOC_ENUMOUTPUT</constant></link>"> |
30 | <!ENTITY VIDIOC-ENUMSTD "<link linkend='vidioc-enumstd'><constant>VIDIOC_ENUMSTD</constant></link>"> | 30 | <!ENTITY VIDIOC-ENUMSTD "<link linkend='vidioc-enumstd'><constant>VIDIOC_ENUMSTD</constant></link>"> |
31 | <!ENTITY VIDIOC-ENUM-DV-PRESETS "<link linkend='vidioc-enum-dv-presets'><constant>VIDIOC_ENUM_DV_PRESETS</constant></link>"> | 31 | <!ENTITY VIDIOC-ENUM-DV-PRESETS "<link linkend='vidioc-enum-dv-presets'><constant>VIDIOC_ENUM_DV_PRESETS</constant></link>"> |
32 | <!ENTITY VIDIOC-ENUM-FMT "<link linkend='vidioc-enum-fmt'><constant>VIDIOC_ENUM_FMT</constant></link>"> | 32 | <!ENTITY VIDIOC-ENUM-FMT "<link linkend='vidioc-enum-fmt'><constant>VIDIOC_ENUM_FMT</constant></link>"> |
33 | <!ENTITY VIDIOC-ENUM-FRAMEINTERVALS "<link linkend='vidioc-enum-frameintervals'><constant>VIDIOC_ENUM_FRAMEINTERVALS</constant></link>"> | 33 | <!ENTITY VIDIOC-ENUM-FRAMEINTERVALS "<link linkend='vidioc-enum-frameintervals'><constant>VIDIOC_ENUM_FRAMEINTERVALS</constant></link>"> |
34 | <!ENTITY VIDIOC-ENUM-FRAMESIZES "<link linkend='vidioc-enum-framesizes'><constant>VIDIOC_ENUM_FRAMESIZES</constant></link>"> | 34 | <!ENTITY VIDIOC-ENUM-FRAMESIZES "<link linkend='vidioc-enum-framesizes'><constant>VIDIOC_ENUM_FRAMESIZES</constant></link>"> |
35 | <!ENTITY VIDIOC-G-AUDIO "<link linkend='vidioc-g-audio'><constant>VIDIOC_G_AUDIO</constant></link>"> | 35 | <!ENTITY VIDIOC-G-AUDIO "<link linkend='vidioc-g-audio'><constant>VIDIOC_G_AUDIO</constant></link>"> |
36 | <!ENTITY VIDIOC-G-AUDOUT "<link linkend='vidioc-g-audioout'><constant>VIDIOC_G_AUDOUT</constant></link>"> | 36 | <!ENTITY VIDIOC-G-AUDOUT "<link linkend='vidioc-g-audioout'><constant>VIDIOC_G_AUDOUT</constant></link>"> |
37 | <!ENTITY VIDIOC-G-CROP "<link linkend='vidioc-g-crop'><constant>VIDIOC_G_CROP</constant></link>"> | 37 | <!ENTITY VIDIOC-G-CROP "<link linkend='vidioc-g-crop'><constant>VIDIOC_G_CROP</constant></link>"> |
38 | <!ENTITY VIDIOC-G-CTRL "<link linkend='vidioc-g-ctrl'><constant>VIDIOC_G_CTRL</constant></link>"> | 38 | <!ENTITY VIDIOC-G-CTRL "<link linkend='vidioc-g-ctrl'><constant>VIDIOC_G_CTRL</constant></link>"> |
39 | <!ENTITY VIDIOC-G-DV-PRESET "<link linkend='vidioc-g-dv-preset'><constant>VIDIOC_G_DV_PRESET</constant></link>"> | 39 | <!ENTITY VIDIOC-G-DV-PRESET "<link linkend='vidioc-g-dv-preset'><constant>VIDIOC_G_DV_PRESET</constant></link>"> |
40 | <!ENTITY VIDIOC-G-DV-TIMINGS "<link linkend='vidioc-g-dv-timings'><constant>VIDIOC_G_DV_TIMINGS</constant></link>"> | 40 | <!ENTITY VIDIOC-G-DV-TIMINGS "<link linkend='vidioc-g-dv-timings'><constant>VIDIOC_G_DV_TIMINGS</constant></link>"> |
41 | <!ENTITY VIDIOC-G-ENC-INDEX "<link linkend='vidioc-g-enc-index'><constant>VIDIOC_G_ENC_INDEX</constant></link>"> | 41 | <!ENTITY VIDIOC-G-ENC-INDEX "<link linkend='vidioc-g-enc-index'><constant>VIDIOC_G_ENC_INDEX</constant></link>"> |
42 | <!ENTITY VIDIOC-G-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_G_EXT_CTRLS</constant></link>"> | 42 | <!ENTITY VIDIOC-G-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_G_EXT_CTRLS</constant></link>"> |
43 | <!ENTITY VIDIOC-G-FBUF "<link linkend='vidioc-g-fbuf'><constant>VIDIOC_G_FBUF</constant></link>"> | 43 | <!ENTITY VIDIOC-G-FBUF "<link linkend='vidioc-g-fbuf'><constant>VIDIOC_G_FBUF</constant></link>"> |
44 | <!ENTITY VIDIOC-G-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_G_FMT</constant></link>"> | 44 | <!ENTITY VIDIOC-G-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_G_FMT</constant></link>"> |
45 | <!ENTITY VIDIOC-G-FREQUENCY "<link linkend='vidioc-g-frequency'><constant>VIDIOC_G_FREQUENCY</constant></link>"> | 45 | <!ENTITY VIDIOC-G-FREQUENCY "<link linkend='vidioc-g-frequency'><constant>VIDIOC_G_FREQUENCY</constant></link>"> |
46 | <!ENTITY VIDIOC-G-INPUT "<link linkend='vidioc-g-input'><constant>VIDIOC_G_INPUT</constant></link>"> | 46 | <!ENTITY VIDIOC-G-INPUT "<link linkend='vidioc-g-input'><constant>VIDIOC_G_INPUT</constant></link>"> |
47 | <!ENTITY VIDIOC-G-JPEGCOMP "<link linkend='vidioc-g-jpegcomp'><constant>VIDIOC_G_JPEGCOMP</constant></link>"> | 47 | <!ENTITY VIDIOC-G-JPEGCOMP "<link linkend='vidioc-g-jpegcomp'><constant>VIDIOC_G_JPEGCOMP</constant></link>"> |
48 | <!ENTITY VIDIOC-G-MPEGCOMP "<link linkend=''><constant>VIDIOC_G_MPEGCOMP</constant></link>"> | 48 | <!ENTITY VIDIOC-G-MPEGCOMP "<link linkend=''><constant>VIDIOC_G_MPEGCOMP</constant></link>"> |
49 | <!ENTITY VIDIOC-G-MODULATOR "<link linkend='vidioc-g-modulator'><constant>VIDIOC_G_MODULATOR</constant></link>"> | 49 | <!ENTITY VIDIOC-G-MODULATOR "<link linkend='vidioc-g-modulator'><constant>VIDIOC_G_MODULATOR</constant></link>"> |
50 | <!ENTITY VIDIOC-G-OUTPUT "<link linkend='vidioc-g-output'><constant>VIDIOC_G_OUTPUT</constant></link>"> | 50 | <!ENTITY VIDIOC-G-OUTPUT "<link linkend='vidioc-g-output'><constant>VIDIOC_G_OUTPUT</constant></link>"> |
51 | <!ENTITY VIDIOC-G-PARM "<link linkend='vidioc-g-parm'><constant>VIDIOC_G_PARM</constant></link>"> | 51 | <!ENTITY VIDIOC-G-PARM "<link linkend='vidioc-g-parm'><constant>VIDIOC_G_PARM</constant></link>"> |
52 | <!ENTITY VIDIOC-G-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_G_PRIORITY</constant></link>"> | 52 | <!ENTITY VIDIOC-G-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_G_PRIORITY</constant></link>"> |
53 | <!ENTITY VIDIOC-G-SLICED-VBI-CAP "<link linkend='vidioc-g-sliced-vbi-cap'><constant>VIDIOC_G_SLICED_VBI_CAP</constant></link>"> | 53 | <!ENTITY VIDIOC-G-SLICED-VBI-CAP "<link linkend='vidioc-g-sliced-vbi-cap'><constant>VIDIOC_G_SLICED_VBI_CAP</constant></link>"> |
54 | <!ENTITY VIDIOC-G-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_G_STD</constant></link>"> | 54 | <!ENTITY VIDIOC-G-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_G_STD</constant></link>"> |
55 | <!ENTITY VIDIOC-G-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_G_TUNER</constant></link>"> | 55 | <!ENTITY VIDIOC-G-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_G_TUNER</constant></link>"> |
56 | <!ENTITY VIDIOC-LOG-STATUS "<link linkend='vidioc-log-status'><constant>VIDIOC_LOG_STATUS</constant></link>"> | 56 | <!ENTITY VIDIOC-LOG-STATUS "<link linkend='vidioc-log-status'><constant>VIDIOC_LOG_STATUS</constant></link>"> |
57 | <!ENTITY VIDIOC-OVERLAY "<link linkend='vidioc-overlay'><constant>VIDIOC_OVERLAY</constant></link>"> | 57 | <!ENTITY VIDIOC-OVERLAY "<link linkend='vidioc-overlay'><constant>VIDIOC_OVERLAY</constant></link>"> |
58 | <!ENTITY VIDIOC-QBUF "<link linkend='vidioc-qbuf'><constant>VIDIOC_QBUF</constant></link>"> | 58 | <!ENTITY VIDIOC-QBUF "<link linkend='vidioc-qbuf'><constant>VIDIOC_QBUF</constant></link>"> |
59 | <!ENTITY VIDIOC-QUERYBUF "<link linkend='vidioc-querybuf'><constant>VIDIOC_QUERYBUF</constant></link>"> | 59 | <!ENTITY VIDIOC-QUERYBUF "<link linkend='vidioc-querybuf'><constant>VIDIOC_QUERYBUF</constant></link>"> |
60 | <!ENTITY VIDIOC-QUERYCAP "<link linkend='vidioc-querycap'><constant>VIDIOC_QUERYCAP</constant></link>"> | 60 | <!ENTITY VIDIOC-QUERYCAP "<link linkend='vidioc-querycap'><constant>VIDIOC_QUERYCAP</constant></link>"> |
61 | <!ENTITY VIDIOC-QUERYCTRL "<link linkend='vidioc-queryctrl'><constant>VIDIOC_QUERYCTRL</constant></link>"> | 61 | <!ENTITY VIDIOC-QUERYCTRL "<link linkend='vidioc-queryctrl'><constant>VIDIOC_QUERYCTRL</constant></link>"> |
62 | <!ENTITY VIDIOC-QUERYMENU "<link linkend='vidioc-queryctrl'><constant>VIDIOC_QUERYMENU</constant></link>"> | 62 | <!ENTITY VIDIOC-QUERYMENU "<link linkend='vidioc-queryctrl'><constant>VIDIOC_QUERYMENU</constant></link>"> |
63 | <!ENTITY VIDIOC-QUERYSTD "<link linkend='vidioc-querystd'><constant>VIDIOC_QUERYSTD</constant></link>"> | 63 | <!ENTITY VIDIOC-QUERYSTD "<link linkend='vidioc-querystd'><constant>VIDIOC_QUERYSTD</constant></link>"> |
64 | <!ENTITY VIDIOC-QUERY-DV-PRESET "<link linkend='vidioc-query-dv-preset'><constant>VIDIOC_QUERY_DV_PRESET</constant></link>"> | 64 | <!ENTITY VIDIOC-QUERY-DV-PRESET "<link linkend='vidioc-query-dv-preset'><constant>VIDIOC_QUERY_DV_PRESET</constant></link>"> |
65 | <!ENTITY VIDIOC-REQBUFS "<link linkend='vidioc-reqbufs'><constant>VIDIOC_REQBUFS</constant></link>"> | 65 | <!ENTITY VIDIOC-REQBUFS "<link linkend='vidioc-reqbufs'><constant>VIDIOC_REQBUFS</constant></link>"> |
66 | <!ENTITY VIDIOC-STREAMOFF "<link linkend='vidioc-streamon'><constant>VIDIOC_STREAMOFF</constant></link>"> | 66 | <!ENTITY VIDIOC-STREAMOFF "<link linkend='vidioc-streamon'><constant>VIDIOC_STREAMOFF</constant></link>"> |
67 | <!ENTITY VIDIOC-STREAMON "<link linkend='vidioc-streamon'><constant>VIDIOC_STREAMON</constant></link>"> | 67 | <!ENTITY VIDIOC-STREAMON "<link linkend='vidioc-streamon'><constant>VIDIOC_STREAMON</constant></link>"> |
68 | <!ENTITY VIDIOC-SUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_SUBSCRIBE_EVENT</constant></link>"> | 68 | <!ENTITY VIDIOC-SUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_SUBSCRIBE_EVENT</constant></link>"> |
69 | <!ENTITY VIDIOC-S-AUDIO "<link linkend='vidioc-g-audio'><constant>VIDIOC_S_AUDIO</constant></link>"> | 69 | <!ENTITY VIDIOC-S-AUDIO "<link linkend='vidioc-g-audio'><constant>VIDIOC_S_AUDIO</constant></link>"> |
70 | <!ENTITY VIDIOC-S-AUDOUT "<link linkend='vidioc-g-audioout'><constant>VIDIOC_S_AUDOUT</constant></link>"> | 70 | <!ENTITY VIDIOC-S-AUDOUT "<link linkend='vidioc-g-audioout'><constant>VIDIOC_S_AUDOUT</constant></link>"> |
71 | <!ENTITY VIDIOC-S-CROP "<link linkend='vidioc-g-crop'><constant>VIDIOC_S_CROP</constant></link>"> | 71 | <!ENTITY VIDIOC-S-CROP "<link linkend='vidioc-g-crop'><constant>VIDIOC_S_CROP</constant></link>"> |
72 | <!ENTITY VIDIOC-S-CTRL "<link linkend='vidioc-g-ctrl'><constant>VIDIOC_S_CTRL</constant></link>"> | 72 | <!ENTITY VIDIOC-S-CTRL "<link linkend='vidioc-g-ctrl'><constant>VIDIOC_S_CTRL</constant></link>"> |
73 | <!ENTITY VIDIOC-S-DV-PRESET "<link linkend='vidioc-g-dv-preset'><constant>VIDIOC_S_DV_PRESET</constant></link>"> | 73 | <!ENTITY VIDIOC-S-DV-PRESET "<link linkend='vidioc-g-dv-preset'><constant>VIDIOC_S_DV_PRESET</constant></link>"> |
74 | <!ENTITY VIDIOC-S-DV-TIMINGS "<link linkend='vidioc-g-dv-timings'><constant>VIDIOC_S_DV_TIMINGS</constant></link>"> | 74 | <!ENTITY VIDIOC-S-DV-TIMINGS "<link linkend='vidioc-g-dv-timings'><constant>VIDIOC_S_DV_TIMINGS</constant></link>"> |
75 | <!ENTITY VIDIOC-S-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_S_EXT_CTRLS</constant></link>"> | 75 | <!ENTITY VIDIOC-S-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_S_EXT_CTRLS</constant></link>"> |
76 | <!ENTITY VIDIOC-S-FBUF "<link linkend='vidioc-g-fbuf'><constant>VIDIOC_S_FBUF</constant></link>"> | 76 | <!ENTITY VIDIOC-S-FBUF "<link linkend='vidioc-g-fbuf'><constant>VIDIOC_S_FBUF</constant></link>"> |
77 | <!ENTITY VIDIOC-S-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_S_FMT</constant></link>"> | 77 | <!ENTITY VIDIOC-S-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_S_FMT</constant></link>"> |
78 | <!ENTITY VIDIOC-S-FREQUENCY "<link linkend='vidioc-g-frequency'><constant>VIDIOC_S_FREQUENCY</constant></link>"> | 78 | <!ENTITY VIDIOC-S-FREQUENCY "<link linkend='vidioc-g-frequency'><constant>VIDIOC_S_FREQUENCY</constant></link>"> |
79 | <!ENTITY VIDIOC-S-HW-FREQ-SEEK "<link linkend='vidioc-s-hw-freq-seek'><constant>VIDIOC_S_HW_FREQ_SEEK</constant></link>"> | 79 | <!ENTITY VIDIOC-S-HW-FREQ-SEEK "<link linkend='vidioc-s-hw-freq-seek'><constant>VIDIOC_S_HW_FREQ_SEEK</constant></link>"> |
80 | <!ENTITY VIDIOC-S-INPUT "<link linkend='vidioc-g-input'><constant>VIDIOC_S_INPUT</constant></link>"> | 80 | <!ENTITY VIDIOC-S-INPUT "<link linkend='vidioc-g-input'><constant>VIDIOC_S_INPUT</constant></link>"> |
81 | <!ENTITY VIDIOC-S-JPEGCOMP "<link linkend='vidioc-g-jpegcomp'><constant>VIDIOC_S_JPEGCOMP</constant></link>"> | 81 | <!ENTITY VIDIOC-S-JPEGCOMP "<link linkend='vidioc-g-jpegcomp'><constant>VIDIOC_S_JPEGCOMP</constant></link>"> |
82 | <!ENTITY VIDIOC-S-MPEGCOMP "<link linkend=''><constant>VIDIOC_S_MPEGCOMP</constant></link>"> | 82 | <!ENTITY VIDIOC-S-MPEGCOMP "<link linkend=''><constant>VIDIOC_S_MPEGCOMP</constant></link>"> |
83 | <!ENTITY VIDIOC-S-MODULATOR "<link linkend='vidioc-g-modulator'><constant>VIDIOC_S_MODULATOR</constant></link>"> | 83 | <!ENTITY VIDIOC-S-MODULATOR "<link linkend='vidioc-g-modulator'><constant>VIDIOC_S_MODULATOR</constant></link>"> |
84 | <!ENTITY VIDIOC-S-OUTPUT "<link linkend='vidioc-g-output'><constant>VIDIOC_S_OUTPUT</constant></link>"> | 84 | <!ENTITY VIDIOC-S-OUTPUT "<link linkend='vidioc-g-output'><constant>VIDIOC_S_OUTPUT</constant></link>"> |
85 | <!ENTITY VIDIOC-S-PARM "<link linkend='vidioc-g-parm'><constant>VIDIOC_S_PARM</constant></link>"> | 85 | <!ENTITY VIDIOC-S-PARM "<link linkend='vidioc-g-parm'><constant>VIDIOC_S_PARM</constant></link>"> |
86 | <!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>"> | 86 | <!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>"> |
87 | <!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>"> | 87 | <!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>"> |
88 | <!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>"> | 88 | <!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>"> |
89 | <!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>"> | 89 | <!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>"> |
90 | <!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>"> | 90 | <!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>"> |
91 | <!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>"> | 91 | <!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>"> |
92 | <!ENTITY VIDIOC-SUBDEV-G-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant></link>"> | ||
92 | <!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>"> | 93 | <!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>"> |
94 | <!ENTITY VIDIOC-SUBDEV-S-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></link>"> | ||
93 | <!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>"> | 95 | <!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>"> |
94 | <!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>"> | 96 | <!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>"> |
95 | <!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>"> | 97 | <!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>"> |
96 | <!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>"> | 98 | <!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>"> |
97 | 99 | ||
98 | <!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>"> | 100 | <!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>"> |
99 | <!ENTITY MEDIA-IOC-ENUM-ENTITIES "<link linkend='media-ioc-enum-entities'><constant>MEDIA_IOC_ENUM_ENTITIES</constant></link>"> | 101 | <!ENTITY MEDIA-IOC-ENUM-ENTITIES "<link linkend='media-ioc-enum-entities'><constant>MEDIA_IOC_ENUM_ENTITIES</constant></link>"> |
100 | <!ENTITY MEDIA-IOC-ENUM-LINKS "<link linkend='media-ioc-enum-links'><constant>MEDIA_IOC_ENUM_LINKS</constant></link>"> | 102 | <!ENTITY MEDIA-IOC-ENUM-LINKS "<link linkend='media-ioc-enum-links'><constant>MEDIA_IOC_ENUM_LINKS</constant></link>"> |
101 | <!ENTITY MEDIA-IOC-SETUP-LINK "<link linkend='media-ioc-setup-link'><constant>MEDIA_IOC_SETUP_LINK</constant></link>"> | 103 | <!ENTITY MEDIA-IOC-SETUP-LINK "<link linkend='media-ioc-setup-link'><constant>MEDIA_IOC_SETUP_LINK</constant></link>"> |
102 | 104 | ||
103 | <!-- Types --> | 105 | <!-- Types --> |
104 | <!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>"> | 106 | <!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>"> |
105 | 107 | ||
106 | <!-- Enums --> | 108 | <!-- Enums --> |
107 | <!ENTITY v4l2-buf-type "enum <link linkend='v4l2-buf-type'>v4l2_buf_type</link>"> | 109 | <!ENTITY v4l2-buf-type "enum <link linkend='v4l2-buf-type'>v4l2_buf_type</link>"> |
108 | <!ENTITY v4l2-colorspace "enum <link linkend='v4l2-colorspace'>v4l2_colorspace</link>"> | 110 | <!ENTITY v4l2-colorspace "enum <link linkend='v4l2-colorspace'>v4l2_colorspace</link>"> |
109 | <!ENTITY v4l2-ctrl-type "enum <link linkend='v4l2-ctrl-type'>v4l2_ctrl_type</link>"> | 111 | <!ENTITY v4l2-ctrl-type "enum <link linkend='v4l2-ctrl-type'>v4l2_ctrl_type</link>"> |
110 | <!ENTITY v4l2-exposure-auto-type "enum <link linkend='v4l2-exposure-auto-type'>v4l2_exposure_auto_type</link>"> | 112 | <!ENTITY v4l2-exposure-auto-type "enum <link linkend='v4l2-exposure-auto-type'>v4l2_exposure_auto_type</link>"> |
111 | <!ENTITY v4l2-field "enum <link linkend='v4l2-field'>v4l2_field</link>"> | 113 | <!ENTITY v4l2-field "enum <link linkend='v4l2-field'>v4l2_field</link>"> |
112 | <!ENTITY v4l2-frmivaltypes "enum <link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>"> | 114 | <!ENTITY v4l2-frmivaltypes "enum <link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>"> |
113 | <!ENTITY v4l2-frmsizetypes "enum <link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>"> | 115 | <!ENTITY v4l2-frmsizetypes "enum <link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>"> |
114 | <!ENTITY v4l2-mbus-pixelcode "enum <link linkend='v4l2-mbus-pixelcode'>v4l2_mbus_pixelcode</link>"> | 116 | <!ENTITY v4l2-mbus-pixelcode "enum <link linkend='v4l2-mbus-pixelcode'>v4l2_mbus_pixelcode</link>"> |
115 | <!ENTITY v4l2-memory "enum <link linkend='v4l2-memory'>v4l2_memory</link>"> | 117 | <!ENTITY v4l2-memory "enum <link linkend='v4l2-memory'>v4l2_memory</link>"> |
116 | <!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum <link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>"> | 118 | <!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum <link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>"> |
117 | <!ENTITY v4l2-mpeg-audio-crc "enum <link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>"> | 119 | <!ENTITY v4l2-mpeg-audio-crc "enum <link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>"> |
118 | <!ENTITY v4l2-mpeg-audio-emphasis "enum <link linkend='v4l2-mpeg-audio-emphasis'>v4l2_mpeg_audio_emphasis</link>"> | 120 | <!ENTITY v4l2-mpeg-audio-emphasis "enum <link linkend='v4l2-mpeg-audio-emphasis'>v4l2_mpeg_audio_emphasis</link>"> |
119 | <!ENTITY v4l2-mpeg-audio-encoding "enum <link linkend='v4l2-mpeg-audio-encoding'>v4l2_mpeg_audio_encoding</link>"> | 121 | <!ENTITY v4l2-mpeg-audio-encoding "enum <link linkend='v4l2-mpeg-audio-encoding'>v4l2_mpeg_audio_encoding</link>"> |
120 | <!ENTITY v4l2-mpeg-audio-l1-bitrate "enum <link linkend='v4l2-mpeg-audio-l1-bitrate'>v4l2_mpeg_audio_l1_bitrate</link>"> | 122 | <!ENTITY v4l2-mpeg-audio-l1-bitrate "enum <link linkend='v4l2-mpeg-audio-l1-bitrate'>v4l2_mpeg_audio_l1_bitrate</link>"> |
121 | <!ENTITY v4l2-mpeg-audio-l2-bitrate "enum <link linkend='v4l2-mpeg-audio-l2-bitrate'>v4l2_mpeg_audio_l2_bitrate</link>"> | 123 | <!ENTITY v4l2-mpeg-audio-l2-bitrate "enum <link linkend='v4l2-mpeg-audio-l2-bitrate'>v4l2_mpeg_audio_l2_bitrate</link>"> |
122 | <!ENTITY v4l2-mpeg-audio-l3-bitrate "enum <link linkend='v4l2-mpeg-audio-l3-bitrate'>v4l2_mpeg_audio_l3_bitrate</link>"> | 124 | <!ENTITY v4l2-mpeg-audio-l3-bitrate "enum <link linkend='v4l2-mpeg-audio-l3-bitrate'>v4l2_mpeg_audio_l3_bitrate</link>"> |
123 | <!ENTITY v4l2-mpeg-audio-mode "enum <link linkend='v4l2-mpeg-audio-mode'>v4l2_mpeg_audio_mode</link>"> | 125 | <!ENTITY v4l2-mpeg-audio-mode "enum <link linkend='v4l2-mpeg-audio-mode'>v4l2_mpeg_audio_mode</link>"> |
124 | <!ENTITY v4l2-mpeg-audio-mode-extension "enum <link linkend='v4l2-mpeg-audio-mode-extension'>v4l2_mpeg_audio_mode_extension</link>"> | 126 | <!ENTITY v4l2-mpeg-audio-mode-extension "enum <link linkend='v4l2-mpeg-audio-mode-extension'>v4l2_mpeg_audio_mode_extension</link>"> |
125 | <!ENTITY v4l2-mpeg-audio-sampling-freq "enum <link linkend='v4l2-mpeg-audio-sampling-freq'>v4l2_mpeg_audio_sampling_freq</link>"> | 127 | <!ENTITY v4l2-mpeg-audio-sampling-freq "enum <link linkend='v4l2-mpeg-audio-sampling-freq'>v4l2_mpeg_audio_sampling_freq</link>"> |
126 | <!ENTITY chroma-spatial-filter-type "enum <link linkend='chroma-spatial-filter-type'>v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type</link>"> | 128 | <!ENTITY chroma-spatial-filter-type "enum <link linkend='chroma-spatial-filter-type'>v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type</link>"> |
127 | <!ENTITY luma-spatial-filter-type "enum <link linkend='luma-spatial-filter-type'>v4l2_mpeg_cx2341x_video_luma_spatial_filter_type</link>"> | 129 | <!ENTITY luma-spatial-filter-type "enum <link linkend='luma-spatial-filter-type'>v4l2_mpeg_cx2341x_video_luma_spatial_filter_type</link>"> |
128 | <!ENTITY v4l2-mpeg-cx2341x-video-median-filter-type "enum <link linkend='v4l2-mpeg-cx2341x-video-median-filter-type'>v4l2_mpeg_cx2341x_video_median_filter_type</link>"> | 130 | <!ENTITY v4l2-mpeg-cx2341x-video-median-filter-type "enum <link linkend='v4l2-mpeg-cx2341x-video-median-filter-type'>v4l2_mpeg_cx2341x_video_median_filter_type</link>"> |
129 | <!ENTITY v4l2-mpeg-cx2341x-video-spatial-filter-mode "enum <link linkend='v4l2-mpeg-cx2341x-video-spatial-filter-mode'>v4l2_mpeg_cx2341x_video_spatial_filter_mode</link>"> | 131 | <!ENTITY v4l2-mpeg-cx2341x-video-spatial-filter-mode "enum <link linkend='v4l2-mpeg-cx2341x-video-spatial-filter-mode'>v4l2_mpeg_cx2341x_video_spatial_filter_mode</link>"> |
130 | <!ENTITY v4l2-mpeg-cx2341x-video-temporal-filter-mode "enum <link linkend='v4l2-mpeg-cx2341x-video-temporal-filter-mode'>v4l2_mpeg_cx2341x_video_temporal_filter_mode</link>"> | 132 | <!ENTITY v4l2-mpeg-cx2341x-video-temporal-filter-mode "enum <link linkend='v4l2-mpeg-cx2341x-video-temporal-filter-mode'>v4l2_mpeg_cx2341x_video_temporal_filter_mode</link>"> |
131 | <!ENTITY v4l2-mpeg-stream-type "enum <link linkend='v4l2-mpeg-stream-type'>v4l2_mpeg_stream_type</link>"> | 133 | <!ENTITY v4l2-mpeg-stream-type "enum <link linkend='v4l2-mpeg-stream-type'>v4l2_mpeg_stream_type</link>"> |
132 | <!ENTITY v4l2-mpeg-stream-vbi-fmt "enum <link linkend='v4l2-mpeg-stream-vbi-fmt'>v4l2_mpeg_stream_vbi_fmt</link>"> | 134 | <!ENTITY v4l2-mpeg-stream-vbi-fmt "enum <link linkend='v4l2-mpeg-stream-vbi-fmt'>v4l2_mpeg_stream_vbi_fmt</link>"> |
133 | <!ENTITY v4l2-mpeg-video-aspect "enum <link linkend='v4l2-mpeg-video-aspect'>v4l2_mpeg_video_aspect</link>"> | 135 | <!ENTITY v4l2-mpeg-video-aspect "enum <link linkend='v4l2-mpeg-video-aspect'>v4l2_mpeg_video_aspect</link>"> |
134 | <!ENTITY v4l2-mpeg-video-bitrate-mode "enum <link linkend='v4l2-mpeg-video-bitrate-mode'>v4l2_mpeg_video_bitrate_mode</link>"> | 136 | <!ENTITY v4l2-mpeg-video-bitrate-mode "enum <link linkend='v4l2-mpeg-video-bitrate-mode'>v4l2_mpeg_video_bitrate_mode</link>"> |
135 | <!ENTITY v4l2-mpeg-video-encoding "enum <link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>"> | 137 | <!ENTITY v4l2-mpeg-video-encoding "enum <link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>"> |
136 | <!ENTITY v4l2-power-line-frequency "enum <link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>"> | 138 | <!ENTITY v4l2-power-line-frequency "enum <link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>"> |
137 | <!ENTITY v4l2-priority "enum <link linkend='v4l2-priority'>v4l2_priority</link>"> | 139 | <!ENTITY v4l2-priority "enum <link linkend='v4l2-priority'>v4l2_priority</link>"> |
138 | <!ENTITY v4l2-subdev-format-whence "enum <link linkend='v4l2-subdev-format-whence'>v4l2_subdev_format_whence</link>"> | 140 | <!ENTITY v4l2-subdev-format-whence "enum <link linkend='v4l2-subdev-format-whence'>v4l2_subdev_format_whence</link>"> |
139 | <!ENTITY v4l2-tuner-type "enum <link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>"> | 141 | <!ENTITY v4l2-tuner-type "enum <link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>"> |
140 | <!ENTITY v4l2-preemphasis "enum <link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>"> | 142 | <!ENTITY v4l2-preemphasis "enum <link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>"> |
141 | 143 | ||
142 | <!-- Structures --> | 144 | <!-- Structures --> |
143 | <!ENTITY v4l2-audio "struct <link linkend='v4l2-audio'>v4l2_audio</link>"> | 145 | <!ENTITY v4l2-audio "struct <link linkend='v4l2-audio'>v4l2_audio</link>"> |
144 | <!ENTITY v4l2-audioout "struct <link linkend='v4l2-audioout'>v4l2_audioout</link>"> | 146 | <!ENTITY v4l2-audioout "struct <link linkend='v4l2-audioout'>v4l2_audioout</link>"> |
145 | <!ENTITY v4l2-bt-timings "struct <link linkend='v4l2-bt-timings'>v4l2_bt_timings</link>"> | 147 | <!ENTITY v4l2-bt-timings "struct <link linkend='v4l2-bt-timings'>v4l2_bt_timings</link>"> |
146 | <!ENTITY v4l2-buffer "struct <link linkend='v4l2-buffer'>v4l2_buffer</link>"> | 148 | <!ENTITY v4l2-buffer "struct <link linkend='v4l2-buffer'>v4l2_buffer</link>"> |
147 | <!ENTITY v4l2-plane "struct <link linkend='v4l2-plane'>v4l2_plane</link>"> | 149 | <!ENTITY v4l2-plane "struct <link linkend='v4l2-plane'>v4l2_plane</link>"> |
148 | <!ENTITY v4l2-capability "struct <link linkend='v4l2-capability'>v4l2_capability</link>"> | 150 | <!ENTITY v4l2-capability "struct <link linkend='v4l2-capability'>v4l2_capability</link>"> |
149 | <!ENTITY v4l2-captureparm "struct <link linkend='v4l2-captureparm'>v4l2_captureparm</link>"> | 151 | <!ENTITY v4l2-captureparm "struct <link linkend='v4l2-captureparm'>v4l2_captureparm</link>"> |
150 | <!ENTITY v4l2-clip "struct <link linkend='v4l2-clip'>v4l2_clip</link>"> | 152 | <!ENTITY v4l2-clip "struct <link linkend='v4l2-clip'>v4l2_clip</link>"> |
151 | <!ENTITY v4l2-control "struct <link linkend='v4l2-control'>v4l2_control</link>"> | 153 | <!ENTITY v4l2-control "struct <link linkend='v4l2-control'>v4l2_control</link>"> |
152 | <!ENTITY v4l2-crop "struct <link linkend='v4l2-crop'>v4l2_crop</link>"> | 154 | <!ENTITY v4l2-crop "struct <link linkend='v4l2-crop'>v4l2_crop</link>"> |
153 | <!ENTITY v4l2-cropcap "struct <link linkend='v4l2-cropcap'>v4l2_cropcap</link>"> | 155 | <!ENTITY v4l2-cropcap "struct <link linkend='v4l2-cropcap'>v4l2_cropcap</link>"> |
154 | <!ENTITY v4l2-dbg-chip-ident "struct <link linkend='v4l2-dbg-chip-ident'>v4l2_dbg_chip_ident</link>"> | 156 | <!ENTITY v4l2-dbg-chip-ident "struct <link linkend='v4l2-dbg-chip-ident'>v4l2_dbg_chip_ident</link>"> |
155 | <!ENTITY v4l2-dbg-match "struct <link linkend='v4l2-dbg-match'>v4l2_dbg_match</link>"> | 157 | <!ENTITY v4l2-dbg-match "struct <link linkend='v4l2-dbg-match'>v4l2_dbg_match</link>"> |
156 | <!ENTITY v4l2-dbg-register "struct <link linkend='v4l2-dbg-register'>v4l2_dbg_register</link>"> | 158 | <!ENTITY v4l2-dbg-register "struct <link linkend='v4l2-dbg-register'>v4l2_dbg_register</link>"> |
157 | <!ENTITY v4l2-dv-enum-preset "struct <link linkend='v4l2-dv-enum-preset'>v4l2_dv_enum_preset</link>"> | 159 | <!ENTITY v4l2-dv-enum-preset "struct <link linkend='v4l2-dv-enum-preset'>v4l2_dv_enum_preset</link>"> |
158 | <!ENTITY v4l2-dv-preset "struct <link linkend='v4l2-dv-preset'>v4l2_dv_preset</link>"> | 160 | <!ENTITY v4l2-dv-preset "struct <link linkend='v4l2-dv-preset'>v4l2_dv_preset</link>"> |
159 | <!ENTITY v4l2-dv-timings "struct <link linkend='v4l2-dv-timings'>v4l2_dv_timings</link>"> | 161 | <!ENTITY v4l2-dv-timings "struct <link linkend='v4l2-dv-timings'>v4l2_dv_timings</link>"> |
160 | <!ENTITY v4l2-enc-idx "struct <link linkend='v4l2-enc-idx'>v4l2_enc_idx</link>"> | 162 | <!ENTITY v4l2-enc-idx "struct <link linkend='v4l2-enc-idx'>v4l2_enc_idx</link>"> |
161 | <!ENTITY v4l2-enc-idx-entry "struct <link linkend='v4l2-enc-idx-entry'>v4l2_enc_idx_entry</link>"> | 163 | <!ENTITY v4l2-enc-idx-entry "struct <link linkend='v4l2-enc-idx-entry'>v4l2_enc_idx_entry</link>"> |
162 | <!ENTITY v4l2-encoder-cmd "struct <link linkend='v4l2-encoder-cmd'>v4l2_encoder_cmd</link>"> | 164 | <!ENTITY v4l2-encoder-cmd "struct <link linkend='v4l2-encoder-cmd'>v4l2_encoder_cmd</link>"> |
163 | <!ENTITY v4l2-event "struct <link linkend='v4l2-event'>v4l2_event</link>"> | 165 | <!ENTITY v4l2-event "struct <link linkend='v4l2-event'>v4l2_event</link>"> |
164 | <!ENTITY v4l2-event-subscription "struct <link linkend='v4l2-event-subscription'>v4l2_event_subscription</link>"> | 166 | <!ENTITY v4l2-event-subscription "struct <link linkend='v4l2-event-subscription'>v4l2_event_subscription</link>"> |
165 | <!ENTITY v4l2-event-vsync "struct <link linkend='v4l2-event-vsync'>v4l2_event_vsync</link>"> | 167 | <!ENTITY v4l2-event-vsync "struct <link linkend='v4l2-event-vsync'>v4l2_event_vsync</link>"> |
166 | <!ENTITY v4l2-ext-control "struct <link linkend='v4l2-ext-control'>v4l2_ext_control</link>"> | 168 | <!ENTITY v4l2-ext-control "struct <link linkend='v4l2-ext-control'>v4l2_ext_control</link>"> |
167 | <!ENTITY v4l2-ext-controls "struct <link linkend='v4l2-ext-controls'>v4l2_ext_controls</link>"> | 169 | <!ENTITY v4l2-ext-controls "struct <link linkend='v4l2-ext-controls'>v4l2_ext_controls</link>"> |
168 | <!ENTITY v4l2-fmtdesc "struct <link linkend='v4l2-fmtdesc'>v4l2_fmtdesc</link>"> | 170 | <!ENTITY v4l2-fmtdesc "struct <link linkend='v4l2-fmtdesc'>v4l2_fmtdesc</link>"> |
169 | <!ENTITY v4l2-format "struct <link linkend='v4l2-format'>v4l2_format</link>"> | 171 | <!ENTITY v4l2-format "struct <link linkend='v4l2-format'>v4l2_format</link>"> |
170 | <!ENTITY v4l2-fract "struct <link linkend='v4l2-fract'>v4l2_fract</link>"> | 172 | <!ENTITY v4l2-fract "struct <link linkend='v4l2-fract'>v4l2_fract</link>"> |
171 | <!ENTITY v4l2-framebuffer "struct <link linkend='v4l2-framebuffer'>v4l2_framebuffer</link>"> | 173 | <!ENTITY v4l2-framebuffer "struct <link linkend='v4l2-framebuffer'>v4l2_framebuffer</link>"> |
172 | <!ENTITY v4l2-frequency "struct <link linkend='v4l2-frequency'>v4l2_frequency</link>"> | 174 | <!ENTITY v4l2-frequency "struct <link linkend='v4l2-frequency'>v4l2_frequency</link>"> |
173 | <!ENTITY v4l2-frmival-stepwise "struct <link linkend='v4l2-frmival-stepwise'>v4l2_frmival_stepwise</link>"> | 175 | <!ENTITY v4l2-frmival-stepwise "struct <link linkend='v4l2-frmival-stepwise'>v4l2_frmival_stepwise</link>"> |
174 | <!ENTITY v4l2-frmivalenum "struct <link linkend='v4l2-frmivalenum'>v4l2_frmivalenum</link>"> | 176 | <!ENTITY v4l2-frmivalenum "struct <link linkend='v4l2-frmivalenum'>v4l2_frmivalenum</link>"> |
175 | <!ENTITY v4l2-frmsize-discrete "struct <link linkend='v4l2-frmsize-discrete'>v4l2_frmsize_discrete</link>"> | 177 | <!ENTITY v4l2-frmsize-discrete "struct <link linkend='v4l2-frmsize-discrete'>v4l2_frmsize_discrete</link>"> |
176 | <!ENTITY v4l2-frmsize-stepwise "struct <link linkend='v4l2-frmsize-stepwise'>v4l2_frmsize_stepwise</link>"> | 178 | <!ENTITY v4l2-frmsize-stepwise "struct <link linkend='v4l2-frmsize-stepwise'>v4l2_frmsize_stepwise</link>"> |
177 | <!ENTITY v4l2-frmsizeenum "struct <link linkend='v4l2-frmsizeenum'>v4l2_frmsizeenum</link>"> | 179 | <!ENTITY v4l2-frmsizeenum "struct <link linkend='v4l2-frmsizeenum'>v4l2_frmsizeenum</link>"> |
178 | <!ENTITY v4l2-hw-freq-seek "struct <link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>"> | 180 | <!ENTITY v4l2-hw-freq-seek "struct <link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>"> |
179 | <!ENTITY v4l2-input "struct <link linkend='v4l2-input'>v4l2_input</link>"> | 181 | <!ENTITY v4l2-input "struct <link linkend='v4l2-input'>v4l2_input</link>"> |
180 | <!ENTITY v4l2-jpegcompression "struct <link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>"> | 182 | <!ENTITY v4l2-jpegcompression "struct <link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>"> |
181 | <!ENTITY v4l2-mbus-framefmt "struct <link linkend='v4l2-mbus-framefmt'>v4l2_mbus_framefmt</link>"> | 183 | <!ENTITY v4l2-mbus-framefmt "struct <link linkend='v4l2-mbus-framefmt'>v4l2_mbus_framefmt</link>"> |
182 | <!ENTITY v4l2-modulator "struct <link linkend='v4l2-modulator'>v4l2_modulator</link>"> | 184 | <!ENTITY v4l2-modulator "struct <link linkend='v4l2-modulator'>v4l2_modulator</link>"> |
183 | <!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct <link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>"> | 185 | <!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct <link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>"> |
184 | <!ENTITY v4l2-output "struct <link linkend='v4l2-output'>v4l2_output</link>"> | 186 | <!ENTITY v4l2-output "struct <link linkend='v4l2-output'>v4l2_output</link>"> |
185 | <!ENTITY v4l2-outputparm "struct <link linkend='v4l2-outputparm'>v4l2_outputparm</link>"> | 187 | <!ENTITY v4l2-outputparm "struct <link linkend='v4l2-outputparm'>v4l2_outputparm</link>"> |
186 | <!ENTITY v4l2-pix-format "struct <link linkend='v4l2-pix-format'>v4l2_pix_format</link>"> | 188 | <!ENTITY v4l2-pix-format "struct <link linkend='v4l2-pix-format'>v4l2_pix_format</link>"> |
187 | <!ENTITY v4l2-pix-format-mplane "struct <link linkend='v4l2-pix-format-mplane'>v4l2_pix_format_mplane</link>"> | 189 | <!ENTITY v4l2-pix-format-mplane "struct <link linkend='v4l2-pix-format-mplane'>v4l2_pix_format_mplane</link>"> |
188 | <!ENTITY v4l2-plane-pix-format "struct <link linkend='v4l2-plane-pix-format'>v4l2_plane_pix_format</link>"> | 190 | <!ENTITY v4l2-plane-pix-format "struct <link linkend='v4l2-plane-pix-format'>v4l2_plane_pix_format</link>"> |
189 | <!ENTITY v4l2-queryctrl "struct <link linkend='v4l2-queryctrl'>v4l2_queryctrl</link>"> | 191 | <!ENTITY v4l2-queryctrl "struct <link linkend='v4l2-queryctrl'>v4l2_queryctrl</link>"> |
190 | <!ENTITY v4l2-querymenu "struct <link linkend='v4l2-querymenu'>v4l2_querymenu</link>"> | 192 | <!ENTITY v4l2-querymenu "struct <link linkend='v4l2-querymenu'>v4l2_querymenu</link>"> |
191 | <!ENTITY v4l2-rect "struct <link linkend='v4l2-rect'>v4l2_rect</link>"> | 193 | <!ENTITY v4l2-rect "struct <link linkend='v4l2-rect'>v4l2_rect</link>"> |
192 | <!ENTITY v4l2-requestbuffers "struct <link linkend='v4l2-requestbuffers'>v4l2_requestbuffers</link>"> | 194 | <!ENTITY v4l2-requestbuffers "struct <link linkend='v4l2-requestbuffers'>v4l2_requestbuffers</link>"> |
193 | <!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>"> | 195 | <!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>"> |
194 | <!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>"> | 196 | <!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>"> |
195 | <!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>"> | 197 | <!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>"> |
198 | <!ENTITY v4l2-subdev-frame-interval "struct <link linkend='v4l2-subdev-frame-interval'>v4l2_subdev_frame_interval</link>"> | ||
199 | <!ENTITY v4l2-subdev-frame-interval-enum "struct <link linkend='v4l2-subdev-frame-interval-enum'>v4l2_subdev_frame_interval_enum</link>"> | ||
196 | <!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>"> | 200 | <!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>"> |
197 | <!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>"> | 201 | <!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>"> |
198 | <!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>"> | 202 | <!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>"> |
199 | <!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>"> | 203 | <!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>"> |
200 | <!ENTITY v4l2-streamparm "struct <link linkend='v4l2-streamparm'>v4l2_streamparm</link>"> | 204 | <!ENTITY v4l2-streamparm "struct <link linkend='v4l2-streamparm'>v4l2_streamparm</link>"> |
201 | <!ENTITY v4l2-timecode "struct <link linkend='v4l2-timecode'>v4l2_timecode</link>"> | 205 | <!ENTITY v4l2-timecode "struct <link linkend='v4l2-timecode'>v4l2_timecode</link>"> |
202 | <!ENTITY v4l2-tuner "struct <link linkend='v4l2-tuner'>v4l2_tuner</link>"> | 206 | <!ENTITY v4l2-tuner "struct <link linkend='v4l2-tuner'>v4l2_tuner</link>"> |
203 | <!ENTITY v4l2-vbi-format "struct <link linkend='v4l2-vbi-format'>v4l2_vbi_format</link>"> | 207 | <!ENTITY v4l2-vbi-format "struct <link linkend='v4l2-vbi-format'>v4l2_vbi_format</link>"> |
204 | <!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>"> | 208 | <!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>"> |
205 | 209 | ||
206 | <!ENTITY media-device-info "struct <link linkend='media-device-info'>media_device_info</link>"> | 210 | <!ENTITY media-device-info "struct <link linkend='media-device-info'>media_device_info</link>"> |
207 | <!ENTITY media-entity-desc "struct <link linkend='media-entity-desc'>media_entity_desc</link>"> | 211 | <!ENTITY media-entity-desc "struct <link linkend='media-entity-desc'>media_entity_desc</link>"> |
208 | <!ENTITY media-links-enum "struct <link linkend='media-links-enum'>media_links_enum</link>"> | 212 | <!ENTITY media-links-enum "struct <link linkend='media-links-enum'>media_links_enum</link>"> |
209 | <!ENTITY media-pad-desc "struct <link linkend='media-pad-desc'>media_pad_desc</link>"> | 213 | <!ENTITY media-pad-desc "struct <link linkend='media-pad-desc'>media_pad_desc</link>"> |
210 | <!ENTITY media-link-desc "struct <link linkend='media-link-desc'>media_link_desc</link>"> | 214 | <!ENTITY media-link-desc "struct <link linkend='media-link-desc'>media_link_desc</link>"> |
211 | 215 | ||
212 | <!-- Error Codes --> | 216 | <!-- Error Codes --> |
213 | <!ENTITY EACCES "<errorcode>EACCES</errorcode> error code"> | 217 | <!ENTITY EACCES "<errorcode>EACCES</errorcode> error code"> |
214 | <!ENTITY EAGAIN "<errorcode>EAGAIN</errorcode> error code"> | 218 | <!ENTITY EAGAIN "<errorcode>EAGAIN</errorcode> error code"> |
215 | <!ENTITY EBADF "<errorcode>EBADF</errorcode> error code"> | 219 | <!ENTITY EBADF "<errorcode>EBADF</errorcode> error code"> |
216 | <!ENTITY EBUSY "<errorcode>EBUSY</errorcode> error code"> | 220 | <!ENTITY EBUSY "<errorcode>EBUSY</errorcode> error code"> |
217 | <!ENTITY EFAULT "<errorcode>EFAULT</errorcode> error code"> | 221 | <!ENTITY EFAULT "<errorcode>EFAULT</errorcode> error code"> |
218 | <!ENTITY EIO "<errorcode>EIO</errorcode> error code"> | 222 | <!ENTITY EIO "<errorcode>EIO</errorcode> error code"> |
219 | <!ENTITY EINTR "<errorcode>EINTR</errorcode> error code"> | 223 | <!ENTITY EINTR "<errorcode>EINTR</errorcode> error code"> |
220 | <!ENTITY EINVAL "<errorcode>EINVAL</errorcode> error code"> | 224 | <!ENTITY EINVAL "<errorcode>EINVAL</errorcode> error code"> |
221 | <!ENTITY ENFILE "<errorcode>ENFILE</errorcode> error code"> | 225 | <!ENTITY ENFILE "<errorcode>ENFILE</errorcode> error code"> |
222 | <!ENTITY ENOMEM "<errorcode>ENOMEM</errorcode> error code"> | 226 | <!ENTITY ENOMEM "<errorcode>ENOMEM</errorcode> error code"> |
223 | <!ENTITY ENOSPC "<errorcode>ENOSPC</errorcode> error code"> | 227 | <!ENTITY ENOSPC "<errorcode>ENOSPC</errorcode> error code"> |
224 | <!ENTITY ENOTTY "<errorcode>ENOTTY</errorcode> error code"> | 228 | <!ENTITY ENOTTY "<errorcode>ENOTTY</errorcode> error code"> |
225 | <!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code"> | 229 | <!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code"> |
226 | <!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code"> | 230 | <!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code"> |
227 | <!ENTITY EPERM "<errorcode>EPERM</errorcode> error code"> | 231 | <!ENTITY EPERM "<errorcode>EPERM</errorcode> error code"> |
228 | <!ENTITY EPIPE "<errorcode>EPIPE</errorcode> error code"> | 232 | <!ENTITY EPIPE "<errorcode>EPIPE</errorcode> error code"> |
229 | <!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code"> | 233 | <!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code"> |
230 | 234 | ||
231 | <!-- Subsections --> | 235 | <!-- Subsections --> |
232 | <!ENTITY sub-biblio SYSTEM "v4l/biblio.xml"> | 236 | <!ENTITY sub-biblio SYSTEM "v4l/biblio.xml"> |
233 | <!ENTITY sub-common SYSTEM "v4l/common.xml"> | 237 | <!ENTITY sub-common SYSTEM "v4l/common.xml"> |
234 | <!ENTITY sub-planar-apis SYSTEM "v4l/planar-apis.xml"> | 238 | <!ENTITY sub-planar-apis SYSTEM "v4l/planar-apis.xml"> |
235 | <!ENTITY sub-compat SYSTEM "v4l/compat.xml"> | 239 | <!ENTITY sub-compat SYSTEM "v4l/compat.xml"> |
236 | <!ENTITY sub-controls SYSTEM "v4l/controls.xml"> | 240 | <!ENTITY sub-controls SYSTEM "v4l/controls.xml"> |
237 | <!ENTITY sub-dev-capture SYSTEM "v4l/dev-capture.xml"> | 241 | <!ENTITY sub-dev-capture SYSTEM "v4l/dev-capture.xml"> |
238 | <!ENTITY sub-dev-codec SYSTEM "v4l/dev-codec.xml"> | 242 | <!ENTITY sub-dev-codec SYSTEM "v4l/dev-codec.xml"> |
239 | <!ENTITY sub-dev-event SYSTEM "v4l/dev-event.xml"> | 243 | <!ENTITY sub-dev-event SYSTEM "v4l/dev-event.xml"> |
240 | <!ENTITY sub-dev-effect SYSTEM "v4l/dev-effect.xml"> | 244 | <!ENTITY sub-dev-effect SYSTEM "v4l/dev-effect.xml"> |
241 | <!ENTITY sub-dev-osd SYSTEM "v4l/dev-osd.xml"> | 245 | <!ENTITY sub-dev-osd SYSTEM "v4l/dev-osd.xml"> |
242 | <!ENTITY sub-dev-output SYSTEM "v4l/dev-output.xml"> | 246 | <!ENTITY sub-dev-output SYSTEM "v4l/dev-output.xml"> |
243 | <!ENTITY sub-dev-overlay SYSTEM "v4l/dev-overlay.xml"> | 247 | <!ENTITY sub-dev-overlay SYSTEM "v4l/dev-overlay.xml"> |
244 | <!ENTITY sub-dev-radio SYSTEM "v4l/dev-radio.xml"> | 248 | <!ENTITY sub-dev-radio SYSTEM "v4l/dev-radio.xml"> |
245 | <!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml"> | 249 | <!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml"> |
246 | <!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml"> | 250 | <!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml"> |
247 | <!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml"> | 251 | <!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml"> |
248 | <!ENTITY sub-dev-subdev SYSTEM "v4l/dev-subdev.xml"> | 252 | <!ENTITY sub-dev-subdev SYSTEM "v4l/dev-subdev.xml"> |
249 | <!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml"> | 253 | <!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml"> |
250 | <!ENTITY sub-driver SYSTEM "v4l/driver.xml"> | 254 | <!ENTITY sub-driver SYSTEM "v4l/driver.xml"> |
251 | <!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml"> | 255 | <!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml"> |
252 | <!ENTITY sub-lirc_device_interface SYSTEM "v4l/lirc_device_interface.xml"> | 256 | <!ENTITY sub-lirc_device_interface SYSTEM "v4l/lirc_device_interface.xml"> |
253 | <!ENTITY sub-remote_controllers SYSTEM "v4l/remote_controllers.xml"> | 257 | <!ENTITY sub-remote_controllers SYSTEM "v4l/remote_controllers.xml"> |
254 | <!ENTITY sub-fdl-appendix SYSTEM "v4l/fdl-appendix.xml"> | 258 | <!ENTITY sub-fdl-appendix SYSTEM "v4l/fdl-appendix.xml"> |
255 | <!ENTITY sub-close SYSTEM "v4l/func-close.xml"> | 259 | <!ENTITY sub-close SYSTEM "v4l/func-close.xml"> |
256 | <!ENTITY sub-ioctl SYSTEM "v4l/func-ioctl.xml"> | 260 | <!ENTITY sub-ioctl SYSTEM "v4l/func-ioctl.xml"> |
257 | <!ENTITY sub-mmap SYSTEM "v4l/func-mmap.xml"> | 261 | <!ENTITY sub-mmap SYSTEM "v4l/func-mmap.xml"> |
258 | <!ENTITY sub-munmap SYSTEM "v4l/func-munmap.xml"> | 262 | <!ENTITY sub-munmap SYSTEM "v4l/func-munmap.xml"> |
259 | <!ENTITY sub-open SYSTEM "v4l/func-open.xml"> | 263 | <!ENTITY sub-open SYSTEM "v4l/func-open.xml"> |
260 | <!ENTITY sub-poll SYSTEM "v4l/func-poll.xml"> | 264 | <!ENTITY sub-poll SYSTEM "v4l/func-poll.xml"> |
261 | <!ENTITY sub-read SYSTEM "v4l/func-read.xml"> | 265 | <!ENTITY sub-read SYSTEM "v4l/func-read.xml"> |
262 | <!ENTITY sub-select SYSTEM "v4l/func-select.xml"> | 266 | <!ENTITY sub-select SYSTEM "v4l/func-select.xml"> |
263 | <!ENTITY sub-write SYSTEM "v4l/func-write.xml"> | 267 | <!ENTITY sub-write SYSTEM "v4l/func-write.xml"> |
264 | <!ENTITY sub-io SYSTEM "v4l/io.xml"> | 268 | <!ENTITY sub-io SYSTEM "v4l/io.xml"> |
265 | <!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml"> | 269 | <!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml"> |
266 | <!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml"> | 270 | <!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml"> |
267 | <!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml"> | 271 | <!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml"> |
268 | <!ENTITY sub-nv16 SYSTEM "v4l/pixfmt-nv16.xml"> | 272 | <!ENTITY sub-nv16 SYSTEM "v4l/pixfmt-nv16.xml"> |
269 | <!ENTITY sub-packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml"> | 273 | <!ENTITY sub-packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml"> |
270 | <!ENTITY sub-packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml"> | 274 | <!ENTITY sub-packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml"> |
271 | <!ENTITY sub-sbggr16 SYSTEM "v4l/pixfmt-sbggr16.xml"> | 275 | <!ENTITY sub-sbggr16 SYSTEM "v4l/pixfmt-sbggr16.xml"> |
272 | <!ENTITY sub-sbggr8 SYSTEM "v4l/pixfmt-sbggr8.xml"> | 276 | <!ENTITY sub-sbggr8 SYSTEM "v4l/pixfmt-sbggr8.xml"> |
273 | <!ENTITY sub-sgbrg8 SYSTEM "v4l/pixfmt-sgbrg8.xml"> | 277 | <!ENTITY sub-sgbrg8 SYSTEM "v4l/pixfmt-sgbrg8.xml"> |
274 | <!ENTITY sub-sgrbg8 SYSTEM "v4l/pixfmt-sgrbg8.xml"> | 278 | <!ENTITY sub-sgrbg8 SYSTEM "v4l/pixfmt-sgrbg8.xml"> |
275 | <!ENTITY sub-uyvy SYSTEM "v4l/pixfmt-uyvy.xml"> | 279 | <!ENTITY sub-uyvy SYSTEM "v4l/pixfmt-uyvy.xml"> |
276 | <!ENTITY sub-vyuy SYSTEM "v4l/pixfmt-vyuy.xml"> | 280 | <!ENTITY sub-vyuy SYSTEM "v4l/pixfmt-vyuy.xml"> |
277 | <!ENTITY sub-y16 SYSTEM "v4l/pixfmt-y16.xml"> | 281 | <!ENTITY sub-y16 SYSTEM "v4l/pixfmt-y16.xml"> |
278 | <!ENTITY sub-y41p SYSTEM "v4l/pixfmt-y41p.xml"> | 282 | <!ENTITY sub-y41p SYSTEM "v4l/pixfmt-y41p.xml"> |
279 | <!ENTITY sub-yuv410 SYSTEM "v4l/pixfmt-yuv410.xml"> | 283 | <!ENTITY sub-yuv410 SYSTEM "v4l/pixfmt-yuv410.xml"> |
280 | <!ENTITY sub-yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml"> | 284 | <!ENTITY sub-yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml"> |
281 | <!ENTITY sub-yuv420 SYSTEM "v4l/pixfmt-yuv420.xml"> | 285 | <!ENTITY sub-yuv420 SYSTEM "v4l/pixfmt-yuv420.xml"> |
282 | <!ENTITY sub-yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml"> | 286 | <!ENTITY sub-yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml"> |
283 | <!ENTITY sub-yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml"> | 287 | <!ENTITY sub-yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml"> |
284 | <!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml"> | 288 | <!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml"> |
285 | <!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml"> | 289 | <!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml"> |
286 | <!ENTITY sub-srggb10 SYSTEM "v4l/pixfmt-srggb10.xml"> | 290 | <!ENTITY sub-srggb10 SYSTEM "v4l/pixfmt-srggb10.xml"> |
287 | <!ENTITY sub-srggb8 SYSTEM "v4l/pixfmt-srggb8.xml"> | 291 | <!ENTITY sub-srggb8 SYSTEM "v4l/pixfmt-srggb8.xml"> |
288 | <!ENTITY sub-y10 SYSTEM "v4l/pixfmt-y10.xml"> | 292 | <!ENTITY sub-y10 SYSTEM "v4l/pixfmt-y10.xml"> |
289 | <!ENTITY sub-pixfmt SYSTEM "v4l/pixfmt.xml"> | 293 | <!ENTITY sub-pixfmt SYSTEM "v4l/pixfmt.xml"> |
290 | <!ENTITY sub-cropcap SYSTEM "v4l/vidioc-cropcap.xml"> | 294 | <!ENTITY sub-cropcap SYSTEM "v4l/vidioc-cropcap.xml"> |
291 | <!ENTITY sub-dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml"> | 295 | <!ENTITY sub-dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml"> |
292 | <!ENTITY sub-encoder-cmd SYSTEM "v4l/vidioc-encoder-cmd.xml"> | 296 | <!ENTITY sub-encoder-cmd SYSTEM "v4l/vidioc-encoder-cmd.xml"> |
293 | <!ENTITY sub-enum-fmt SYSTEM "v4l/vidioc-enum-fmt.xml"> | 297 | <!ENTITY sub-enum-fmt SYSTEM "v4l/vidioc-enum-fmt.xml"> |
294 | <!ENTITY sub-enum-frameintervals SYSTEM "v4l/vidioc-enum-frameintervals.xml"> | 298 | <!ENTITY sub-enum-frameintervals SYSTEM "v4l/vidioc-enum-frameintervals.xml"> |
295 | <!ENTITY sub-enum-framesizes SYSTEM "v4l/vidioc-enum-framesizes.xml"> | 299 | <!ENTITY sub-enum-framesizes SYSTEM "v4l/vidioc-enum-framesizes.xml"> |
296 | <!ENTITY sub-enumaudio SYSTEM "v4l/vidioc-enumaudio.xml"> | 300 | <!ENTITY sub-enumaudio SYSTEM "v4l/vidioc-enumaudio.xml"> |
297 | <!ENTITY sub-enumaudioout SYSTEM "v4l/vidioc-enumaudioout.xml"> | 301 | <!ENTITY sub-enumaudioout SYSTEM "v4l/vidioc-enumaudioout.xml"> |
298 | <!ENTITY sub-enuminput SYSTEM "v4l/vidioc-enuminput.xml"> | 302 | <!ENTITY sub-enuminput SYSTEM "v4l/vidioc-enuminput.xml"> |
299 | <!ENTITY sub-enumoutput SYSTEM "v4l/vidioc-enumoutput.xml"> | 303 | <!ENTITY sub-enumoutput SYSTEM "v4l/vidioc-enumoutput.xml"> |
300 | <!ENTITY sub-enum-dv-presets SYSTEM "v4l/vidioc-enum-dv-presets.xml"> | 304 | <!ENTITY sub-enum-dv-presets SYSTEM "v4l/vidioc-enum-dv-presets.xml"> |
301 | <!ENTITY sub-g-dv-preset SYSTEM "v4l/vidioc-g-dv-preset.xml"> | 305 | <!ENTITY sub-g-dv-preset SYSTEM "v4l/vidioc-g-dv-preset.xml"> |
302 | <!ENTITY sub-query-dv-preset SYSTEM "v4l/vidioc-query-dv-preset.xml"> | 306 | <!ENTITY sub-query-dv-preset SYSTEM "v4l/vidioc-query-dv-preset.xml"> |
303 | <!ENTITY sub-g-dv-timings SYSTEM "v4l/vidioc-g-dv-timings.xml"> | 307 | <!ENTITY sub-g-dv-timings SYSTEM "v4l/vidioc-g-dv-timings.xml"> |
304 | <!ENTITY sub-enumstd SYSTEM "v4l/vidioc-enumstd.xml"> | 308 | <!ENTITY sub-enumstd SYSTEM "v4l/vidioc-enumstd.xml"> |
305 | <!ENTITY sub-g-audio SYSTEM "v4l/vidioc-g-audio.xml"> | 309 | <!ENTITY sub-g-audio SYSTEM "v4l/vidioc-g-audio.xml"> |
306 | <!ENTITY sub-g-audioout SYSTEM "v4l/vidioc-g-audioout.xml"> | 310 | <!ENTITY sub-g-audioout SYSTEM "v4l/vidioc-g-audioout.xml"> |
307 | <!ENTITY sub-dbg-g-chip-ident SYSTEM "v4l/vidioc-dbg-g-chip-ident.xml"> | 311 | <!ENTITY sub-dbg-g-chip-ident SYSTEM "v4l/vidioc-dbg-g-chip-ident.xml"> |
308 | <!ENTITY sub-g-crop SYSTEM "v4l/vidioc-g-crop.xml"> | 312 | <!ENTITY sub-g-crop SYSTEM "v4l/vidioc-g-crop.xml"> |
309 | <!ENTITY sub-g-ctrl SYSTEM "v4l/vidioc-g-ctrl.xml"> | 313 | <!ENTITY sub-g-ctrl SYSTEM "v4l/vidioc-g-ctrl.xml"> |
310 | <!ENTITY sub-g-enc-index SYSTEM "v4l/vidioc-g-enc-index.xml"> | 314 | <!ENTITY sub-g-enc-index SYSTEM "v4l/vidioc-g-enc-index.xml"> |
311 | <!ENTITY sub-g-ext-ctrls SYSTEM "v4l/vidioc-g-ext-ctrls.xml"> | 315 | <!ENTITY sub-g-ext-ctrls SYSTEM "v4l/vidioc-g-ext-ctrls.xml"> |
312 | <!ENTITY sub-g-fbuf SYSTEM "v4l/vidioc-g-fbuf.xml"> | 316 | <!ENTITY sub-g-fbuf SYSTEM "v4l/vidioc-g-fbuf.xml"> |
313 | <!ENTITY sub-g-fmt SYSTEM "v4l/vidioc-g-fmt.xml"> | 317 | <!ENTITY sub-g-fmt SYSTEM "v4l/vidioc-g-fmt.xml"> |
314 | <!ENTITY sub-g-frequency SYSTEM "v4l/vidioc-g-frequency.xml"> | 318 | <!ENTITY sub-g-frequency SYSTEM "v4l/vidioc-g-frequency.xml"> |
315 | <!ENTITY sub-g-input SYSTEM "v4l/vidioc-g-input.xml"> | 319 | <!ENTITY sub-g-input SYSTEM "v4l/vidioc-g-input.xml"> |
316 | <!ENTITY sub-g-jpegcomp SYSTEM "v4l/vidioc-g-jpegcomp.xml"> | 320 | <!ENTITY sub-g-jpegcomp SYSTEM "v4l/vidioc-g-jpegcomp.xml"> |
317 | <!ENTITY sub-g-modulator SYSTEM "v4l/vidioc-g-modulator.xml"> | 321 | <!ENTITY sub-g-modulator SYSTEM "v4l/vidioc-g-modulator.xml"> |
318 | <!ENTITY sub-g-output SYSTEM "v4l/vidioc-g-output.xml"> | 322 | <!ENTITY sub-g-output SYSTEM "v4l/vidioc-g-output.xml"> |
319 | <!ENTITY sub-g-parm SYSTEM "v4l/vidioc-g-parm.xml"> | 323 | <!ENTITY sub-g-parm SYSTEM "v4l/vidioc-g-parm.xml"> |
320 | <!ENTITY sub-g-priority SYSTEM "v4l/vidioc-g-priority.xml"> | 324 | <!ENTITY sub-g-priority SYSTEM "v4l/vidioc-g-priority.xml"> |
321 | <!ENTITY sub-g-sliced-vbi-cap SYSTEM "v4l/vidioc-g-sliced-vbi-cap.xml"> | 325 | <!ENTITY sub-g-sliced-vbi-cap SYSTEM "v4l/vidioc-g-sliced-vbi-cap.xml"> |
322 | <!ENTITY sub-g-std SYSTEM "v4l/vidioc-g-std.xml"> | 326 | <!ENTITY sub-g-std SYSTEM "v4l/vidioc-g-std.xml"> |
323 | <!ENTITY sub-g-tuner SYSTEM "v4l/vidioc-g-tuner.xml"> | 327 | <!ENTITY sub-g-tuner SYSTEM "v4l/vidioc-g-tuner.xml"> |
324 | <!ENTITY sub-log-status SYSTEM "v4l/vidioc-log-status.xml"> | 328 | <!ENTITY sub-log-status SYSTEM "v4l/vidioc-log-status.xml"> |
325 | <!ENTITY sub-overlay SYSTEM "v4l/vidioc-overlay.xml"> | 329 | <!ENTITY sub-overlay SYSTEM "v4l/vidioc-overlay.xml"> |
326 | <!ENTITY sub-qbuf SYSTEM "v4l/vidioc-qbuf.xml"> | 330 | <!ENTITY sub-qbuf SYSTEM "v4l/vidioc-qbuf.xml"> |
327 | <!ENTITY sub-querybuf SYSTEM "v4l/vidioc-querybuf.xml"> | 331 | <!ENTITY sub-querybuf SYSTEM "v4l/vidioc-querybuf.xml"> |
328 | <!ENTITY sub-querycap SYSTEM "v4l/vidioc-querycap.xml"> | 332 | <!ENTITY sub-querycap SYSTEM "v4l/vidioc-querycap.xml"> |
329 | <!ENTITY sub-queryctrl SYSTEM "v4l/vidioc-queryctrl.xml"> | 333 | <!ENTITY sub-queryctrl SYSTEM "v4l/vidioc-queryctrl.xml"> |
330 | <!ENTITY sub-querystd SYSTEM "v4l/vidioc-querystd.xml"> | 334 | <!ENTITY sub-querystd SYSTEM "v4l/vidioc-querystd.xml"> |
331 | <!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml"> | 335 | <!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml"> |
332 | <!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml"> | 336 | <!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml"> |
333 | <!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml"> | 337 | <!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml"> |
338 | <!ENTITY sub-subdev-enum-frame-interval SYSTEM "v4l/vidioc-subdev-enum-frame-interval.xml"> | ||
334 | <!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml"> | 339 | <!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml"> |
335 | <!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml"> | 340 | <!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml"> |
336 | <!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml"> | 341 | <!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml"> |
337 | <!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml"> | 342 | <!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml"> |
343 | <!ENTITY sub-subdev-g-frame-interval SYSTEM "v4l/vidioc-subdev-g-frame-interval.xml"> | ||
338 | <!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml"> | 344 | <!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml"> |
339 | <!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml"> | 345 | <!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml"> |
340 | <!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml"> | 346 | <!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml"> |
341 | <!ENTITY sub-videodev2-h SYSTEM "v4l/videodev2.h.xml"> | 347 | <!ENTITY sub-videodev2-h SYSTEM "v4l/videodev2.h.xml"> |
342 | <!ENTITY sub-v4l2 SYSTEM "v4l/v4l2.xml"> | 348 | <!ENTITY sub-v4l2 SYSTEM "v4l/v4l2.xml"> |
343 | <!ENTITY sub-dqevent SYSTEM "v4l/vidioc-dqevent.xml"> | 349 | <!ENTITY sub-dqevent SYSTEM "v4l/vidioc-dqevent.xml"> |
344 | <!ENTITY sub-subscribe-event SYSTEM "v4l/vidioc-subscribe-event.xml"> | 350 | <!ENTITY sub-subscribe-event SYSTEM "v4l/vidioc-subscribe-event.xml"> |
345 | <!ENTITY sub-intro SYSTEM "dvb/intro.xml"> | 351 | <!ENTITY sub-intro SYSTEM "dvb/intro.xml"> |
346 | <!ENTITY sub-frontend SYSTEM "dvb/frontend.xml"> | 352 | <!ENTITY sub-frontend SYSTEM "dvb/frontend.xml"> |
347 | <!ENTITY sub-dvbproperty SYSTEM "dvb/dvbproperty.xml"> | 353 | <!ENTITY sub-dvbproperty SYSTEM "dvb/dvbproperty.xml"> |
348 | <!ENTITY sub-demux SYSTEM "dvb/demux.xml"> | 354 | <!ENTITY sub-demux SYSTEM "dvb/demux.xml"> |
349 | <!ENTITY sub-video SYSTEM "dvb/video.xml"> | 355 | <!ENTITY sub-video SYSTEM "dvb/video.xml"> |
350 | <!ENTITY sub-audio SYSTEM "dvb/audio.xml"> | 356 | <!ENTITY sub-audio SYSTEM "dvb/audio.xml"> |
351 | <!ENTITY sub-ca SYSTEM "dvb/ca.xml"> | 357 | <!ENTITY sub-ca SYSTEM "dvb/ca.xml"> |
352 | <!ENTITY sub-net SYSTEM "dvb/net.xml"> | 358 | <!ENTITY sub-net SYSTEM "dvb/net.xml"> |
353 | <!ENTITY sub-kdapi SYSTEM "dvb/kdapi.xml"> | 359 | <!ENTITY sub-kdapi SYSTEM "dvb/kdapi.xml"> |
354 | <!ENTITY sub-examples SYSTEM "dvb/examples.xml"> | 360 | <!ENTITY sub-examples SYSTEM "dvb/examples.xml"> |
355 | <!ENTITY sub-frontend-h SYSTEM "dvb/frontend.h.xml"> | 361 | <!ENTITY sub-frontend-h SYSTEM "dvb/frontend.h.xml"> |
356 | <!ENTITY sub-dvbapi SYSTEM "dvb/dvbapi.xml"> | 362 | <!ENTITY sub-dvbapi SYSTEM "dvb/dvbapi.xml"> |
357 | <!ENTITY sub-media SYSTEM "media.xml"> | 363 | <!ENTITY sub-media SYSTEM "media.xml"> |
358 | <!ENTITY sub-media-entities SYSTEM "media-entities.tmpl"> | 364 | <!ENTITY sub-media-entities SYSTEM "media-entities.tmpl"> |
359 | <!ENTITY sub-media-indices SYSTEM "media-indices.tmpl"> | 365 | <!ENTITY sub-media-indices SYSTEM "media-indices.tmpl"> |
360 | 366 | ||
361 | <!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml"> | 367 | <!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml"> |
362 | <!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml"> | 368 | <!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml"> |
363 | <!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml"> | 369 | <!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml"> |
364 | <!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml"> | 370 | <!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml"> |
365 | <!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml"> | 371 | <!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml"> |
366 | <!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml"> | 372 | <!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml"> |
367 | <!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml"> | 373 | <!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml"> |
368 | <!ENTITY sub-media-ioc-setup-link SYSTEM "v4l/media-ioc-setup-link.xml"> | 374 | <!ENTITY sub-media-ioc-setup-link SYSTEM "v4l/media-ioc-setup-link.xml"> |
369 | 375 | ||
370 | <!-- Function Reference --> | 376 | <!-- Function Reference --> |
371 | <!ENTITY close SYSTEM "v4l/func-close.xml"> | 377 | <!ENTITY close SYSTEM "v4l/func-close.xml"> |
372 | <!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml"> | 378 | <!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml"> |
373 | <!ENTITY mmap SYSTEM "v4l/func-mmap.xml"> | 379 | <!ENTITY mmap SYSTEM "v4l/func-mmap.xml"> |
374 | <!ENTITY munmap SYSTEM "v4l/func-munmap.xml"> | 380 | <!ENTITY munmap SYSTEM "v4l/func-munmap.xml"> |
375 | <!ENTITY open SYSTEM "v4l/func-open.xml"> | 381 | <!ENTITY open SYSTEM "v4l/func-open.xml"> |
376 | <!ENTITY poll SYSTEM "v4l/func-poll.xml"> | 382 | <!ENTITY poll SYSTEM "v4l/func-poll.xml"> |
377 | <!ENTITY read SYSTEM "v4l/func-read.xml"> | 383 | <!ENTITY read SYSTEM "v4l/func-read.xml"> |
378 | <!ENTITY select SYSTEM "v4l/func-select.xml"> | 384 | <!ENTITY select SYSTEM "v4l/func-select.xml"> |
379 | <!ENTITY write SYSTEM "v4l/func-write.xml"> | 385 | <!ENTITY write SYSTEM "v4l/func-write.xml"> |
380 | <!ENTITY grey SYSTEM "v4l/pixfmt-grey.xml"> | 386 | <!ENTITY grey SYSTEM "v4l/pixfmt-grey.xml"> |
381 | <!ENTITY nv12 SYSTEM "v4l/pixfmt-nv12.xml"> | 387 | <!ENTITY nv12 SYSTEM "v4l/pixfmt-nv12.xml"> |
382 | <!ENTITY nv12m SYSTEM "v4l/pixfmt-nv12m.xml"> | 388 | <!ENTITY nv12m SYSTEM "v4l/pixfmt-nv12m.xml"> |
383 | <!ENTITY nv16 SYSTEM "v4l/pixfmt-nv16.xml"> | 389 | <!ENTITY nv16 SYSTEM "v4l/pixfmt-nv16.xml"> |
384 | <!ENTITY packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml"> | 390 | <!ENTITY packed-rgb SYSTEM "v4l/pixfmt-packed-rgb.xml"> |
385 | <!ENTITY packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml"> | 391 | <!ENTITY packed-yuv SYSTEM "v4l/pixfmt-packed-yuv.xml"> |
386 | <!ENTITY sbggr16 SYSTEM "v4l/pixfmt-sbggr16.xml"> | 392 | <!ENTITY sbggr16 SYSTEM "v4l/pixfmt-sbggr16.xml"> |
387 | <!ENTITY sbggr8 SYSTEM "v4l/pixfmt-sbggr8.xml"> | 393 | <!ENTITY sbggr8 SYSTEM "v4l/pixfmt-sbggr8.xml"> |
388 | <!ENTITY sgbrg8 SYSTEM "v4l/pixfmt-sgbrg8.xml"> | 394 | <!ENTITY sgbrg8 SYSTEM "v4l/pixfmt-sgbrg8.xml"> |
389 | <!ENTITY sgrbg8 SYSTEM "v4l/pixfmt-sgrbg8.xml"> | 395 | <!ENTITY sgrbg8 SYSTEM "v4l/pixfmt-sgrbg8.xml"> |
390 | <!ENTITY uyvy SYSTEM "v4l/pixfmt-uyvy.xml"> | 396 | <!ENTITY uyvy SYSTEM "v4l/pixfmt-uyvy.xml"> |
391 | <!ENTITY vyuy SYSTEM "v4l/pixfmt-vyuy.xml"> | 397 | <!ENTITY vyuy SYSTEM "v4l/pixfmt-vyuy.xml"> |
392 | <!ENTITY y16 SYSTEM "v4l/pixfmt-y16.xml"> | 398 | <!ENTITY y16 SYSTEM "v4l/pixfmt-y16.xml"> |
393 | <!ENTITY y41p SYSTEM "v4l/pixfmt-y41p.xml"> | 399 | <!ENTITY y41p SYSTEM "v4l/pixfmt-y41p.xml"> |
394 | <!ENTITY yuv410 SYSTEM "v4l/pixfmt-yuv410.xml"> | 400 | <!ENTITY yuv410 SYSTEM "v4l/pixfmt-yuv410.xml"> |
395 | <!ENTITY yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml"> | 401 | <!ENTITY yuv411p SYSTEM "v4l/pixfmt-yuv411p.xml"> |
396 | <!ENTITY yuv420 SYSTEM "v4l/pixfmt-yuv420.xml"> | 402 | <!ENTITY yuv420 SYSTEM "v4l/pixfmt-yuv420.xml"> |
397 | <!ENTITY yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml"> | 403 | <!ENTITY yuv420m SYSTEM "v4l/pixfmt-yuv420m.xml"> |
398 | <!ENTITY yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml"> | 404 | <!ENTITY yuv422p SYSTEM "v4l/pixfmt-yuv422p.xml"> |
399 | <!ENTITY yuyv SYSTEM "v4l/pixfmt-yuyv.xml"> | 405 | <!ENTITY yuyv SYSTEM "v4l/pixfmt-yuyv.xml"> |
400 | <!ENTITY yvyu SYSTEM "v4l/pixfmt-yvyu.xml"> | 406 | <!ENTITY yvyu SYSTEM "v4l/pixfmt-yvyu.xml"> |
401 | <!ENTITY srggb10 SYSTEM "v4l/pixfmt-srggb10.xml"> | 407 | <!ENTITY srggb10 SYSTEM "v4l/pixfmt-srggb10.xml"> |
402 | <!ENTITY srggb8 SYSTEM "v4l/pixfmt-srggb8.xml"> | 408 | <!ENTITY srggb8 SYSTEM "v4l/pixfmt-srggb8.xml"> |
403 | <!ENTITY y10 SYSTEM "v4l/pixfmt-y10.xml"> | 409 | <!ENTITY y10 SYSTEM "v4l/pixfmt-y10.xml"> |
404 | <!ENTITY cropcap SYSTEM "v4l/vidioc-cropcap.xml"> | 410 | <!ENTITY cropcap SYSTEM "v4l/vidioc-cropcap.xml"> |
405 | <!ENTITY dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml"> | 411 | <!ENTITY dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml"> |
406 | <!ENTITY encoder-cmd SYSTEM "v4l/vidioc-encoder-cmd.xml"> | 412 | <!ENTITY encoder-cmd SYSTEM "v4l/vidioc-encoder-cmd.xml"> |
407 | <!ENTITY enum-fmt SYSTEM "v4l/vidioc-enum-fmt.xml"> | 413 | <!ENTITY enum-fmt SYSTEM "v4l/vidioc-enum-fmt.xml"> |
408 | <!ENTITY enum-frameintervals SYSTEM "v4l/vidioc-enum-frameintervals.xml"> | 414 | <!ENTITY enum-frameintervals SYSTEM "v4l/vidioc-enum-frameintervals.xml"> |
409 | <!ENTITY enum-framesizes SYSTEM "v4l/vidioc-enum-framesizes.xml"> | 415 | <!ENTITY enum-framesizes SYSTEM "v4l/vidioc-enum-framesizes.xml"> |
410 | <!ENTITY enumaudio SYSTEM "v4l/vidioc-enumaudio.xml"> | 416 | <!ENTITY enumaudio SYSTEM "v4l/vidioc-enumaudio.xml"> |
411 | <!ENTITY enumaudioout SYSTEM "v4l/vidioc-enumaudioout.xml"> | 417 | <!ENTITY enumaudioout SYSTEM "v4l/vidioc-enumaudioout.xml"> |
412 | <!ENTITY enuminput SYSTEM "v4l/vidioc-enuminput.xml"> | 418 | <!ENTITY enuminput SYSTEM "v4l/vidioc-enuminput.xml"> |
413 | <!ENTITY enumoutput SYSTEM "v4l/vidioc-enumoutput.xml"> | 419 | <!ENTITY enumoutput SYSTEM "v4l/vidioc-enumoutput.xml"> |
414 | <!ENTITY enum-dv-presets SYSTEM "v4l/vidioc-enum-dv-presets.xml"> | 420 | <!ENTITY enum-dv-presets SYSTEM "v4l/vidioc-enum-dv-presets.xml"> |
415 | <!ENTITY g-dv-preset SYSTEM "v4l/vidioc-g-dv-preset.xml"> | 421 | <!ENTITY g-dv-preset SYSTEM "v4l/vidioc-g-dv-preset.xml"> |
416 | <!ENTITY query-dv-preset SYSTEM "v4l/vidioc-query-dv-preset.xml"> | 422 | <!ENTITY query-dv-preset SYSTEM "v4l/vidioc-query-dv-preset.xml"> |
417 | <!ENTITY g-dv-timings SYSTEM "v4l/vidioc-g-dv-timings.xml"> | 423 | <!ENTITY g-dv-timings SYSTEM "v4l/vidioc-g-dv-timings.xml"> |
418 | <!ENTITY enumstd SYSTEM "v4l/vidioc-enumstd.xml"> | 424 | <!ENTITY enumstd SYSTEM "v4l/vidioc-enumstd.xml"> |
419 | <!ENTITY g-audio SYSTEM "v4l/vidioc-g-audio.xml"> | 425 | <!ENTITY g-audio SYSTEM "v4l/vidioc-g-audio.xml"> |
420 | <!ENTITY g-audioout SYSTEM "v4l/vidioc-g-audioout.xml"> | 426 | <!ENTITY g-audioout SYSTEM "v4l/vidioc-g-audioout.xml"> |
421 | <!ENTITY dbg-g-chip-ident SYSTEM "v4l/vidioc-dbg-g-chip-ident.xml"> | 427 | <!ENTITY dbg-g-chip-ident SYSTEM "v4l/vidioc-dbg-g-chip-ident.xml"> |
422 | <!ENTITY g-crop SYSTEM "v4l/vidioc-g-crop.xml"> | 428 | <!ENTITY g-crop SYSTEM "v4l/vidioc-g-crop.xml"> |
423 | <!ENTITY g-ctrl SYSTEM "v4l/vidioc-g-ctrl.xml"> | 429 | <!ENTITY g-ctrl SYSTEM "v4l/vidioc-g-ctrl.xml"> |
424 | <!ENTITY g-enc-index SYSTEM "v4l/vidioc-g-enc-index.xml"> | 430 | <!ENTITY g-enc-index SYSTEM "v4l/vidioc-g-enc-index.xml"> |
425 | <!ENTITY g-ext-ctrls SYSTEM "v4l/vidioc-g-ext-ctrls.xml"> | 431 | <!ENTITY g-ext-ctrls SYSTEM "v4l/vidioc-g-ext-ctrls.xml"> |
426 | <!ENTITY g-fbuf SYSTEM "v4l/vidioc-g-fbuf.xml"> | 432 | <!ENTITY g-fbuf SYSTEM "v4l/vidioc-g-fbuf.xml"> |
427 | <!ENTITY g-fmt SYSTEM "v4l/vidioc-g-fmt.xml"> | 433 | <!ENTITY g-fmt SYSTEM "v4l/vidioc-g-fmt.xml"> |
428 | <!ENTITY g-frequency SYSTEM "v4l/vidioc-g-frequency.xml"> | 434 | <!ENTITY g-frequency SYSTEM "v4l/vidioc-g-frequency.xml"> |
429 | <!ENTITY g-input SYSTEM "v4l/vidioc-g-input.xml"> | 435 | <!ENTITY g-input SYSTEM "v4l/vidioc-g-input.xml"> |
430 | <!ENTITY g-jpegcomp SYSTEM "v4l/vidioc-g-jpegcomp.xml"> | 436 | <!ENTITY g-jpegcomp SYSTEM "v4l/vidioc-g-jpegcomp.xml"> |
431 | <!ENTITY g-modulator SYSTEM "v4l/vidioc-g-modulator.xml"> | 437 | <!ENTITY g-modulator SYSTEM "v4l/vidioc-g-modulator.xml"> |
432 | <!ENTITY g-output SYSTEM "v4l/vidioc-g-output.xml"> | 438 | <!ENTITY g-output SYSTEM "v4l/vidioc-g-output.xml"> |
433 | <!ENTITY g-parm SYSTEM "v4l/vidioc-g-parm.xml"> | 439 | <!ENTITY g-parm SYSTEM "v4l/vidioc-g-parm.xml"> |
434 | <!ENTITY g-priority SYSTEM "v4l/vidioc-g-priority.xml"> | 440 | <!ENTITY g-priority SYSTEM "v4l/vidioc-g-priority.xml"> |
435 | <!ENTITY g-sliced-vbi-cap SYSTEM "v4l/vidioc-g-sliced-vbi-cap.xml"> | 441 | <!ENTITY g-sliced-vbi-cap SYSTEM "v4l/vidioc-g-sliced-vbi-cap.xml"> |
436 | <!ENTITY g-std SYSTEM "v4l/vidioc-g-std.xml"> | 442 | <!ENTITY g-std SYSTEM "v4l/vidioc-g-std.xml"> |
437 | <!ENTITY g-tuner SYSTEM "v4l/vidioc-g-tuner.xml"> | 443 | <!ENTITY g-tuner SYSTEM "v4l/vidioc-g-tuner.xml"> |
438 | <!ENTITY log-status SYSTEM "v4l/vidioc-log-status.xml"> | 444 | <!ENTITY log-status SYSTEM "v4l/vidioc-log-status.xml"> |
439 | <!ENTITY overlay SYSTEM "v4l/vidioc-overlay.xml"> | 445 | <!ENTITY overlay SYSTEM "v4l/vidioc-overlay.xml"> |
440 | <!ENTITY qbuf SYSTEM "v4l/vidioc-qbuf.xml"> | 446 | <!ENTITY qbuf SYSTEM "v4l/vidioc-qbuf.xml"> |
441 | <!ENTITY querybuf SYSTEM "v4l/vidioc-querybuf.xml"> | 447 | <!ENTITY querybuf SYSTEM "v4l/vidioc-querybuf.xml"> |
442 | <!ENTITY querycap SYSTEM "v4l/vidioc-querycap.xml"> | 448 | <!ENTITY querycap SYSTEM "v4l/vidioc-querycap.xml"> |
443 | <!ENTITY queryctrl SYSTEM "v4l/vidioc-queryctrl.xml"> | 449 | <!ENTITY queryctrl SYSTEM "v4l/vidioc-queryctrl.xml"> |
444 | <!ENTITY querystd SYSTEM "v4l/vidioc-querystd.xml"> | 450 | <!ENTITY querystd SYSTEM "v4l/vidioc-querystd.xml"> |
445 | <!ENTITY reqbufs SYSTEM "v4l/vidioc-reqbufs.xml"> | 451 | <!ENTITY reqbufs SYSTEM "v4l/vidioc-reqbufs.xml"> |
446 | <!ENTITY s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml"> | 452 | <!ENTITY s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml"> |
447 | <!ENTITY streamon SYSTEM "v4l/vidioc-streamon.xml"> | 453 | <!ENTITY streamon SYSTEM "v4l/vidioc-streamon.xml"> |
448 | <!ENTITY dqevent SYSTEM "v4l/vidioc-dqevent.xml"> | 454 | <!ENTITY dqevent SYSTEM "v4l/vidioc-dqevent.xml"> |
449 | <!ENTITY subscribe_event SYSTEM "v4l/vidioc-subscribe-event.xml"> | 455 | <!ENTITY subscribe_event SYSTEM "v4l/vidioc-subscribe-event.xml"> |
450 | 456 |
Documentation/DocBook/v4l/v4l2.xml
1 | <partinfo> | 1 | <partinfo> |
2 | <authorgroup> | 2 | <authorgroup> |
3 | <author> | 3 | <author> |
4 | <firstname>Michael</firstname> | 4 | <firstname>Michael</firstname> |
5 | <surname>Schimek</surname> | 5 | <surname>Schimek</surname> |
6 | <othername role="mi">H</othername> | 6 | <othername role="mi">H</othername> |
7 | <affiliation> | 7 | <affiliation> |
8 | <address> | 8 | <address> |
9 | <email>mschimek@gmx.at</email> | 9 | <email>mschimek@gmx.at</email> |
10 | </address> | 10 | </address> |
11 | </affiliation> | 11 | </affiliation> |
12 | </author> | 12 | </author> |
13 | 13 | ||
14 | <author> | 14 | <author> |
15 | <firstname>Bill</firstname> | 15 | <firstname>Bill</firstname> |
16 | <surname>Dirks</surname> | 16 | <surname>Dirks</surname> |
17 | <!-- Commented until Bill opts in to be spammed. | 17 | <!-- Commented until Bill opts in to be spammed. |
18 | <affiliation> | 18 | <affiliation> |
19 | <address> | 19 | <address> |
20 | <email>bill@thedirks.org</email> | 20 | <email>bill@thedirks.org</email> |
21 | </address> | 21 | </address> |
22 | </affiliation> --> | 22 | </affiliation> --> |
23 | <contrib>Original author of the V4L2 API and | 23 | <contrib>Original author of the V4L2 API and |
24 | documentation.</contrib> | 24 | documentation.</contrib> |
25 | </author> | 25 | </author> |
26 | 26 | ||
27 | <author> | 27 | <author> |
28 | <firstname>Hans</firstname> | 28 | <firstname>Hans</firstname> |
29 | <surname>Verkuil</surname> | 29 | <surname>Verkuil</surname> |
30 | <contrib>Designed and documented the VIDIOC_LOG_STATUS ioctl, | 30 | <contrib>Designed and documented the VIDIOC_LOG_STATUS ioctl, |
31 | the extended control ioctls and major parts of the sliced VBI | 31 | the extended control ioctls and major parts of the sliced VBI |
32 | API.</contrib> | 32 | API.</contrib> |
33 | <affiliation> | 33 | <affiliation> |
34 | <address> | 34 | <address> |
35 | <email>hverkuil@xs4all.nl</email> | 35 | <email>hverkuil@xs4all.nl</email> |
36 | </address> | 36 | </address> |
37 | </affiliation> | 37 | </affiliation> |
38 | </author> | 38 | </author> |
39 | 39 | ||
40 | <author> | 40 | <author> |
41 | <firstname>Martin</firstname> | 41 | <firstname>Martin</firstname> |
42 | <surname>Rubli</surname> | 42 | <surname>Rubli</surname> |
43 | <!-- | 43 | <!-- |
44 | <affiliation> | 44 | <affiliation> |
45 | <address> | 45 | <address> |
46 | <email>martin_rubli@logitech.com</email> | 46 | <email>martin_rubli@logitech.com</email> |
47 | </address> | 47 | </address> |
48 | </affiliation> --> | 48 | </affiliation> --> |
49 | <contrib>Designed and documented the VIDIOC_ENUM_FRAMESIZES | 49 | <contrib>Designed and documented the VIDIOC_ENUM_FRAMESIZES |
50 | and VIDIOC_ENUM_FRAMEINTERVALS ioctls.</contrib> | 50 | and VIDIOC_ENUM_FRAMEINTERVALS ioctls.</contrib> |
51 | </author> | 51 | </author> |
52 | 52 | ||
53 | <author> | 53 | <author> |
54 | <firstname>Andy</firstname> | 54 | <firstname>Andy</firstname> |
55 | <surname>Walls</surname> | 55 | <surname>Walls</surname> |
56 | <contrib>Documented the fielded V4L2_MPEG_STREAM_VBI_FMT_IVTV | 56 | <contrib>Documented the fielded V4L2_MPEG_STREAM_VBI_FMT_IVTV |
57 | MPEG stream embedded, sliced VBI data format in this specification. | 57 | MPEG stream embedded, sliced VBI data format in this specification. |
58 | </contrib> | 58 | </contrib> |
59 | <affiliation> | 59 | <affiliation> |
60 | <address> | 60 | <address> |
61 | <email>awalls@md.metrocast.net</email> | 61 | <email>awalls@md.metrocast.net</email> |
62 | </address> | 62 | </address> |
63 | </affiliation> | 63 | </affiliation> |
64 | </author> | 64 | </author> |
65 | 65 | ||
66 | <author> | 66 | <author> |
67 | <firstname>Mauro</firstname> | 67 | <firstname>Mauro</firstname> |
68 | <surname>Carvalho Chehab</surname> | 68 | <surname>Carvalho Chehab</surname> |
69 | <contrib>Documented libv4l, designed and added v4l2grab example, | 69 | <contrib>Documented libv4l, designed and added v4l2grab example, |
70 | Remote Controller chapter.</contrib> | 70 | Remote Controller chapter.</contrib> |
71 | <affiliation> | 71 | <affiliation> |
72 | <address> | 72 | <address> |
73 | <email>mchehab@redhat.com</email> | 73 | <email>mchehab@redhat.com</email> |
74 | </address> | 74 | </address> |
75 | </affiliation> | 75 | </affiliation> |
76 | </author> | 76 | </author> |
77 | 77 | ||
78 | <author> | 78 | <author> |
79 | <firstname>Muralidharan</firstname> | 79 | <firstname>Muralidharan</firstname> |
80 | <surname>Karicheri</surname> | 80 | <surname>Karicheri</surname> |
81 | <contrib>Documented the Digital Video timings API.</contrib> | 81 | <contrib>Documented the Digital Video timings API.</contrib> |
82 | <affiliation> | 82 | <affiliation> |
83 | <address> | 83 | <address> |
84 | <email>m-karicheri2@ti.com</email> | 84 | <email>m-karicheri2@ti.com</email> |
85 | </address> | 85 | </address> |
86 | </affiliation> | 86 | </affiliation> |
87 | </author> | 87 | </author> |
88 | 88 | ||
89 | <author> | 89 | <author> |
90 | <firstname>Pawel</firstname> | 90 | <firstname>Pawel</firstname> |
91 | <surname>Osciak</surname> | 91 | <surname>Osciak</surname> |
92 | <contrib>Designed and documented the multi-planar API.</contrib> | 92 | <contrib>Designed and documented the multi-planar API.</contrib> |
93 | <affiliation> | 93 | <affiliation> |
94 | <address> | 94 | <address> |
95 | <email>pawel AT osciak.com</email> | 95 | <email>pawel AT osciak.com</email> |
96 | </address> | 96 | </address> |
97 | </affiliation> | 97 | </affiliation> |
98 | </author> | 98 | </author> |
99 | </authorgroup> | 99 | </authorgroup> |
100 | 100 | ||
101 | <copyright> | 101 | <copyright> |
102 | <year>1999</year> | 102 | <year>1999</year> |
103 | <year>2000</year> | 103 | <year>2000</year> |
104 | <year>2001</year> | 104 | <year>2001</year> |
105 | <year>2002</year> | 105 | <year>2002</year> |
106 | <year>2003</year> | 106 | <year>2003</year> |
107 | <year>2004</year> | 107 | <year>2004</year> |
108 | <year>2005</year> | 108 | <year>2005</year> |
109 | <year>2006</year> | 109 | <year>2006</year> |
110 | <year>2007</year> | 110 | <year>2007</year> |
111 | <year>2008</year> | 111 | <year>2008</year> |
112 | <year>2009</year> | 112 | <year>2009</year> |
113 | <year>2010</year> | 113 | <year>2010</year> |
114 | <year>2011</year> | 114 | <year>2011</year> |
115 | <holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin | 115 | <holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin |
116 | Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, | 116 | Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab, |
117 | Pawel Osciak</holder> | 117 | Pawel Osciak</holder> |
118 | </copyright> | 118 | </copyright> |
119 | <legalnotice> | 119 | <legalnotice> |
120 | <para>Except when explicitly stated as GPL, programming examples within | 120 | <para>Except when explicitly stated as GPL, programming examples within |
121 | this part can be used and distributed without restrictions.</para> | 121 | this part can be used and distributed without restrictions.</para> |
122 | </legalnotice> | 122 | </legalnotice> |
123 | <revhistory> | 123 | <revhistory> |
124 | <!-- Put document revisions here, newest first. --> | 124 | <!-- Put document revisions here, newest first. --> |
125 | <!-- API revisions (changes and additions of defines, enums, | 125 | <!-- API revisions (changes and additions of defines, enums, |
126 | structs, ioctls) must be noted in more detail in the history chapter | 126 | structs, ioctls) must be noted in more detail in the history chapter |
127 | (compat.xml), along with the possible impact on existing drivers and | 127 | (compat.xml), along with the possible impact on existing drivers and |
128 | applications. --> | 128 | applications. --> |
129 | 129 | ||
130 | <revision> | 130 | <revision> |
131 | <revnumber>2.6.39</revnumber> | 131 | <revnumber>2.6.39</revnumber> |
132 | <date>2011-03-01</date> | 132 | <date>2011-03-01</date> |
133 | <authorinitials>mcc</authorinitials> | 133 | <authorinitials>mcc</authorinitials> |
134 | <revremark>Removed VIDIOC_*_OLD from videodev2.h header and update it to reflect latest changes. | 134 | <revremark>Removed VIDIOC_*_OLD from videodev2.h header and update it to reflect latest changes. |
135 | </revremark> | 135 | </revremark> |
136 | </revision> | 136 | </revision> |
137 | 137 | ||
138 | <revision> | 138 | <revision> |
139 | <revnumber>2.6.38</revnumber> | 139 | <revnumber>2.6.38</revnumber> |
140 | <date>2011-01-16</date> | 140 | <date>2011-01-16</date> |
141 | <authorinitials>po</authorinitials> | 141 | <authorinitials>po</authorinitials> |
142 | <revremark>Added the <link linkend="planar-apis">multi-planar API</link>. | 142 | <revremark>Added the <link linkend="planar-apis">multi-planar API</link>. |
143 | </revremark> | 143 | </revremark> |
144 | </revision> | 144 | </revision> |
145 | 145 | ||
146 | <revision> | 146 | <revision> |
147 | <revnumber>2.6.37</revnumber> | 147 | <revnumber>2.6.37</revnumber> |
148 | <date>2010-08-06</date> | 148 | <date>2010-08-06</date> |
149 | <authorinitials>hv</authorinitials> | 149 | <authorinitials>hv</authorinitials> |
150 | <revremark>Removed obsolete vtx (videotext) API.</revremark> | 150 | <revremark>Removed obsolete vtx (videotext) API.</revremark> |
151 | </revision> | 151 | </revision> |
152 | 152 | ||
153 | <revision> | 153 | <revision> |
154 | <revnumber>2.6.33</revnumber> | 154 | <revnumber>2.6.33</revnumber> |
155 | <date>2009-12-03</date> | 155 | <date>2009-12-03</date> |
156 | <authorinitials>mk</authorinitials> | 156 | <authorinitials>mk</authorinitials> |
157 | <revremark>Added documentation for the Digital Video timings API.</revremark> | 157 | <revremark>Added documentation for the Digital Video timings API.</revremark> |
158 | </revision> | 158 | </revision> |
159 | 159 | ||
160 | <revision> | 160 | <revision> |
161 | <revnumber>2.6.32</revnumber> | 161 | <revnumber>2.6.32</revnumber> |
162 | <date>2009-08-31</date> | 162 | <date>2009-08-31</date> |
163 | <authorinitials>mcc</authorinitials> | 163 | <authorinitials>mcc</authorinitials> |
164 | <revremark>Now, revisions will match the kernel version where | 164 | <revremark>Now, revisions will match the kernel version where |
165 | the V4L2 API changes will be used by the Linux Kernel. | 165 | the V4L2 API changes will be used by the Linux Kernel. |
166 | Also added Remote Controller chapter.</revremark> | 166 | Also added Remote Controller chapter.</revremark> |
167 | </revision> | 167 | </revision> |
168 | 168 | ||
169 | <revision> | 169 | <revision> |
170 | <revnumber>0.29</revnumber> | 170 | <revnumber>0.29</revnumber> |
171 | <date>2009-08-26</date> | 171 | <date>2009-08-26</date> |
172 | <authorinitials>ev</authorinitials> | 172 | <authorinitials>ev</authorinitials> |
173 | <revremark>Added documentation for string controls and for FM Transmitter controls.</revremark> | 173 | <revremark>Added documentation for string controls and for FM Transmitter controls.</revremark> |
174 | </revision> | 174 | </revision> |
175 | 175 | ||
176 | <revision> | 176 | <revision> |
177 | <revnumber>0.28</revnumber> | 177 | <revnumber>0.28</revnumber> |
178 | <date>2009-08-26</date> | 178 | <date>2009-08-26</date> |
179 | <authorinitials>gl</authorinitials> | 179 | <authorinitials>gl</authorinitials> |
180 | <revremark>Added V4L2_CID_BAND_STOP_FILTER documentation.</revremark> | 180 | <revremark>Added V4L2_CID_BAND_STOP_FILTER documentation.</revremark> |
181 | </revision> | 181 | </revision> |
182 | 182 | ||
183 | <revision> | 183 | <revision> |
184 | <revnumber>0.27</revnumber> | 184 | <revnumber>0.27</revnumber> |
185 | <date>2009-08-15</date> | 185 | <date>2009-08-15</date> |
186 | <authorinitials>mcc</authorinitials> | 186 | <authorinitials>mcc</authorinitials> |
187 | <revremark>Added libv4l and Remote Controller documentation; | 187 | <revremark>Added libv4l and Remote Controller documentation; |
188 | added v4l2grab and keytable application examples.</revremark> | 188 | added v4l2grab and keytable application examples.</revremark> |
189 | </revision> | 189 | </revision> |
190 | 190 | ||
191 | <revision> | 191 | <revision> |
192 | <revnumber>0.26</revnumber> | 192 | <revnumber>0.26</revnumber> |
193 | <date>2009-07-23</date> | 193 | <date>2009-07-23</date> |
194 | <authorinitials>hv</authorinitials> | 194 | <authorinitials>hv</authorinitials> |
195 | <revremark>Finalized the RDS capture API. Added modulator and RDS encoder | 195 | <revremark>Finalized the RDS capture API. Added modulator and RDS encoder |
196 | capabilities. Added support for string controls.</revremark> | 196 | capabilities. Added support for string controls.</revremark> |
197 | </revision> | 197 | </revision> |
198 | 198 | ||
199 | <revision> | 199 | <revision> |
200 | <revnumber>0.25</revnumber> | 200 | <revnumber>0.25</revnumber> |
201 | <date>2009-01-18</date> | 201 | <date>2009-01-18</date> |
202 | <authorinitials>hv</authorinitials> | 202 | <authorinitials>hv</authorinitials> |
203 | <revremark>Added pixel formats VYUY, NV16 and NV61, and changed | 203 | <revremark>Added pixel formats VYUY, NV16 and NV61, and changed |
204 | the debug ioctls VIDIOC_DBG_G/S_REGISTER and VIDIOC_DBG_G_CHIP_IDENT. | 204 | the debug ioctls VIDIOC_DBG_G/S_REGISTER and VIDIOC_DBG_G_CHIP_IDENT. |
205 | Added camera controls V4L2_CID_ZOOM_ABSOLUTE, V4L2_CID_ZOOM_RELATIVE, | 205 | Added camera controls V4L2_CID_ZOOM_ABSOLUTE, V4L2_CID_ZOOM_RELATIVE, |
206 | V4L2_CID_ZOOM_CONTINUOUS and V4L2_CID_PRIVACY.</revremark> | 206 | V4L2_CID_ZOOM_CONTINUOUS and V4L2_CID_PRIVACY.</revremark> |
207 | </revision> | 207 | </revision> |
208 | 208 | ||
209 | <revision> | 209 | <revision> |
210 | <revnumber>0.24</revnumber> | 210 | <revnumber>0.24</revnumber> |
211 | <date>2008-03-04</date> | 211 | <date>2008-03-04</date> |
212 | <authorinitials>mhs</authorinitials> | 212 | <authorinitials>mhs</authorinitials> |
213 | <revremark>Added pixel formats Y16 and SBGGR16, new controls | 213 | <revremark>Added pixel formats Y16 and SBGGR16, new controls |
214 | and a camera controls class. Removed VIDIOC_G/S_MPEGCOMP.</revremark> | 214 | and a camera controls class. Removed VIDIOC_G/S_MPEGCOMP.</revremark> |
215 | </revision> | 215 | </revision> |
216 | 216 | ||
217 | <revision> | 217 | <revision> |
218 | <revnumber>0.23</revnumber> | 218 | <revnumber>0.23</revnumber> |
219 | <date>2007-08-30</date> | 219 | <date>2007-08-30</date> |
220 | <authorinitials>mhs</authorinitials> | 220 | <authorinitials>mhs</authorinitials> |
221 | <revremark>Fixed a typo in VIDIOC_DBG_G/S_REGISTER. | 221 | <revremark>Fixed a typo in VIDIOC_DBG_G/S_REGISTER. |
222 | Clarified the byte order of packed pixel formats.</revremark> | 222 | Clarified the byte order of packed pixel formats.</revremark> |
223 | </revision> | 223 | </revision> |
224 | 224 | ||
225 | <revision> | 225 | <revision> |
226 | <revnumber>0.22</revnumber> | 226 | <revnumber>0.22</revnumber> |
227 | <date>2007-08-29</date> | 227 | <date>2007-08-29</date> |
228 | <authorinitials>mhs</authorinitials> | 228 | <authorinitials>mhs</authorinitials> |
229 | <revremark>Added the Video Output Overlay interface, new MPEG | 229 | <revremark>Added the Video Output Overlay interface, new MPEG |
230 | controls, V4L2_FIELD_INTERLACED_TB and V4L2_FIELD_INTERLACED_BT, | 230 | controls, V4L2_FIELD_INTERLACED_TB and V4L2_FIELD_INTERLACED_BT, |
231 | VIDIOC_DBG_G/S_REGISTER, VIDIOC_(TRY_)ENCODER_CMD, | 231 | VIDIOC_DBG_G/S_REGISTER, VIDIOC_(TRY_)ENCODER_CMD, |
232 | VIDIOC_G_CHIP_IDENT, VIDIOC_G_ENC_INDEX, new pixel formats. | 232 | VIDIOC_G_CHIP_IDENT, VIDIOC_G_ENC_INDEX, new pixel formats. |
233 | Clarifications in the cropping chapter, about RGB pixel formats, the | 233 | Clarifications in the cropping chapter, about RGB pixel formats, the |
234 | mmap(), poll(), select(), read() and write() functions. Typographical | 234 | mmap(), poll(), select(), read() and write() functions. Typographical |
235 | fixes.</revremark> | 235 | fixes.</revremark> |
236 | </revision> | 236 | </revision> |
237 | 237 | ||
238 | <revision> | 238 | <revision> |
239 | <revnumber>0.21</revnumber> | 239 | <revnumber>0.21</revnumber> |
240 | <date>2006-12-19</date> | 240 | <date>2006-12-19</date> |
241 | <authorinitials>mhs</authorinitials> | 241 | <authorinitials>mhs</authorinitials> |
242 | <revremark>Fixed a link in the VIDIOC_G_EXT_CTRLS section.</revremark> | 242 | <revremark>Fixed a link in the VIDIOC_G_EXT_CTRLS section.</revremark> |
243 | </revision> | 243 | </revision> |
244 | 244 | ||
245 | <revision> | 245 | <revision> |
246 | <revnumber>0.20</revnumber> | 246 | <revnumber>0.20</revnumber> |
247 | <date>2006-11-24</date> | 247 | <date>2006-11-24</date> |
248 | <authorinitials>mhs</authorinitials> | 248 | <authorinitials>mhs</authorinitials> |
249 | <revremark>Clarified the purpose of the audioset field in | 249 | <revremark>Clarified the purpose of the audioset field in |
250 | struct v4l2_input and v4l2_output.</revremark> | 250 | struct v4l2_input and v4l2_output.</revremark> |
251 | </revision> | 251 | </revision> |
252 | 252 | ||
253 | <revision> | 253 | <revision> |
254 | <revnumber>0.19</revnumber> | 254 | <revnumber>0.19</revnumber> |
255 | <date>2006-10-19</date> | 255 | <date>2006-10-19</date> |
256 | <authorinitials>mhs</authorinitials> | 256 | <authorinitials>mhs</authorinitials> |
257 | <revremark>Documented V4L2_PIX_FMT_RGB444.</revremark> | 257 | <revremark>Documented V4L2_PIX_FMT_RGB444.</revremark> |
258 | </revision> | 258 | </revision> |
259 | 259 | ||
260 | <revision> | 260 | <revision> |
261 | <revnumber>0.18</revnumber> | 261 | <revnumber>0.18</revnumber> |
262 | <date>2006-10-18</date> | 262 | <date>2006-10-18</date> |
263 | <authorinitials>mhs</authorinitials> | 263 | <authorinitials>mhs</authorinitials> |
264 | <revremark>Added the description of extended controls by Hans | 264 | <revremark>Added the description of extended controls by Hans |
265 | Verkuil. Linked V4L2_PIX_FMT_MPEG to V4L2_CID_MPEG_STREAM_TYPE.</revremark> | 265 | Verkuil. Linked V4L2_PIX_FMT_MPEG to V4L2_CID_MPEG_STREAM_TYPE.</revremark> |
266 | </revision> | 266 | </revision> |
267 | 267 | ||
268 | <revision> | 268 | <revision> |
269 | <revnumber>0.17</revnumber> | 269 | <revnumber>0.17</revnumber> |
270 | <date>2006-10-12</date> | 270 | <date>2006-10-12</date> |
271 | <authorinitials>mhs</authorinitials> | 271 | <authorinitials>mhs</authorinitials> |
272 | <revremark>Corrected V4L2_PIX_FMT_HM12 description.</revremark> | 272 | <revremark>Corrected V4L2_PIX_FMT_HM12 description.</revremark> |
273 | </revision> | 273 | </revision> |
274 | 274 | ||
275 | <revision> | 275 | <revision> |
276 | <revnumber>0.16</revnumber> | 276 | <revnumber>0.16</revnumber> |
277 | <date>2006-10-08</date> | 277 | <date>2006-10-08</date> |
278 | <authorinitials>mhs</authorinitials> | 278 | <authorinitials>mhs</authorinitials> |
279 | <revremark>VIDIOC_ENUM_FRAMESIZES and | 279 | <revremark>VIDIOC_ENUM_FRAMESIZES and |
280 | VIDIOC_ENUM_FRAMEINTERVALS are now part of the API.</revremark> | 280 | VIDIOC_ENUM_FRAMEINTERVALS are now part of the API.</revremark> |
281 | </revision> | 281 | </revision> |
282 | 282 | ||
283 | <revision> | 283 | <revision> |
284 | <revnumber>0.15</revnumber> | 284 | <revnumber>0.15</revnumber> |
285 | <date>2006-09-23</date> | 285 | <date>2006-09-23</date> |
286 | <authorinitials>mhs</authorinitials> | 286 | <authorinitials>mhs</authorinitials> |
287 | <revremark>Cleaned up the bibliography, added BT.653 and | 287 | <revremark>Cleaned up the bibliography, added BT.653 and |
288 | BT.1119. capture.c/start_capturing() for user pointer I/O did not | 288 | BT.1119. capture.c/start_capturing() for user pointer I/O did not |
289 | initialize the buffer index. Documented the V4L MPEG and MJPEG | 289 | initialize the buffer index. Documented the V4L MPEG and MJPEG |
290 | VID_TYPEs and V4L2_PIX_FMT_SBGGR8. Updated the list of reserved pixel | 290 | VID_TYPEs and V4L2_PIX_FMT_SBGGR8. Updated the list of reserved pixel |
291 | formats. See the history chapter for API changes.</revremark> | 291 | formats. See the history chapter for API changes.</revremark> |
292 | </revision> | 292 | </revision> |
293 | 293 | ||
294 | <revision> | 294 | <revision> |
295 | <revnumber>0.14</revnumber> | 295 | <revnumber>0.14</revnumber> |
296 | <date>2006-09-14</date> | 296 | <date>2006-09-14</date> |
297 | <authorinitials>mr</authorinitials> | 297 | <authorinitials>mr</authorinitials> |
298 | <revremark>Added VIDIOC_ENUM_FRAMESIZES and | 298 | <revremark>Added VIDIOC_ENUM_FRAMESIZES and |
299 | VIDIOC_ENUM_FRAMEINTERVALS proposal for frame format enumeration of | 299 | VIDIOC_ENUM_FRAMEINTERVALS proposal for frame format enumeration of |
300 | digital devices.</revremark> | 300 | digital devices.</revremark> |
301 | </revision> | 301 | </revision> |
302 | 302 | ||
303 | <revision> | 303 | <revision> |
304 | <revnumber>0.13</revnumber> | 304 | <revnumber>0.13</revnumber> |
305 | <date>2006-04-07</date> | 305 | <date>2006-04-07</date> |
306 | <authorinitials>mhs</authorinitials> | 306 | <authorinitials>mhs</authorinitials> |
307 | <revremark>Corrected the description of struct v4l2_window | 307 | <revremark>Corrected the description of struct v4l2_window |
308 | clips. New V4L2_STD_ and V4L2_TUNER_MODE_LANG1_LANG2 | 308 | clips. New V4L2_STD_ and V4L2_TUNER_MODE_LANG1_LANG2 |
309 | defines.</revremark> | 309 | defines.</revremark> |
310 | </revision> | 310 | </revision> |
311 | 311 | ||
312 | <revision> | 312 | <revision> |
313 | <revnumber>0.12</revnumber> | 313 | <revnumber>0.12</revnumber> |
314 | <date>2006-02-03</date> | 314 | <date>2006-02-03</date> |
315 | <authorinitials>mhs</authorinitials> | 315 | <authorinitials>mhs</authorinitials> |
316 | <revremark>Corrected the description of struct | 316 | <revremark>Corrected the description of struct |
317 | v4l2_captureparm and v4l2_outputparm.</revremark> | 317 | v4l2_captureparm and v4l2_outputparm.</revremark> |
318 | </revision> | 318 | </revision> |
319 | 319 | ||
320 | <revision> | 320 | <revision> |
321 | <revnumber>0.11</revnumber> | 321 | <revnumber>0.11</revnumber> |
322 | <date>2006-01-27</date> | 322 | <date>2006-01-27</date> |
323 | <authorinitials>mhs</authorinitials> | 323 | <authorinitials>mhs</authorinitials> |
324 | <revremark>Improved the description of struct | 324 | <revremark>Improved the description of struct |
325 | v4l2_tuner.</revremark> | 325 | v4l2_tuner.</revremark> |
326 | </revision> | 326 | </revision> |
327 | 327 | ||
328 | <revision> | 328 | <revision> |
329 | <revnumber>0.10</revnumber> | 329 | <revnumber>0.10</revnumber> |
330 | <date>2006-01-10</date> | 330 | <date>2006-01-10</date> |
331 | <authorinitials>mhs</authorinitials> | 331 | <authorinitials>mhs</authorinitials> |
332 | <revremark>VIDIOC_G_INPUT and VIDIOC_S_PARM | 332 | <revremark>VIDIOC_G_INPUT and VIDIOC_S_PARM |
333 | clarifications.</revremark> | 333 | clarifications.</revremark> |
334 | </revision> | 334 | </revision> |
335 | 335 | ||
336 | <revision> | 336 | <revision> |
337 | <revnumber>0.9</revnumber> | 337 | <revnumber>0.9</revnumber> |
338 | <date>2005-11-27</date> | 338 | <date>2005-11-27</date> |
339 | <authorinitials>mhs</authorinitials> | 339 | <authorinitials>mhs</authorinitials> |
340 | <revremark>Improved the 525 line numbering diagram. Hans | 340 | <revremark>Improved the 525 line numbering diagram. Hans |
341 | Verkuil and I rewrote the sliced VBI section. He also contributed a | 341 | Verkuil and I rewrote the sliced VBI section. He also contributed a |
342 | VIDIOC_LOG_STATUS page. Fixed VIDIOC_S_STD call in the video standard | 342 | VIDIOC_LOG_STATUS page. Fixed VIDIOC_S_STD call in the video standard |
343 | selection example. Various updates.</revremark> | 343 | selection example. Various updates.</revremark> |
344 | </revision> | 344 | </revision> |
345 | 345 | ||
346 | <revision> | 346 | <revision> |
347 | <revnumber>0.8</revnumber> | 347 | <revnumber>0.8</revnumber> |
348 | <date>2004-10-04</date> | 348 | <date>2004-10-04</date> |
349 | <authorinitials>mhs</authorinitials> | 349 | <authorinitials>mhs</authorinitials> |
350 | <revremark>Somehow a piece of junk slipped into the capture | 350 | <revremark>Somehow a piece of junk slipped into the capture |
351 | example, removed.</revremark> | 351 | example, removed.</revremark> |
352 | </revision> | 352 | </revision> |
353 | 353 | ||
354 | <revision> | 354 | <revision> |
355 | <revnumber>0.7</revnumber> | 355 | <revnumber>0.7</revnumber> |
356 | <date>2004-09-19</date> | 356 | <date>2004-09-19</date> |
357 | <authorinitials>mhs</authorinitials> | 357 | <authorinitials>mhs</authorinitials> |
358 | <revremark>Fixed video standard selection, control | 358 | <revremark>Fixed video standard selection, control |
359 | enumeration, downscaling and aspect example. Added read and user | 359 | enumeration, downscaling and aspect example. Added read and user |
360 | pointer i/o to video capture example.</revremark> | 360 | pointer i/o to video capture example.</revremark> |
361 | </revision> | 361 | </revision> |
362 | 362 | ||
363 | <revision> | 363 | <revision> |
364 | <revnumber>0.6</revnumber> | 364 | <revnumber>0.6</revnumber> |
365 | <date>2004-08-01</date> | 365 | <date>2004-08-01</date> |
366 | <authorinitials>mhs</authorinitials> | 366 | <authorinitials>mhs</authorinitials> |
367 | <revremark>v4l2_buffer changes, added video capture example, | 367 | <revremark>v4l2_buffer changes, added video capture example, |
368 | various corrections.</revremark> | 368 | various corrections.</revremark> |
369 | </revision> | 369 | </revision> |
370 | 370 | ||
371 | <revision> | 371 | <revision> |
372 | <revnumber>0.5</revnumber> | 372 | <revnumber>0.5</revnumber> |
373 | <date>2003-11-05</date> | 373 | <date>2003-11-05</date> |
374 | <authorinitials>mhs</authorinitials> | 374 | <authorinitials>mhs</authorinitials> |
375 | <revremark>Pixel format erratum.</revremark> | 375 | <revremark>Pixel format erratum.</revremark> |
376 | </revision> | 376 | </revision> |
377 | 377 | ||
378 | <revision> | 378 | <revision> |
379 | <revnumber>0.4</revnumber> | 379 | <revnumber>0.4</revnumber> |
380 | <date>2003-09-17</date> | 380 | <date>2003-09-17</date> |
381 | <authorinitials>mhs</authorinitials> | 381 | <authorinitials>mhs</authorinitials> |
382 | <revremark>Corrected source and Makefile to generate a PDF. | 382 | <revremark>Corrected source and Makefile to generate a PDF. |
383 | SGML fixes. Added latest API changes. Closed gaps in the history | 383 | SGML fixes. Added latest API changes. Closed gaps in the history |
384 | chapter.</revremark> | 384 | chapter.</revremark> |
385 | </revision> | 385 | </revision> |
386 | 386 | ||
387 | <revision> | 387 | <revision> |
388 | <revnumber>0.3</revnumber> | 388 | <revnumber>0.3</revnumber> |
389 | <date>2003-02-05</date> | 389 | <date>2003-02-05</date> |
390 | <authorinitials>mhs</authorinitials> | 390 | <authorinitials>mhs</authorinitials> |
391 | <revremark>Another draft, more corrections.</revremark> | 391 | <revremark>Another draft, more corrections.</revremark> |
392 | </revision> | 392 | </revision> |
393 | 393 | ||
394 | <revision> | 394 | <revision> |
395 | <revnumber>0.2</revnumber> | 395 | <revnumber>0.2</revnumber> |
396 | <date>2003-01-15</date> | 396 | <date>2003-01-15</date> |
397 | <authorinitials>mhs</authorinitials> | 397 | <authorinitials>mhs</authorinitials> |
398 | <revremark>Second draft, with corrections pointed out by Gerd | 398 | <revremark>Second draft, with corrections pointed out by Gerd |
399 | Knorr.</revremark> | 399 | Knorr.</revremark> |
400 | </revision> | 400 | </revision> |
401 | 401 | ||
402 | <revision> | 402 | <revision> |
403 | <revnumber>0.1</revnumber> | 403 | <revnumber>0.1</revnumber> |
404 | <date>2002-12-01</date> | 404 | <date>2002-12-01</date> |
405 | <authorinitials>mhs</authorinitials> | 405 | <authorinitials>mhs</authorinitials> |
406 | <revremark>First draft, based on documentation by Bill Dirks | 406 | <revremark>First draft, based on documentation by Bill Dirks |
407 | and discussions on the V4L mailing list.</revremark> | 407 | and discussions on the V4L mailing list.</revremark> |
408 | </revision> | 408 | </revision> |
409 | </revhistory> | 409 | </revhistory> |
410 | </partinfo> | 410 | </partinfo> |
411 | 411 | ||
412 | <title>Video for Linux Two API Specification</title> | 412 | <title>Video for Linux Two API Specification</title> |
413 | <subtitle>Revision 2.6.38</subtitle> | 413 | <subtitle>Revision 2.6.38</subtitle> |
414 | 414 | ||
415 | <chapter id="common"> | 415 | <chapter id="common"> |
416 | &sub-common; | 416 | &sub-common; |
417 | </chapter> | 417 | </chapter> |
418 | 418 | ||
419 | <chapter id="pixfmt"> | 419 | <chapter id="pixfmt"> |
420 | &sub-pixfmt; | 420 | &sub-pixfmt; |
421 | </chapter> | 421 | </chapter> |
422 | 422 | ||
423 | <chapter id="io"> | 423 | <chapter id="io"> |
424 | &sub-io; | 424 | &sub-io; |
425 | </chapter> | 425 | </chapter> |
426 | 426 | ||
427 | <chapter id="devices"> | 427 | <chapter id="devices"> |
428 | <title>Interfaces</title> | 428 | <title>Interfaces</title> |
429 | 429 | ||
430 | <section id="capture"> &sub-dev-capture; </section> | 430 | <section id="capture"> &sub-dev-capture; </section> |
431 | <section id="overlay"> &sub-dev-overlay; </section> | 431 | <section id="overlay"> &sub-dev-overlay; </section> |
432 | <section id="output"> &sub-dev-output; </section> | 432 | <section id="output"> &sub-dev-output; </section> |
433 | <section id="osd"> &sub-dev-osd; </section> | 433 | <section id="osd"> &sub-dev-osd; </section> |
434 | <section id="codec"> &sub-dev-codec; </section> | 434 | <section id="codec"> &sub-dev-codec; </section> |
435 | <section id="effect"> &sub-dev-effect; </section> | 435 | <section id="effect"> &sub-dev-effect; </section> |
436 | <section id="raw-vbi"> &sub-dev-raw-vbi; </section> | 436 | <section id="raw-vbi"> &sub-dev-raw-vbi; </section> |
437 | <section id="sliced"> &sub-dev-sliced-vbi; </section> | 437 | <section id="sliced"> &sub-dev-sliced-vbi; </section> |
438 | <section id="ttx"> &sub-dev-teletext; </section> | 438 | <section id="ttx"> &sub-dev-teletext; </section> |
439 | <section id="radio"> &sub-dev-radio; </section> | 439 | <section id="radio"> &sub-dev-radio; </section> |
440 | <section id="rds"> &sub-dev-rds; </section> | 440 | <section id="rds"> &sub-dev-rds; </section> |
441 | <section id="event"> &sub-dev-event; </section> | 441 | <section id="event"> &sub-dev-event; </section> |
442 | <section id="subdev"> &sub-dev-subdev; </section> | 442 | <section id="subdev"> &sub-dev-subdev; </section> |
443 | </chapter> | 443 | </chapter> |
444 | 444 | ||
445 | <chapter id="driver"> | 445 | <chapter id="driver"> |
446 | &sub-driver; | 446 | &sub-driver; |
447 | </chapter> | 447 | </chapter> |
448 | 448 | ||
449 | <chapter id="libv4l"> | 449 | <chapter id="libv4l"> |
450 | &sub-libv4l; | 450 | &sub-libv4l; |
451 | </chapter> | 451 | </chapter> |
452 | 452 | ||
453 | <chapter id="compat"> | 453 | <chapter id="compat"> |
454 | &sub-compat; | 454 | &sub-compat; |
455 | </chapter> | 455 | </chapter> |
456 | 456 | ||
457 | <appendix id="user-func"> | 457 | <appendix id="user-func"> |
458 | <title>Function Reference</title> | 458 | <title>Function Reference</title> |
459 | 459 | ||
460 | <!-- Keep this alphabetically sorted. --> | 460 | <!-- Keep this alphabetically sorted. --> |
461 | 461 | ||
462 | &sub-close; | 462 | &sub-close; |
463 | &sub-ioctl; | 463 | &sub-ioctl; |
464 | <!-- All ioctls go here. --> | 464 | <!-- All ioctls go here. --> |
465 | &sub-cropcap; | 465 | &sub-cropcap; |
466 | &sub-dbg-g-chip-ident; | 466 | &sub-dbg-g-chip-ident; |
467 | &sub-dbg-g-register; | 467 | &sub-dbg-g-register; |
468 | &sub-dqevent; | 468 | &sub-dqevent; |
469 | &sub-encoder-cmd; | 469 | &sub-encoder-cmd; |
470 | &sub-enumaudio; | 470 | &sub-enumaudio; |
471 | &sub-enumaudioout; | 471 | &sub-enumaudioout; |
472 | &sub-enum-dv-presets; | 472 | &sub-enum-dv-presets; |
473 | &sub-enum-fmt; | 473 | &sub-enum-fmt; |
474 | &sub-enum-framesizes; | 474 | &sub-enum-framesizes; |
475 | &sub-enum-frameintervals; | 475 | &sub-enum-frameintervals; |
476 | &sub-enuminput; | 476 | &sub-enuminput; |
477 | &sub-enumoutput; | 477 | &sub-enumoutput; |
478 | &sub-enumstd; | 478 | &sub-enumstd; |
479 | &sub-g-audio; | 479 | &sub-g-audio; |
480 | &sub-g-audioout; | 480 | &sub-g-audioout; |
481 | &sub-g-crop; | 481 | &sub-g-crop; |
482 | &sub-g-ctrl; | 482 | &sub-g-ctrl; |
483 | &sub-g-dv-preset; | 483 | &sub-g-dv-preset; |
484 | &sub-g-dv-timings; | 484 | &sub-g-dv-timings; |
485 | &sub-g-enc-index; | 485 | &sub-g-enc-index; |
486 | &sub-g-ext-ctrls; | 486 | &sub-g-ext-ctrls; |
487 | &sub-g-fbuf; | 487 | &sub-g-fbuf; |
488 | &sub-g-fmt; | 488 | &sub-g-fmt; |
489 | &sub-g-frequency; | 489 | &sub-g-frequency; |
490 | &sub-g-input; | 490 | &sub-g-input; |
491 | &sub-g-jpegcomp; | 491 | &sub-g-jpegcomp; |
492 | &sub-g-modulator; | 492 | &sub-g-modulator; |
493 | &sub-g-output; | 493 | &sub-g-output; |
494 | &sub-g-parm; | 494 | &sub-g-parm; |
495 | &sub-g-priority; | 495 | &sub-g-priority; |
496 | &sub-g-sliced-vbi-cap; | 496 | &sub-g-sliced-vbi-cap; |
497 | &sub-g-std; | 497 | &sub-g-std; |
498 | &sub-g-tuner; | 498 | &sub-g-tuner; |
499 | &sub-log-status; | 499 | &sub-log-status; |
500 | &sub-overlay; | 500 | &sub-overlay; |
501 | &sub-qbuf; | 501 | &sub-qbuf; |
502 | &sub-querybuf; | 502 | &sub-querybuf; |
503 | &sub-querycap; | 503 | &sub-querycap; |
504 | &sub-queryctrl; | 504 | &sub-queryctrl; |
505 | &sub-query-dv-preset; | 505 | &sub-query-dv-preset; |
506 | &sub-querystd; | 506 | &sub-querystd; |
507 | &sub-reqbufs; | 507 | &sub-reqbufs; |
508 | &sub-s-hw-freq-seek; | 508 | &sub-s-hw-freq-seek; |
509 | &sub-streamon; | 509 | &sub-streamon; |
510 | &sub-subdev-enum-frame-interval; | ||
510 | &sub-subdev-enum-frame-size; | 511 | &sub-subdev-enum-frame-size; |
511 | &sub-subdev-enum-mbus-code; | 512 | &sub-subdev-enum-mbus-code; |
512 | &sub-subdev-g-fmt; | 513 | &sub-subdev-g-fmt; |
514 | &sub-subdev-g-frame-interval; | ||
513 | &sub-subscribe-event; | 515 | &sub-subscribe-event; |
514 | <!-- End of ioctls. --> | 516 | <!-- End of ioctls. --> |
515 | &sub-mmap; | 517 | &sub-mmap; |
516 | &sub-munmap; | 518 | &sub-munmap; |
517 | &sub-open; | 519 | &sub-open; |
518 | &sub-poll; | 520 | &sub-poll; |
519 | &sub-read; | 521 | &sub-read; |
520 | &sub-select; | 522 | &sub-select; |
521 | &sub-write; | 523 | &sub-write; |
522 | </appendix> | 524 | </appendix> |
523 | 525 | ||
524 | <appendix id="videodev"> | 526 | <appendix id="videodev"> |
525 | <title>Video For Linux Two Header File</title> | 527 | <title>Video For Linux Two Header File</title> |
526 | &sub-videodev2-h; | 528 | &sub-videodev2-h; |
527 | </appendix> | 529 | </appendix> |
528 | 530 | ||
529 | <appendix id="capture-example"> | 531 | <appendix id="capture-example"> |
530 | <title>Video Capture Example</title> | 532 | <title>Video Capture Example</title> |
531 | &sub-capture-c; | 533 | &sub-capture-c; |
532 | </appendix> | 534 | </appendix> |
533 | 535 | ||
534 | <appendix id="v4l2grab-example"> | 536 | <appendix id="v4l2grab-example"> |
535 | <title>Video Grabber example using libv4l</title> | 537 | <title>Video Grabber example using libv4l</title> |
536 | <para>This program demonstrates how to grab V4L2 images in ppm format by | 538 | <para>This program demonstrates how to grab V4L2 images in ppm format by |
537 | using libv4l handlers. The advantage is that this grabber can potentially work | 539 | using libv4l handlers. The advantage is that this grabber can potentially work |
538 | with any V4L2 driver.</para> | 540 | with any V4L2 driver.</para> |
539 | &sub-v4l2grab-c; | 541 | &sub-v4l2grab-c; |
540 | </appendix> | 542 | </appendix> |
541 | 543 | ||
542 | &sub-media-indices; | 544 | &sub-media-indices; |
543 | 545 | ||
544 | &sub-biblio; | 546 | &sub-biblio; |
545 | 547 | ||
546 | 548 |
Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
File was created | 1 | <refentry id="vidioc-subdev-enum-frame-interval"> | |
2 | <refmeta> | ||
3 | <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refentrytitle> | ||
4 | &manvol; | ||
5 | </refmeta> | ||
6 | |||
7 | <refnamediv> | ||
8 | <refname>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refname> | ||
9 | <refpurpose>Enumerate frame intervals</refpurpose> | ||
10 | </refnamediv> | ||
11 | |||
12 | <refsynopsisdiv> | ||
13 | <funcsynopsis> | ||
14 | <funcprototype> | ||
15 | <funcdef>int <function>ioctl</function></funcdef> | ||
16 | <paramdef>int <parameter>fd</parameter></paramdef> | ||
17 | <paramdef>int <parameter>request</parameter></paramdef> | ||
18 | <paramdef>struct v4l2_subdev_frame_interval_enum * | ||
19 | <parameter>argp</parameter></paramdef> | ||
20 | </funcprototype> | ||
21 | </funcsynopsis> | ||
22 | </refsynopsisdiv> | ||
23 | |||
24 | <refsect1> | ||
25 | <title>Arguments</title> | ||
26 | |||
27 | <variablelist> | ||
28 | <varlistentry> | ||
29 | <term><parameter>fd</parameter></term> | ||
30 | <listitem> | ||
31 | <para>&fd;</para> | ||
32 | </listitem> | ||
33 | </varlistentry> | ||
34 | <varlistentry> | ||
35 | <term><parameter>request</parameter></term> | ||
36 | <listitem> | ||
37 | <para>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</para> | ||
38 | </listitem> | ||
39 | </varlistentry> | ||
40 | <varlistentry> | ||
41 | <term><parameter>argp</parameter></term> | ||
42 | <listitem> | ||
43 | <para></para> | ||
44 | </listitem> | ||
45 | </varlistentry> | ||
46 | </variablelist> | ||
47 | </refsect1> | ||
48 | |||
49 | <refsect1> | ||
50 | <title>Description</title> | ||
51 | |||
52 | <note> | ||
53 | <title>Experimental</title> | ||
54 | <para>This is an <link linkend="experimental">experimental</link> | ||
55 | interface and may change in the future.</para> | ||
56 | </note> | ||
57 | |||
58 | <para>This ioctl lets applications enumerate available frame intervals on a | ||
59 | given sub-device pad. Frame intervals only makes sense for sub-devices that | ||
60 | can control the frame period on their own. This includes, for instance, | ||
61 | image sensors and TV tuners.</para> | ||
62 | |||
63 | <para>For the common use case of image sensors, the frame intervals | ||
64 | available on the sub-device output pad depend on the frame format and size | ||
65 | on the same pad. Applications must thus specify the desired format and size | ||
66 | when enumerating frame intervals.</para> | ||
67 | |||
68 | <para>To enumerate frame intervals applications initialize the | ||
69 | <structfield>index</structfield>, <structfield>pad</structfield>, | ||
70 | <structfield>code</structfield>, <structfield>width</structfield> and | ||
71 | <structfield>height</structfield> fields of | ||
72 | &v4l2-subdev-frame-interval-enum; and call the | ||
73 | <constant>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</constant> ioctl with a pointer | ||
74 | to this structure. Drivers fill the rest of the structure or return | ||
75 | an &EINVAL; if one of the input fields is invalid. All frame intervals are | ||
76 | enumerable by beginning at index zero and incrementing by one until | ||
77 | <errorcode>EINVAL</errorcode> is returned.</para> | ||
78 | |||
79 | <para>Available frame intervals may depend on the current 'try' formats | ||
80 | at other pads of the sub-device, as well as on the current active links. See | ||
81 | &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para> | ||
82 | |||
83 | <para>Sub-devices that support the frame interval enumeration ioctl should | ||
84 | implemented it on a single pad only. Its behaviour when supported on | ||
85 | multiple pads of the same sub-device is not defined.</para> | ||
86 | |||
87 | <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval-enum"> | ||
88 | <title>struct <structname>v4l2_subdev_frame_interval_enum</structname></title> | ||
89 | <tgroup cols="3"> | ||
90 | &cs-str; | ||
91 | <tbody valign="top"> | ||
92 | <row> | ||
93 | <entry>__u32</entry> | ||
94 | <entry><structfield>index</structfield></entry> | ||
95 | <entry>Number of the format in the enumeration, set by the | ||
96 | application.</entry> | ||
97 | </row> | ||
98 | <row> | ||
99 | <entry>__u32</entry> | ||
100 | <entry><structfield>pad</structfield></entry> | ||
101 | <entry>Pad number as reported by the media controller API.</entry> | ||
102 | </row> | ||
103 | <row> | ||
104 | <entry>__u32</entry> | ||
105 | <entry><structfield>code</structfield></entry> | ||
106 | <entry>The media bus format code, as defined in | ||
107 | <xref linkend="v4l2-mbus-format" />.</entry> | ||
108 | </row> | ||
109 | <row> | ||
110 | <entry>__u32</entry> | ||
111 | <entry><structfield>width</structfield></entry> | ||
112 | <entry>Frame width, in pixels.</entry> | ||
113 | </row> | ||
114 | <row> | ||
115 | <entry>__u32</entry> | ||
116 | <entry><structfield>height</structfield></entry> | ||
117 | <entry>Frame height, in pixels.</entry> | ||
118 | </row> | ||
119 | <row> | ||
120 | <entry>&v4l2-fract;</entry> | ||
121 | <entry><structfield>interval</structfield></entry> | ||
122 | <entry>Period, in seconds, between consecutive video frames.</entry> | ||
123 | </row> | ||
124 | <row> | ||
125 | <entry>__u32</entry> | ||
126 | <entry><structfield>reserved</structfield>[9]</entry> | ||
127 | <entry>Reserved for future extensions. Applications and drivers must | ||
128 | set the array to zero.</entry> | ||
129 | </row> | ||
130 | </tbody> | ||
131 | </tgroup> | ||
132 | </table> | ||
133 | </refsect1> | ||
134 | |||
135 | <refsect1> | ||
136 | &return-value; | ||
137 | |||
138 | <variablelist> | ||
139 | <varlistentry> | ||
140 | <term><errorcode>EINVAL</errorcode></term> | ||
141 | <listitem> | ||
142 | <para>The &v4l2-subdev-frame-interval-enum; | ||
143 | <structfield>pad</structfield> references a non-existing pad, one of | ||
144 | the <structfield>code</structfield>, <structfield>width</structfield> | ||
145 | or <structfield>height</structfield> fields are invalid for the given | ||
146 | pad or the <structfield>index</structfield> field is out of bounds. | ||
147 | </para> | ||
148 | </listitem> | ||
149 | </varlistentry> | ||
150 | </variablelist> | ||
151 | </refsect1> | ||
152 | </refentry> | ||
153 |
Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
File was created | 1 | <refentry id="vidioc-subdev-g-frame-interval"> | |
2 | <refmeta> | ||
3 | <refentrytitle>ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</refentrytitle> | ||
4 | &manvol; | ||
5 | </refmeta> | ||
6 | |||
7 | <refnamediv> | ||
8 | <refname>VIDIOC_SUBDEV_G_FRAME_INTERVAL</refname> | ||
9 | <refname>VIDIOC_SUBDEV_S_FRAME_INTERVAL</refname> | ||
10 | <refpurpose>Get or set the frame interval on a subdev pad</refpurpose> | ||
11 | </refnamediv> | ||
12 | |||
13 | <refsynopsisdiv> | ||
14 | <funcsynopsis> | ||
15 | <funcprototype> | ||
16 | <funcdef>int <function>ioctl</function></funcdef> | ||
17 | <paramdef>int <parameter>fd</parameter></paramdef> | ||
18 | <paramdef>int <parameter>request</parameter></paramdef> | ||
19 | <paramdef>struct v4l2_subdev_frame_interval *<parameter>argp</parameter> | ||
20 | </paramdef> | ||
21 | </funcprototype> | ||
22 | </funcsynopsis> | ||
23 | </refsynopsisdiv> | ||
24 | |||
25 | <refsect1> | ||
26 | <title>Arguments</title> | ||
27 | |||
28 | <variablelist> | ||
29 | <varlistentry> | ||
30 | <term><parameter>fd</parameter></term> | ||
31 | <listitem> | ||
32 | <para>&fd;</para> | ||
33 | </listitem> | ||
34 | </varlistentry> | ||
35 | <varlistentry> | ||
36 | <term><parameter>request</parameter></term> | ||
37 | <listitem> | ||
38 | <para>VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</para> | ||
39 | </listitem> | ||
40 | </varlistentry> | ||
41 | <varlistentry> | ||
42 | <term><parameter>argp</parameter></term> | ||
43 | <listitem> | ||
44 | <para></para> | ||
45 | </listitem> | ||
46 | </varlistentry> | ||
47 | </variablelist> | ||
48 | </refsect1> | ||
49 | |||
50 | <refsect1> | ||
51 | <title>Description</title> | ||
52 | |||
53 | <note> | ||
54 | <title>Experimental</title> | ||
55 | <para>This is an <link linkend="experimental">experimental</link> | ||
56 | interface and may change in the future.</para> | ||
57 | </note> | ||
58 | |||
59 | <para>These ioctls are used to get and set the frame interval at specific | ||
60 | subdev pads in the image pipeline. The frame interval only makes sense for | ||
61 | sub-devices that can control the frame period on their own. This includes, | ||
62 | for instance, image sensors and TV tuners. Sub-devices that don't support | ||
63 | frame intervals must not implement these ioctls.</para> | ||
64 | |||
65 | <para>To retrieve the current frame interval applications set the | ||
66 | <structfield>pad</structfield> field of a &v4l2-subdev-frame-interval; to | ||
67 | the desired pad number as reported by the media controller API. When they | ||
68 | call the <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> ioctl with a | ||
69 | pointer to this structure the driver fills the members of the | ||
70 | <structfield>interval</structfield> field.</para> | ||
71 | |||
72 | <para>To change the current frame interval applications set both the | ||
73 | <structfield>pad</structfield> field and all members of the | ||
74 | <structfield>interval</structfield> field. When they call the | ||
75 | <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant> ioctl with a pointer to | ||
76 | this structure the driver verifies the requested interval, adjusts it based | ||
77 | on the hardware capabilities and configures the device. Upon return the | ||
78 | &v4l2-subdev-frame-interval; contains the current frame interval as would be | ||
79 | returned by a <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> call. | ||
80 | </para> | ||
81 | |||
82 | <para>Drivers must not return an error solely because the requested interval | ||
83 | doesn't match the device capabilities. They must instead modify the interval | ||
84 | to match what the hardware can provide. The modified interval should be as | ||
85 | close as possible to the original request.</para> | ||
86 | |||
87 | <para>Sub-devices that support the frame interval ioctls should implement | ||
88 | them on a single pad only. Their behaviour when supported on multiple pads | ||
89 | of the same sub-device is not defined.</para> | ||
90 | |||
91 | <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval"> | ||
92 | <title>struct <structname>v4l2_subdev_frame_interval</structname></title> | ||
93 | <tgroup cols="3"> | ||
94 | &cs-str; | ||
95 | <tbody valign="top"> | ||
96 | <row> | ||
97 | <entry>__u32</entry> | ||
98 | <entry><structfield>pad</structfield></entry> | ||
99 | <entry>Pad number as reported by the media controller API.</entry> | ||
100 | </row> | ||
101 | <row> | ||
102 | <entry>&v4l2-fract;</entry> | ||
103 | <entry><structfield>interval</structfield></entry> | ||
104 | <entry>Period, in seconds, between consecutive video frames.</entry> | ||
105 | </row> | ||
106 | <row> | ||
107 | <entry>__u32</entry> | ||
108 | <entry><structfield>reserved</structfield>[9]</entry> | ||
109 | <entry>Reserved for future extensions. Applications and drivers must | ||
110 | set the array to zero.</entry> | ||
111 | </row> | ||
112 | </tbody> | ||
113 | </tgroup> | ||
114 | </table> | ||
115 | </refsect1> | ||
116 | |||
117 | <refsect1> | ||
118 | &return-value; | ||
119 | |||
120 | <variablelist> | ||
121 | <varlistentry> | ||
122 | <term><errorcode>EBUSY</errorcode></term> | ||
123 | <listitem> | ||
124 | <para>The frame interval can't be changed because the pad is currently | ||
125 | busy. This can be caused, for instance, by an active video stream on | ||
126 | the pad. The ioctl must not be retried without performing another | ||
127 | action to fix the problem first. Only returned by | ||
128 | <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></para> | ||
129 | </listitem> | ||
130 | </varlistentry> | ||
131 | <varlistentry> | ||
132 | <term><errorcode>EINVAL</errorcode></term> | ||
133 | <listitem> | ||
134 | <para>The &v4l2-subdev-frame-interval; <structfield>pad</structfield> | ||
135 | references a non-existing pad, or the pad doesn't support frame | ||
136 | intervals.</para> | ||
137 | </listitem> | ||
138 | </varlistentry> | ||
139 | </variablelist> | ||
140 | </refsect1> | ||
141 | </refentry> | ||
142 |
drivers/media/video/v4l2-subdev.c
1 | /* | 1 | /* |
2 | * V4L2 sub-device | 2 | * V4L2 sub-device |
3 | * | 3 | * |
4 | * Copyright (C) 2010 Nokia Corporation | 4 | * Copyright (C) 2010 Nokia Corporation |
5 | * | 5 | * |
6 | * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 6 | * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
7 | * Sakari Ailus <sakari.ailus@iki.fi> | 7 | * Sakari Ailus <sakari.ailus@iki.fi> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | * | 12 | * |
13 | * This program is distributed in the hope that it will be useful, | 13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. | 16 | * GNU General Public License for more details. |
17 | * | 17 | * |
18 | * You should have received a copy of the GNU General Public License | 18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software | 19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #include <linux/ioctl.h> | 23 | #include <linux/ioctl.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
26 | #include <linux/videodev2.h> | 26 | #include <linux/videodev2.h> |
27 | 27 | ||
28 | #include <media/v4l2-ctrls.h> | 28 | #include <media/v4l2-ctrls.h> |
29 | #include <media/v4l2-device.h> | 29 | #include <media/v4l2-device.h> |
30 | #include <media/v4l2-ioctl.h> | 30 | #include <media/v4l2-ioctl.h> |
31 | #include <media/v4l2-fh.h> | 31 | #include <media/v4l2-fh.h> |
32 | #include <media/v4l2-event.h> | 32 | #include <media/v4l2-event.h> |
33 | 33 | ||
34 | static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd) | 34 | static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd) |
35 | { | 35 | { |
36 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 36 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
37 | /* Allocate try format and crop in the same memory block */ | 37 | /* Allocate try format and crop in the same memory block */ |
38 | fh->try_fmt = kzalloc((sizeof(*fh->try_fmt) + sizeof(*fh->try_crop)) | 38 | fh->try_fmt = kzalloc((sizeof(*fh->try_fmt) + sizeof(*fh->try_crop)) |
39 | * sd->entity.num_pads, GFP_KERNEL); | 39 | * sd->entity.num_pads, GFP_KERNEL); |
40 | if (fh->try_fmt == NULL) | 40 | if (fh->try_fmt == NULL) |
41 | return -ENOMEM; | 41 | return -ENOMEM; |
42 | 42 | ||
43 | fh->try_crop = (struct v4l2_rect *) | 43 | fh->try_crop = (struct v4l2_rect *) |
44 | (fh->try_fmt + sd->entity.num_pads); | 44 | (fh->try_fmt + sd->entity.num_pads); |
45 | #endif | 45 | #endif |
46 | return 0; | 46 | return 0; |
47 | } | 47 | } |
48 | 48 | ||
49 | static void subdev_fh_free(struct v4l2_subdev_fh *fh) | 49 | static void subdev_fh_free(struct v4l2_subdev_fh *fh) |
50 | { | 50 | { |
51 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 51 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
52 | kfree(fh->try_fmt); | 52 | kfree(fh->try_fmt); |
53 | fh->try_fmt = NULL; | 53 | fh->try_fmt = NULL; |
54 | fh->try_crop = NULL; | 54 | fh->try_crop = NULL; |
55 | #endif | 55 | #endif |
56 | } | 56 | } |
57 | 57 | ||
58 | static int subdev_open(struct file *file) | 58 | static int subdev_open(struct file *file) |
59 | { | 59 | { |
60 | struct video_device *vdev = video_devdata(file); | 60 | struct video_device *vdev = video_devdata(file); |
61 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); | 61 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); |
62 | struct v4l2_subdev_fh *subdev_fh; | 62 | struct v4l2_subdev_fh *subdev_fh; |
63 | #if defined(CONFIG_MEDIA_CONTROLLER) | 63 | #if defined(CONFIG_MEDIA_CONTROLLER) |
64 | struct media_entity *entity = NULL; | 64 | struct media_entity *entity = NULL; |
65 | #endif | 65 | #endif |
66 | int ret; | 66 | int ret; |
67 | 67 | ||
68 | subdev_fh = kzalloc(sizeof(*subdev_fh), GFP_KERNEL); | 68 | subdev_fh = kzalloc(sizeof(*subdev_fh), GFP_KERNEL); |
69 | if (subdev_fh == NULL) | 69 | if (subdev_fh == NULL) |
70 | return -ENOMEM; | 70 | return -ENOMEM; |
71 | 71 | ||
72 | ret = subdev_fh_init(subdev_fh, sd); | 72 | ret = subdev_fh_init(subdev_fh, sd); |
73 | if (ret) { | 73 | if (ret) { |
74 | kfree(subdev_fh); | 74 | kfree(subdev_fh); |
75 | return ret; | 75 | return ret; |
76 | } | 76 | } |
77 | 77 | ||
78 | ret = v4l2_fh_init(&subdev_fh->vfh, vdev); | 78 | ret = v4l2_fh_init(&subdev_fh->vfh, vdev); |
79 | if (ret) | 79 | if (ret) |
80 | goto err; | 80 | goto err; |
81 | 81 | ||
82 | if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) { | 82 | if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) { |
83 | ret = v4l2_event_init(&subdev_fh->vfh); | 83 | ret = v4l2_event_init(&subdev_fh->vfh); |
84 | if (ret) | 84 | if (ret) |
85 | goto err; | 85 | goto err; |
86 | 86 | ||
87 | ret = v4l2_event_alloc(&subdev_fh->vfh, sd->nevents); | 87 | ret = v4l2_event_alloc(&subdev_fh->vfh, sd->nevents); |
88 | if (ret) | 88 | if (ret) |
89 | goto err; | 89 | goto err; |
90 | } | 90 | } |
91 | 91 | ||
92 | v4l2_fh_add(&subdev_fh->vfh); | 92 | v4l2_fh_add(&subdev_fh->vfh); |
93 | file->private_data = &subdev_fh->vfh; | 93 | file->private_data = &subdev_fh->vfh; |
94 | #if defined(CONFIG_MEDIA_CONTROLLER) | 94 | #if defined(CONFIG_MEDIA_CONTROLLER) |
95 | if (sd->v4l2_dev->mdev) { | 95 | if (sd->v4l2_dev->mdev) { |
96 | entity = media_entity_get(&sd->entity); | 96 | entity = media_entity_get(&sd->entity); |
97 | if (!entity) { | 97 | if (!entity) { |
98 | ret = -EBUSY; | 98 | ret = -EBUSY; |
99 | goto err; | 99 | goto err; |
100 | } | 100 | } |
101 | } | 101 | } |
102 | #endif | 102 | #endif |
103 | 103 | ||
104 | if (sd->internal_ops && sd->internal_ops->open) { | 104 | if (sd->internal_ops && sd->internal_ops->open) { |
105 | ret = sd->internal_ops->open(sd, subdev_fh); | 105 | ret = sd->internal_ops->open(sd, subdev_fh); |
106 | if (ret < 0) | 106 | if (ret < 0) |
107 | goto err; | 107 | goto err; |
108 | } | 108 | } |
109 | 109 | ||
110 | return 0; | 110 | return 0; |
111 | 111 | ||
112 | err: | 112 | err: |
113 | #if defined(CONFIG_MEDIA_CONTROLLER) | 113 | #if defined(CONFIG_MEDIA_CONTROLLER) |
114 | if (entity) | 114 | if (entity) |
115 | media_entity_put(entity); | 115 | media_entity_put(entity); |
116 | #endif | 116 | #endif |
117 | v4l2_fh_del(&subdev_fh->vfh); | 117 | v4l2_fh_del(&subdev_fh->vfh); |
118 | v4l2_fh_exit(&subdev_fh->vfh); | 118 | v4l2_fh_exit(&subdev_fh->vfh); |
119 | subdev_fh_free(subdev_fh); | 119 | subdev_fh_free(subdev_fh); |
120 | kfree(subdev_fh); | 120 | kfree(subdev_fh); |
121 | 121 | ||
122 | return ret; | 122 | return ret; |
123 | } | 123 | } |
124 | 124 | ||
125 | static int subdev_close(struct file *file) | 125 | static int subdev_close(struct file *file) |
126 | { | 126 | { |
127 | struct video_device *vdev = video_devdata(file); | 127 | struct video_device *vdev = video_devdata(file); |
128 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); | 128 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); |
129 | struct v4l2_fh *vfh = file->private_data; | 129 | struct v4l2_fh *vfh = file->private_data; |
130 | struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh); | 130 | struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh); |
131 | 131 | ||
132 | if (sd->internal_ops && sd->internal_ops->close) | 132 | if (sd->internal_ops && sd->internal_ops->close) |
133 | sd->internal_ops->close(sd, subdev_fh); | 133 | sd->internal_ops->close(sd, subdev_fh); |
134 | #if defined(CONFIG_MEDIA_CONTROLLER) | 134 | #if defined(CONFIG_MEDIA_CONTROLLER) |
135 | if (sd->v4l2_dev->mdev) | 135 | if (sd->v4l2_dev->mdev) |
136 | media_entity_put(&sd->entity); | 136 | media_entity_put(&sd->entity); |
137 | #endif | 137 | #endif |
138 | v4l2_fh_del(vfh); | 138 | v4l2_fh_del(vfh); |
139 | v4l2_fh_exit(vfh); | 139 | v4l2_fh_exit(vfh); |
140 | subdev_fh_free(subdev_fh); | 140 | subdev_fh_free(subdev_fh); |
141 | kfree(subdev_fh); | 141 | kfree(subdev_fh); |
142 | file->private_data = NULL; | 142 | file->private_data = NULL; |
143 | 143 | ||
144 | return 0; | 144 | return 0; |
145 | } | 145 | } |
146 | 146 | ||
147 | static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg) | 147 | static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg) |
148 | { | 148 | { |
149 | struct video_device *vdev = video_devdata(file); | 149 | struct video_device *vdev = video_devdata(file); |
150 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); | 150 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); |
151 | struct v4l2_fh *vfh = file->private_data; | 151 | struct v4l2_fh *vfh = file->private_data; |
152 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 152 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
153 | struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh); | 153 | struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh); |
154 | #endif | 154 | #endif |
155 | 155 | ||
156 | switch (cmd) { | 156 | switch (cmd) { |
157 | case VIDIOC_QUERYCTRL: | 157 | case VIDIOC_QUERYCTRL: |
158 | return v4l2_subdev_queryctrl(sd, arg); | 158 | return v4l2_subdev_queryctrl(sd, arg); |
159 | 159 | ||
160 | case VIDIOC_QUERYMENU: | 160 | case VIDIOC_QUERYMENU: |
161 | return v4l2_subdev_querymenu(sd, arg); | 161 | return v4l2_subdev_querymenu(sd, arg); |
162 | 162 | ||
163 | case VIDIOC_G_CTRL: | 163 | case VIDIOC_G_CTRL: |
164 | return v4l2_subdev_g_ctrl(sd, arg); | 164 | return v4l2_subdev_g_ctrl(sd, arg); |
165 | 165 | ||
166 | case VIDIOC_S_CTRL: | 166 | case VIDIOC_S_CTRL: |
167 | return v4l2_subdev_s_ctrl(sd, arg); | 167 | return v4l2_subdev_s_ctrl(sd, arg); |
168 | 168 | ||
169 | case VIDIOC_G_EXT_CTRLS: | 169 | case VIDIOC_G_EXT_CTRLS: |
170 | return v4l2_subdev_g_ext_ctrls(sd, arg); | 170 | return v4l2_subdev_g_ext_ctrls(sd, arg); |
171 | 171 | ||
172 | case VIDIOC_S_EXT_CTRLS: | 172 | case VIDIOC_S_EXT_CTRLS: |
173 | return v4l2_subdev_s_ext_ctrls(sd, arg); | 173 | return v4l2_subdev_s_ext_ctrls(sd, arg); |
174 | 174 | ||
175 | case VIDIOC_TRY_EXT_CTRLS: | 175 | case VIDIOC_TRY_EXT_CTRLS: |
176 | return v4l2_subdev_try_ext_ctrls(sd, arg); | 176 | return v4l2_subdev_try_ext_ctrls(sd, arg); |
177 | 177 | ||
178 | case VIDIOC_DQEVENT: | 178 | case VIDIOC_DQEVENT: |
179 | if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) | 179 | if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) |
180 | return -ENOIOCTLCMD; | 180 | return -ENOIOCTLCMD; |
181 | 181 | ||
182 | return v4l2_event_dequeue(vfh, arg, file->f_flags & O_NONBLOCK); | 182 | return v4l2_event_dequeue(vfh, arg, file->f_flags & O_NONBLOCK); |
183 | 183 | ||
184 | case VIDIOC_SUBSCRIBE_EVENT: | 184 | case VIDIOC_SUBSCRIBE_EVENT: |
185 | return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg); | 185 | return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg); |
186 | 186 | ||
187 | case VIDIOC_UNSUBSCRIBE_EVENT: | 187 | case VIDIOC_UNSUBSCRIBE_EVENT: |
188 | return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg); | 188 | return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg); |
189 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 189 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
190 | case VIDIOC_SUBDEV_G_FMT: { | 190 | case VIDIOC_SUBDEV_G_FMT: { |
191 | struct v4l2_subdev_format *format = arg; | 191 | struct v4l2_subdev_format *format = arg; |
192 | 192 | ||
193 | if (format->which != V4L2_SUBDEV_FORMAT_TRY && | 193 | if (format->which != V4L2_SUBDEV_FORMAT_TRY && |
194 | format->which != V4L2_SUBDEV_FORMAT_ACTIVE) | 194 | format->which != V4L2_SUBDEV_FORMAT_ACTIVE) |
195 | return -EINVAL; | 195 | return -EINVAL; |
196 | 196 | ||
197 | if (format->pad >= sd->entity.num_pads) | 197 | if (format->pad >= sd->entity.num_pads) |
198 | return -EINVAL; | 198 | return -EINVAL; |
199 | 199 | ||
200 | return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh, format); | 200 | return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh, format); |
201 | } | 201 | } |
202 | 202 | ||
203 | case VIDIOC_SUBDEV_S_FMT: { | 203 | case VIDIOC_SUBDEV_S_FMT: { |
204 | struct v4l2_subdev_format *format = arg; | 204 | struct v4l2_subdev_format *format = arg; |
205 | 205 | ||
206 | if (format->which != V4L2_SUBDEV_FORMAT_TRY && | 206 | if (format->which != V4L2_SUBDEV_FORMAT_TRY && |
207 | format->which != V4L2_SUBDEV_FORMAT_ACTIVE) | 207 | format->which != V4L2_SUBDEV_FORMAT_ACTIVE) |
208 | return -EINVAL; | 208 | return -EINVAL; |
209 | 209 | ||
210 | if (format->pad >= sd->entity.num_pads) | 210 | if (format->pad >= sd->entity.num_pads) |
211 | return -EINVAL; | 211 | return -EINVAL; |
212 | 212 | ||
213 | return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh, format); | 213 | return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh, format); |
214 | } | 214 | } |
215 | 215 | ||
216 | case VIDIOC_SUBDEV_ENUM_MBUS_CODE: { | 216 | case VIDIOC_SUBDEV_ENUM_MBUS_CODE: { |
217 | struct v4l2_subdev_mbus_code_enum *code = arg; | 217 | struct v4l2_subdev_mbus_code_enum *code = arg; |
218 | 218 | ||
219 | if (code->pad >= sd->entity.num_pads) | 219 | if (code->pad >= sd->entity.num_pads) |
220 | return -EINVAL; | 220 | return -EINVAL; |
221 | 221 | ||
222 | return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh, | 222 | return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh, |
223 | code); | 223 | code); |
224 | } | 224 | } |
225 | 225 | ||
226 | case VIDIOC_SUBDEV_ENUM_FRAME_SIZE: { | 226 | case VIDIOC_SUBDEV_ENUM_FRAME_SIZE: { |
227 | struct v4l2_subdev_frame_size_enum *fse = arg; | 227 | struct v4l2_subdev_frame_size_enum *fse = arg; |
228 | 228 | ||
229 | if (fse->pad >= sd->entity.num_pads) | 229 | if (fse->pad >= sd->entity.num_pads) |
230 | return -EINVAL; | 230 | return -EINVAL; |
231 | 231 | ||
232 | return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh, | 232 | return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh, |
233 | fse); | 233 | fse); |
234 | } | 234 | } |
235 | |||
236 | case VIDIOC_SUBDEV_G_FRAME_INTERVAL: | ||
237 | return v4l2_subdev_call(sd, video, g_frame_interval, arg); | ||
238 | |||
239 | case VIDIOC_SUBDEV_S_FRAME_INTERVAL: | ||
240 | return v4l2_subdev_call(sd, video, s_frame_interval, arg); | ||
241 | |||
242 | case VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL: { | ||
243 | struct v4l2_subdev_frame_interval_enum *fie = arg; | ||
244 | |||
245 | if (fie->pad >= sd->entity.num_pads) | ||
246 | return -EINVAL; | ||
247 | |||
248 | return v4l2_subdev_call(sd, pad, enum_frame_interval, subdev_fh, | ||
249 | fie); | ||
250 | } | ||
235 | #endif | 251 | #endif |
236 | default: | 252 | default: |
237 | return -ENOIOCTLCMD; | 253 | return -ENOIOCTLCMD; |
238 | } | 254 | } |
239 | 255 | ||
240 | return 0; | 256 | return 0; |
241 | } | 257 | } |
242 | 258 | ||
243 | static long subdev_ioctl(struct file *file, unsigned int cmd, | 259 | static long subdev_ioctl(struct file *file, unsigned int cmd, |
244 | unsigned long arg) | 260 | unsigned long arg) |
245 | { | 261 | { |
246 | return video_usercopy(file, cmd, arg, subdev_do_ioctl); | 262 | return video_usercopy(file, cmd, arg, subdev_do_ioctl); |
247 | } | 263 | } |
248 | 264 | ||
249 | static unsigned int subdev_poll(struct file *file, poll_table *wait) | 265 | static unsigned int subdev_poll(struct file *file, poll_table *wait) |
250 | { | 266 | { |
251 | struct video_device *vdev = video_devdata(file); | 267 | struct video_device *vdev = video_devdata(file); |
252 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); | 268 | struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev); |
253 | struct v4l2_fh *fh = file->private_data; | 269 | struct v4l2_fh *fh = file->private_data; |
254 | 270 | ||
255 | if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) | 271 | if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)) |
256 | return POLLERR; | 272 | return POLLERR; |
257 | 273 | ||
258 | poll_wait(file, &fh->events->wait, wait); | 274 | poll_wait(file, &fh->events->wait, wait); |
259 | 275 | ||
260 | if (v4l2_event_pending(fh)) | 276 | if (v4l2_event_pending(fh)) |
261 | return POLLPRI; | 277 | return POLLPRI; |
262 | 278 | ||
263 | return 0; | 279 | return 0; |
264 | } | 280 | } |
265 | 281 | ||
266 | const struct v4l2_file_operations v4l2_subdev_fops = { | 282 | const struct v4l2_file_operations v4l2_subdev_fops = { |
267 | .owner = THIS_MODULE, | 283 | .owner = THIS_MODULE, |
268 | .open = subdev_open, | 284 | .open = subdev_open, |
269 | .unlocked_ioctl = subdev_ioctl, | 285 | .unlocked_ioctl = subdev_ioctl, |
270 | .release = subdev_close, | 286 | .release = subdev_close, |
271 | .poll = subdev_poll, | 287 | .poll = subdev_poll, |
272 | }; | 288 | }; |
273 | 289 | ||
274 | void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops) | 290 | void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops) |
275 | { | 291 | { |
276 | INIT_LIST_HEAD(&sd->list); | 292 | INIT_LIST_HEAD(&sd->list); |
277 | BUG_ON(!ops); | 293 | BUG_ON(!ops); |
278 | sd->ops = ops; | 294 | sd->ops = ops; |
279 | sd->v4l2_dev = NULL; | 295 | sd->v4l2_dev = NULL; |
280 | sd->flags = 0; | 296 | sd->flags = 0; |
281 | sd->name[0] = '\0'; | 297 | sd->name[0] = '\0'; |
282 | sd->grp_id = 0; | 298 | sd->grp_id = 0; |
283 | sd->dev_priv = NULL; | 299 | sd->dev_priv = NULL; |
284 | sd->host_priv = NULL; | 300 | sd->host_priv = NULL; |
285 | #if defined(CONFIG_MEDIA_CONTROLLER) | 301 | #if defined(CONFIG_MEDIA_CONTROLLER) |
286 | sd->entity.name = sd->name; | 302 | sd->entity.name = sd->name; |
287 | sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV; | 303 | sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV; |
288 | #endif | 304 | #endif |
289 | } | 305 | } |
290 | EXPORT_SYMBOL(v4l2_subdev_init); | 306 | EXPORT_SYMBOL(v4l2_subdev_init); |
291 | 307 |
include/linux/v4l2-subdev.h
1 | /* | 1 | /* |
2 | * V4L2 subdev userspace API | 2 | * V4L2 subdev userspace API |
3 | * | 3 | * |
4 | * Copyright (C) 2010 Nokia Corporation | 4 | * Copyright (C) 2010 Nokia Corporation |
5 | * | 5 | * |
6 | * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 6 | * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
7 | * Sakari Ailus <sakari.ailus@iki.fi> | 7 | * Sakari Ailus <sakari.ailus@iki.fi> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | * | 12 | * |
13 | * This program is distributed in the hope that it will be useful, | 13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. | 16 | * GNU General Public License for more details. |
17 | * | 17 | * |
18 | * You should have received a copy of the GNU General Public License | 18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software | 19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #ifndef __LINUX_V4L2_SUBDEV_H | 23 | #ifndef __LINUX_V4L2_SUBDEV_H |
24 | #define __LINUX_V4L2_SUBDEV_H | 24 | #define __LINUX_V4L2_SUBDEV_H |
25 | 25 | ||
26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
28 | #include <linux/v4l2-mediabus.h> | 28 | #include <linux/v4l2-mediabus.h> |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * enum v4l2_subdev_format_whence - Media bus format type | 31 | * enum v4l2_subdev_format_whence - Media bus format type |
32 | * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only | 32 | * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only |
33 | * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device | 33 | * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device |
34 | */ | 34 | */ |
35 | enum v4l2_subdev_format_whence { | 35 | enum v4l2_subdev_format_whence { |
36 | V4L2_SUBDEV_FORMAT_TRY = 0, | 36 | V4L2_SUBDEV_FORMAT_TRY = 0, |
37 | V4L2_SUBDEV_FORMAT_ACTIVE = 1, | 37 | V4L2_SUBDEV_FORMAT_ACTIVE = 1, |
38 | }; | 38 | }; |
39 | 39 | ||
40 | /** | 40 | /** |
41 | * struct v4l2_subdev_format - Pad-level media bus format | 41 | * struct v4l2_subdev_format - Pad-level media bus format |
42 | * @which: format type (from enum v4l2_subdev_format_whence) | 42 | * @which: format type (from enum v4l2_subdev_format_whence) |
43 | * @pad: pad number, as reported by the media API | 43 | * @pad: pad number, as reported by the media API |
44 | * @format: media bus format (format code and frame size) | 44 | * @format: media bus format (format code and frame size) |
45 | */ | 45 | */ |
46 | struct v4l2_subdev_format { | 46 | struct v4l2_subdev_format { |
47 | __u32 which; | 47 | __u32 which; |
48 | __u32 pad; | 48 | __u32 pad; |
49 | struct v4l2_mbus_framefmt format; | 49 | struct v4l2_mbus_framefmt format; |
50 | __u32 reserved[8]; | 50 | __u32 reserved[8]; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | /** | 53 | /** |
54 | * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration | 54 | * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration |
55 | * @pad: pad number, as reported by the media API | 55 | * @pad: pad number, as reported by the media API |
56 | * @index: format index during enumeration | 56 | * @index: format index during enumeration |
57 | * @code: format code (from enum v4l2_mbus_pixelcode) | 57 | * @code: format code (from enum v4l2_mbus_pixelcode) |
58 | */ | 58 | */ |
59 | struct v4l2_subdev_mbus_code_enum { | 59 | struct v4l2_subdev_mbus_code_enum { |
60 | __u32 pad; | 60 | __u32 pad; |
61 | __u32 index; | 61 | __u32 index; |
62 | __u32 code; | 62 | __u32 code; |
63 | __u32 reserved[9]; | 63 | __u32 reserved[9]; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | /** | 66 | /** |
67 | * struct v4l2_subdev_frame_size_enum - Media bus format enumeration | 67 | * struct v4l2_subdev_frame_size_enum - Media bus format enumeration |
68 | * @pad: pad number, as reported by the media API | 68 | * @pad: pad number, as reported by the media API |
69 | * @index: format index during enumeration | 69 | * @index: format index during enumeration |
70 | * @code: format code (from enum v4l2_mbus_pixelcode) | 70 | * @code: format code (from enum v4l2_mbus_pixelcode) |
71 | */ | 71 | */ |
72 | struct v4l2_subdev_frame_size_enum { | 72 | struct v4l2_subdev_frame_size_enum { |
73 | __u32 index; | 73 | __u32 index; |
74 | __u32 pad; | 74 | __u32 pad; |
75 | __u32 code; | 75 | __u32 code; |
76 | __u32 min_width; | 76 | __u32 min_width; |
77 | __u32 max_width; | 77 | __u32 max_width; |
78 | __u32 min_height; | 78 | __u32 min_height; |
79 | __u32 max_height; | 79 | __u32 max_height; |
80 | __u32 reserved[9]; | 80 | __u32 reserved[9]; |
81 | }; | 81 | }; |
82 | 82 | ||
83 | /** | ||
84 | * struct v4l2_subdev_frame_interval - Pad-level frame rate | ||
85 | * @pad: pad number, as reported by the media API | ||
86 | * @interval: frame interval in seconds | ||
87 | */ | ||
88 | struct v4l2_subdev_frame_interval { | ||
89 | __u32 pad; | ||
90 | struct v4l2_fract interval; | ||
91 | __u32 reserved[9]; | ||
92 | }; | ||
93 | |||
94 | /** | ||
95 | * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration | ||
96 | * @pad: pad number, as reported by the media API | ||
97 | * @index: frame interval index during enumeration | ||
98 | * @code: format code (from enum v4l2_mbus_pixelcode) | ||
99 | * @width: frame width in pixels | ||
100 | * @height: frame height in pixels | ||
101 | * @interval: frame interval in seconds | ||
102 | */ | ||
103 | struct v4l2_subdev_frame_interval_enum { | ||
104 | __u32 index; | ||
105 | __u32 pad; | ||
106 | __u32 code; | ||
107 | __u32 width; | ||
108 | __u32 height; | ||
109 | struct v4l2_fract interval; | ||
110 | __u32 reserved[9]; | ||
111 | }; | ||
112 | |||
83 | #define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) | 113 | #define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format) |
84 | #define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) | 114 | #define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format) |
115 | #define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ | ||
116 | _IOWR('V', 21, struct v4l2_subdev_frame_interval) | ||
117 | #define VIDIOC_SUBDEV_S_FRAME_INTERVAL \ | ||
118 | _IOWR('V', 22, struct v4l2_subdev_frame_interval) | ||
85 | #define VIDIOC_SUBDEV_ENUM_MBUS_CODE \ | 119 | #define VIDIOC_SUBDEV_ENUM_MBUS_CODE \ |
86 | _IOWR('V', 2, struct v4l2_subdev_mbus_code_enum) | 120 | _IOWR('V', 2, struct v4l2_subdev_mbus_code_enum) |
87 | #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ | 121 | #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ |
88 | _IOWR('V', 74, struct v4l2_subdev_frame_size_enum) | 122 | _IOWR('V', 74, struct v4l2_subdev_frame_size_enum) |
123 | #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ | ||
124 | _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) | ||
89 | 125 | ||
90 | #endif | 126 | #endif |
91 | 127 |
include/media/v4l2-subdev.h
1 | /* | 1 | /* |
2 | V4L2 sub-device support header. | 2 | V4L2 sub-device support header. |
3 | 3 | ||
4 | Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl> | 4 | Copyright (C) 2008 Hans Verkuil <hverkuil@xs4all.nl> |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by | 7 | it under the terms of the GNU General Public License as published by |
8 | the Free Software Foundation; either version 2 of the License, or | 8 | the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software | 17 | along with this program; if not, write to the Free Software |
18 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef _V4L2_SUBDEV_H | 21 | #ifndef _V4L2_SUBDEV_H |
22 | #define _V4L2_SUBDEV_H | 22 | #define _V4L2_SUBDEV_H |
23 | 23 | ||
24 | #include <linux/v4l2-subdev.h> | 24 | #include <linux/v4l2-subdev.h> |
25 | #include <media/media-entity.h> | 25 | #include <media/media-entity.h> |
26 | #include <media/v4l2-common.h> | 26 | #include <media/v4l2-common.h> |
27 | #include <media/v4l2-dev.h> | 27 | #include <media/v4l2-dev.h> |
28 | #include <media/v4l2-fh.h> | 28 | #include <media/v4l2-fh.h> |
29 | #include <media/v4l2-mediabus.h> | 29 | #include <media/v4l2-mediabus.h> |
30 | 30 | ||
31 | /* generic v4l2_device notify callback notification values */ | 31 | /* generic v4l2_device notify callback notification values */ |
32 | #define V4L2_SUBDEV_IR_RX_NOTIFY _IOW('v', 0, u32) | 32 | #define V4L2_SUBDEV_IR_RX_NOTIFY _IOW('v', 0, u32) |
33 | #define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ 0x00000001 | 33 | #define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ 0x00000001 |
34 | #define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED 0x00000002 | 34 | #define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED 0x00000002 |
35 | #define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN 0x00000004 | 35 | #define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN 0x00000004 |
36 | #define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN 0x00000008 | 36 | #define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN 0x00000008 |
37 | 37 | ||
38 | #define V4L2_SUBDEV_IR_TX_NOTIFY _IOW('v', 1, u32) | 38 | #define V4L2_SUBDEV_IR_TX_NOTIFY _IOW('v', 1, u32) |
39 | #define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ 0x00000001 | 39 | #define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ 0x00000001 |
40 | 40 | ||
41 | struct v4l2_device; | 41 | struct v4l2_device; |
42 | struct v4l2_ctrl_handler; | 42 | struct v4l2_ctrl_handler; |
43 | struct v4l2_event_subscription; | 43 | struct v4l2_event_subscription; |
44 | struct v4l2_fh; | 44 | struct v4l2_fh; |
45 | struct v4l2_subdev; | 45 | struct v4l2_subdev; |
46 | struct v4l2_subdev_fh; | 46 | struct v4l2_subdev_fh; |
47 | struct tuner_setup; | 47 | struct tuner_setup; |
48 | 48 | ||
49 | /* decode_vbi_line */ | 49 | /* decode_vbi_line */ |
50 | struct v4l2_decode_vbi_line { | 50 | struct v4l2_decode_vbi_line { |
51 | u32 is_second_field; /* Set to 0 for the first (odd) field, | 51 | u32 is_second_field; /* Set to 0 for the first (odd) field, |
52 | set to 1 for the second (even) field. */ | 52 | set to 1 for the second (even) field. */ |
53 | u8 *p; /* Pointer to the sliced VBI data from the decoder. | 53 | u8 *p; /* Pointer to the sliced VBI data from the decoder. |
54 | On exit points to the start of the payload. */ | 54 | On exit points to the start of the payload. */ |
55 | u32 line; /* Line number of the sliced VBI data (1-23) */ | 55 | u32 line; /* Line number of the sliced VBI data (1-23) */ |
56 | u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ | 56 | u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ |
57 | }; | 57 | }; |
58 | 58 | ||
59 | /* Sub-devices are devices that are connected somehow to the main bridge | 59 | /* Sub-devices are devices that are connected somehow to the main bridge |
60 | device. These devices are usually audio/video muxers/encoders/decoders or | 60 | device. These devices are usually audio/video muxers/encoders/decoders or |
61 | sensors and webcam controllers. | 61 | sensors and webcam controllers. |
62 | 62 | ||
63 | Usually these devices are controlled through an i2c bus, but other busses | 63 | Usually these devices are controlled through an i2c bus, but other busses |
64 | may also be used. | 64 | may also be used. |
65 | 65 | ||
66 | The v4l2_subdev struct provides a way of accessing these devices in a | 66 | The v4l2_subdev struct provides a way of accessing these devices in a |
67 | generic manner. Most operations that these sub-devices support fall in | 67 | generic manner. Most operations that these sub-devices support fall in |
68 | a few categories: core ops, audio ops, video ops and tuner ops. | 68 | a few categories: core ops, audio ops, video ops and tuner ops. |
69 | 69 | ||
70 | More categories can be added if needed, although this should remain a | 70 | More categories can be added if needed, although this should remain a |
71 | limited set (no more than approx. 8 categories). | 71 | limited set (no more than approx. 8 categories). |
72 | 72 | ||
73 | Each category has its own set of ops that subdev drivers can implement. | 73 | Each category has its own set of ops that subdev drivers can implement. |
74 | 74 | ||
75 | A subdev driver can leave the pointer to the category ops NULL if | 75 | A subdev driver can leave the pointer to the category ops NULL if |
76 | it does not implement them (e.g. an audio subdev will generally not | 76 | it does not implement them (e.g. an audio subdev will generally not |
77 | implement the video category ops). The exception is the core category: | 77 | implement the video category ops). The exception is the core category: |
78 | this must always be present. | 78 | this must always be present. |
79 | 79 | ||
80 | These ops are all used internally so it is no problem to change, remove | 80 | These ops are all used internally so it is no problem to change, remove |
81 | or add ops or move ops from one to another category. Currently these | 81 | or add ops or move ops from one to another category. Currently these |
82 | ops are based on the original ioctls, but since ops are not limited to | 82 | ops are based on the original ioctls, but since ops are not limited to |
83 | one argument there is room for improvement here once all i2c subdev | 83 | one argument there is room for improvement here once all i2c subdev |
84 | drivers are converted to use these ops. | 84 | drivers are converted to use these ops. |
85 | */ | 85 | */ |
86 | 86 | ||
87 | /* Core ops: it is highly recommended to implement at least these ops: | 87 | /* Core ops: it is highly recommended to implement at least these ops: |
88 | 88 | ||
89 | g_chip_ident | 89 | g_chip_ident |
90 | log_status | 90 | log_status |
91 | g_register | 91 | g_register |
92 | s_register | 92 | s_register |
93 | 93 | ||
94 | This provides basic debugging support. | 94 | This provides basic debugging support. |
95 | 95 | ||
96 | The ioctl ops is meant for generic ioctl-like commands. Depending on | 96 | The ioctl ops is meant for generic ioctl-like commands. Depending on |
97 | the use-case it might be better to use subdev-specific ops (currently | 97 | the use-case it might be better to use subdev-specific ops (currently |
98 | not yet implemented) since ops provide proper type-checking. | 98 | not yet implemented) since ops provide proper type-checking. |
99 | */ | 99 | */ |
100 | 100 | ||
101 | /* Subdevice external IO pin configuration */ | 101 | /* Subdevice external IO pin configuration */ |
102 | #define V4L2_SUBDEV_IO_PIN_DISABLE (1 << 0) /* ENABLE assumed */ | 102 | #define V4L2_SUBDEV_IO_PIN_DISABLE (1 << 0) /* ENABLE assumed */ |
103 | #define V4L2_SUBDEV_IO_PIN_OUTPUT (1 << 1) | 103 | #define V4L2_SUBDEV_IO_PIN_OUTPUT (1 << 1) |
104 | #define V4L2_SUBDEV_IO_PIN_INPUT (1 << 2) | 104 | #define V4L2_SUBDEV_IO_PIN_INPUT (1 << 2) |
105 | #define V4L2_SUBDEV_IO_PIN_SET_VALUE (1 << 3) /* Set output value */ | 105 | #define V4L2_SUBDEV_IO_PIN_SET_VALUE (1 << 3) /* Set output value */ |
106 | #define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW (1 << 4) /* ACTIVE HIGH assumed */ | 106 | #define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW (1 << 4) /* ACTIVE HIGH assumed */ |
107 | 107 | ||
108 | struct v4l2_subdev_io_pin_config { | 108 | struct v4l2_subdev_io_pin_config { |
109 | u32 flags; /* V4L2_SUBDEV_IO_PIN_* flags for this pin's config */ | 109 | u32 flags; /* V4L2_SUBDEV_IO_PIN_* flags for this pin's config */ |
110 | u8 pin; /* Chip external IO pin to configure */ | 110 | u8 pin; /* Chip external IO pin to configure */ |
111 | u8 function; /* Internal signal pad/function to route to IO pin */ | 111 | u8 function; /* Internal signal pad/function to route to IO pin */ |
112 | u8 value; /* Initial value for pin - e.g. GPIO output value */ | 112 | u8 value; /* Initial value for pin - e.g. GPIO output value */ |
113 | u8 strength; /* Pin drive strength */ | 113 | u8 strength; /* Pin drive strength */ |
114 | }; | 114 | }; |
115 | 115 | ||
116 | /* | 116 | /* |
117 | s_io_pin_config: configure one or more chip I/O pins for chips that | 117 | s_io_pin_config: configure one or more chip I/O pins for chips that |
118 | multiplex different internal signal pads out to IO pins. This function | 118 | multiplex different internal signal pads out to IO pins. This function |
119 | takes a pointer to an array of 'n' pin configuration entries, one for | 119 | takes a pointer to an array of 'n' pin configuration entries, one for |
120 | each pin being configured. This function could be called at times | 120 | each pin being configured. This function could be called at times |
121 | other than just subdevice initialization. | 121 | other than just subdevice initialization. |
122 | 122 | ||
123 | init: initialize the sensor registors to some sort of reasonable default | 123 | init: initialize the sensor registors to some sort of reasonable default |
124 | values. Do not use for new drivers and should be removed in existing | 124 | values. Do not use for new drivers and should be removed in existing |
125 | drivers. | 125 | drivers. |
126 | 126 | ||
127 | load_fw: load firmware. | 127 | load_fw: load firmware. |
128 | 128 | ||
129 | reset: generic reset command. The argument selects which subsystems to | 129 | reset: generic reset command. The argument selects which subsystems to |
130 | reset. Passing 0 will always reset the whole chip. Do not use for new | 130 | reset. Passing 0 will always reset the whole chip. Do not use for new |
131 | drivers without discussing this first on the linux-media mailinglist. | 131 | drivers without discussing this first on the linux-media mailinglist. |
132 | There should be no reason normally to reset a device. | 132 | There should be no reason normally to reset a device. |
133 | 133 | ||
134 | s_gpio: set GPIO pins. Very simple right now, might need to be extended with | 134 | s_gpio: set GPIO pins. Very simple right now, might need to be extended with |
135 | a direction argument if needed. | 135 | a direction argument if needed. |
136 | 136 | ||
137 | s_power: puts subdevice in power saving mode (on == 0) or normal operation | 137 | s_power: puts subdevice in power saving mode (on == 0) or normal operation |
138 | mode (on == 1). | 138 | mode (on == 1). |
139 | 139 | ||
140 | interrupt_service_routine: Called by the bridge chip's interrupt service | 140 | interrupt_service_routine: Called by the bridge chip's interrupt service |
141 | handler, when an interrupt status has be raised due to this subdev, | 141 | handler, when an interrupt status has be raised due to this subdev, |
142 | so that this subdev can handle the details. It may schedule work to be | 142 | so that this subdev can handle the details. It may schedule work to be |
143 | performed later. It must not sleep. *Called from an IRQ context*. | 143 | performed later. It must not sleep. *Called from an IRQ context*. |
144 | */ | 144 | */ |
145 | struct v4l2_subdev_core_ops { | 145 | struct v4l2_subdev_core_ops { |
146 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); | 146 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); |
147 | int (*log_status)(struct v4l2_subdev *sd); | 147 | int (*log_status)(struct v4l2_subdev *sd); |
148 | int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, | 148 | int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n, |
149 | struct v4l2_subdev_io_pin_config *pincfg); | 149 | struct v4l2_subdev_io_pin_config *pincfg); |
150 | int (*init)(struct v4l2_subdev *sd, u32 val); | 150 | int (*init)(struct v4l2_subdev *sd, u32 val); |
151 | int (*load_fw)(struct v4l2_subdev *sd); | 151 | int (*load_fw)(struct v4l2_subdev *sd); |
152 | int (*reset)(struct v4l2_subdev *sd, u32 val); | 152 | int (*reset)(struct v4l2_subdev *sd, u32 val); |
153 | int (*s_gpio)(struct v4l2_subdev *sd, u32 val); | 153 | int (*s_gpio)(struct v4l2_subdev *sd, u32 val); |
154 | int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); | 154 | int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc); |
155 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 155 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
156 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 156 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
157 | int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | 157 | int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); |
158 | int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | 158 | int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); |
159 | int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | 159 | int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); |
160 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); | 160 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); |
161 | int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); | 161 | int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); |
162 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); | 162 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); |
163 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 163 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
164 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); | 164 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
165 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); | 165 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
166 | #endif | 166 | #endif |
167 | int (*s_power)(struct v4l2_subdev *sd, int on); | 167 | int (*s_power)(struct v4l2_subdev *sd, int on); |
168 | int (*interrupt_service_routine)(struct v4l2_subdev *sd, | 168 | int (*interrupt_service_routine)(struct v4l2_subdev *sd, |
169 | u32 status, bool *handled); | 169 | u32 status, bool *handled); |
170 | int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, | 170 | int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, |
171 | struct v4l2_event_subscription *sub); | 171 | struct v4l2_event_subscription *sub); |
172 | int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, | 172 | int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh, |
173 | struct v4l2_event_subscription *sub); | 173 | struct v4l2_event_subscription *sub); |
174 | }; | 174 | }; |
175 | 175 | ||
176 | /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio. | 176 | /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio. |
177 | 177 | ||
178 | s_radio: v4l device was opened in Radio mode, to be replaced by s_mode. | 178 | s_radio: v4l device was opened in Radio mode, to be replaced by s_mode. |
179 | 179 | ||
180 | s_type_addr: sets tuner type and its I2C addr. | 180 | s_type_addr: sets tuner type and its I2C addr. |
181 | 181 | ||
182 | s_config: sets tda9887 specific stuff, like port1, port2 and qss | 182 | s_config: sets tda9887 specific stuff, like port1, port2 and qss |
183 | */ | 183 | */ |
184 | struct v4l2_subdev_tuner_ops { | 184 | struct v4l2_subdev_tuner_ops { |
185 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); | 185 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); |
186 | int (*s_radio)(struct v4l2_subdev *sd); | 186 | int (*s_radio)(struct v4l2_subdev *sd); |
187 | int (*s_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); | 187 | int (*s_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); |
188 | int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); | 188 | int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq); |
189 | int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); | 189 | int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); |
190 | int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); | 190 | int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt); |
191 | int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); | 191 | int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); |
192 | int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); | 192 | int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); |
193 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); | 193 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); |
194 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); | 194 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); |
195 | }; | 195 | }; |
196 | 196 | ||
197 | /* s_clock_freq: set the frequency (in Hz) of the audio clock output. | 197 | /* s_clock_freq: set the frequency (in Hz) of the audio clock output. |
198 | Used to slave an audio processor to the video decoder, ensuring that | 198 | Used to slave an audio processor to the video decoder, ensuring that |
199 | audio and video remain synchronized. Usual values for the frequency | 199 | audio and video remain synchronized. Usual values for the frequency |
200 | are 48000, 44100 or 32000 Hz. If the frequency is not supported, then | 200 | are 48000, 44100 or 32000 Hz. If the frequency is not supported, then |
201 | -EINVAL is returned. | 201 | -EINVAL is returned. |
202 | 202 | ||
203 | s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard | 203 | s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard |
204 | way to select I2S clock used by driving digital audio streams at some | 204 | way to select I2S clock used by driving digital audio streams at some |
205 | board designs. Usual values for the frequency are 1024000 and 2048000. | 205 | board designs. Usual values for the frequency are 1024000 and 2048000. |
206 | If the frequency is not supported, then -EINVAL is returned. | 206 | If the frequency is not supported, then -EINVAL is returned. |
207 | 207 | ||
208 | s_routing: used to define the input and/or output pins of an audio chip, | 208 | s_routing: used to define the input and/or output pins of an audio chip, |
209 | and any additional configuration data. | 209 | and any additional configuration data. |
210 | Never attempt to use user-level input IDs (e.g. Composite, S-Video, | 210 | Never attempt to use user-level input IDs (e.g. Composite, S-Video, |
211 | Tuner) at this level. An i2c device shouldn't know about whether an | 211 | Tuner) at this level. An i2c device shouldn't know about whether an |
212 | input pin is connected to a Composite connector, become on another | 212 | input pin is connected to a Composite connector, become on another |
213 | board or platform it might be connected to something else entirely. | 213 | board or platform it might be connected to something else entirely. |
214 | The calling driver is responsible for mapping a user-level input to | 214 | The calling driver is responsible for mapping a user-level input to |
215 | the right pins on the i2c device. | 215 | the right pins on the i2c device. |
216 | */ | 216 | */ |
217 | struct v4l2_subdev_audio_ops { | 217 | struct v4l2_subdev_audio_ops { |
218 | int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); | 218 | int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); |
219 | int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); | 219 | int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); |
220 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); | 220 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); |
221 | int (*s_stream)(struct v4l2_subdev *sd, int enable); | 221 | int (*s_stream)(struct v4l2_subdev *sd, int enable); |
222 | }; | 222 | }; |
223 | 223 | ||
224 | /* | 224 | /* |
225 | s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by | 225 | s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by |
226 | video input devices. | 226 | video input devices. |
227 | 227 | ||
228 | s_crystal_freq: sets the frequency of the crystal used to generate the | 228 | s_crystal_freq: sets the frequency of the crystal used to generate the |
229 | clocks in Hz. An extra flags field allows device specific configuration | 229 | clocks in Hz. An extra flags field allows device specific configuration |
230 | regarding clock frequency dividers, etc. If not used, then set flags | 230 | regarding clock frequency dividers, etc. If not used, then set flags |
231 | to 0. If the frequency is not supported, then -EINVAL is returned. | 231 | to 0. If the frequency is not supported, then -EINVAL is returned. |
232 | 232 | ||
233 | g_input_status: get input status. Same as the status field in the v4l2_input | 233 | g_input_status: get input status. Same as the status field in the v4l2_input |
234 | struct. | 234 | struct. |
235 | 235 | ||
236 | s_routing: see s_routing in audio_ops, except this version is for video | 236 | s_routing: see s_routing in audio_ops, except this version is for video |
237 | devices. | 237 | devices. |
238 | 238 | ||
239 | s_dv_preset: set dv (Digital Video) preset in the sub device. Similar to | 239 | s_dv_preset: set dv (Digital Video) preset in the sub device. Similar to |
240 | s_std() | 240 | s_std() |
241 | 241 | ||
242 | query_dv_preset: query dv preset in the sub device. This is similar to | 242 | query_dv_preset: query dv preset in the sub device. This is similar to |
243 | querystd() | 243 | querystd() |
244 | 244 | ||
245 | s_dv_timings(): Set custom dv timings in the sub device. This is used | 245 | s_dv_timings(): Set custom dv timings in the sub device. This is used |
246 | when sub device is capable of setting detailed timing information | 246 | when sub device is capable of setting detailed timing information |
247 | in the hardware to generate/detect the video signal. | 247 | in the hardware to generate/detect the video signal. |
248 | 248 | ||
249 | g_dv_timings(): Get custom dv timings in the sub device. | 249 | g_dv_timings(): Get custom dv timings in the sub device. |
250 | 250 | ||
251 | enum_mbus_fmt: enumerate pixel formats, provided by a video data source | 251 | enum_mbus_fmt: enumerate pixel formats, provided by a video data source |
252 | 252 | ||
253 | g_mbus_fmt: get the current pixel format, provided by a video data source | 253 | g_mbus_fmt: get the current pixel format, provided by a video data source |
254 | 254 | ||
255 | try_mbus_fmt: try to set a pixel format on a video data source | 255 | try_mbus_fmt: try to set a pixel format on a video data source |
256 | 256 | ||
257 | s_mbus_fmt: set a pixel format on a video data source | 257 | s_mbus_fmt: set a pixel format on a video data source |
258 | */ | 258 | */ |
259 | struct v4l2_subdev_video_ops { | 259 | struct v4l2_subdev_video_ops { |
260 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); | 260 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); |
261 | int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); | 261 | int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); |
262 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); | 262 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); |
263 | int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); | 263 | int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); |
264 | int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); | 264 | int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); |
265 | int (*s_stream)(struct v4l2_subdev *sd, int enable); | 265 | int (*s_stream)(struct v4l2_subdev *sd, int enable); |
266 | int (*cropcap)(struct v4l2_subdev *sd, struct v4l2_cropcap *cc); | 266 | int (*cropcap)(struct v4l2_subdev *sd, struct v4l2_cropcap *cc); |
267 | int (*g_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); | 267 | int (*g_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); |
268 | int (*s_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); | 268 | int (*s_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop); |
269 | int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | 269 | int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); |
270 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | 270 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); |
271 | int (*g_frame_interval)(struct v4l2_subdev *sd, | ||
272 | struct v4l2_subdev_frame_interval *interval); | ||
273 | int (*s_frame_interval)(struct v4l2_subdev *sd, | ||
274 | struct v4l2_subdev_frame_interval *interval); | ||
271 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); | 275 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); |
272 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); | 276 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); |
273 | int (*enum_dv_presets) (struct v4l2_subdev *sd, | 277 | int (*enum_dv_presets) (struct v4l2_subdev *sd, |
274 | struct v4l2_dv_enum_preset *preset); | 278 | struct v4l2_dv_enum_preset *preset); |
275 | int (*s_dv_preset)(struct v4l2_subdev *sd, | 279 | int (*s_dv_preset)(struct v4l2_subdev *sd, |
276 | struct v4l2_dv_preset *preset); | 280 | struct v4l2_dv_preset *preset); |
277 | int (*query_dv_preset)(struct v4l2_subdev *sd, | 281 | int (*query_dv_preset)(struct v4l2_subdev *sd, |
278 | struct v4l2_dv_preset *preset); | 282 | struct v4l2_dv_preset *preset); |
279 | int (*s_dv_timings)(struct v4l2_subdev *sd, | 283 | int (*s_dv_timings)(struct v4l2_subdev *sd, |
280 | struct v4l2_dv_timings *timings); | 284 | struct v4l2_dv_timings *timings); |
281 | int (*g_dv_timings)(struct v4l2_subdev *sd, | 285 | int (*g_dv_timings)(struct v4l2_subdev *sd, |
282 | struct v4l2_dv_timings *timings); | 286 | struct v4l2_dv_timings *timings); |
283 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, | 287 | int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index, |
284 | enum v4l2_mbus_pixelcode *code); | 288 | enum v4l2_mbus_pixelcode *code); |
285 | int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, | 289 | int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, |
286 | struct v4l2_frmsizeenum *fsize); | 290 | struct v4l2_frmsizeenum *fsize); |
287 | int (*g_mbus_fmt)(struct v4l2_subdev *sd, | 291 | int (*g_mbus_fmt)(struct v4l2_subdev *sd, |
288 | struct v4l2_mbus_framefmt *fmt); | 292 | struct v4l2_mbus_framefmt *fmt); |
289 | int (*try_mbus_fmt)(struct v4l2_subdev *sd, | 293 | int (*try_mbus_fmt)(struct v4l2_subdev *sd, |
290 | struct v4l2_mbus_framefmt *fmt); | 294 | struct v4l2_mbus_framefmt *fmt); |
291 | int (*s_mbus_fmt)(struct v4l2_subdev *sd, | 295 | int (*s_mbus_fmt)(struct v4l2_subdev *sd, |
292 | struct v4l2_mbus_framefmt *fmt); | 296 | struct v4l2_mbus_framefmt *fmt); |
293 | }; | 297 | }; |
294 | 298 | ||
295 | /* | 299 | /* |
296 | decode_vbi_line: video decoders that support sliced VBI need to implement | 300 | decode_vbi_line: video decoders that support sliced VBI need to implement |
297 | this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the | 301 | this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the |
298 | start of the VBI data that was generated by the decoder. The driver | 302 | start of the VBI data that was generated by the decoder. The driver |
299 | then parses the sliced VBI data and sets the other fields in the | 303 | then parses the sliced VBI data and sets the other fields in the |
300 | struct accordingly. The pointer p is updated to point to the start of | 304 | struct accordingly. The pointer p is updated to point to the start of |
301 | the payload which can be copied verbatim into the data field of the | 305 | the payload which can be copied verbatim into the data field of the |
302 | v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the | 306 | v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the |
303 | type field is set to 0 on return. | 307 | type field is set to 0 on return. |
304 | 308 | ||
305 | s_vbi_data: used to generate VBI signals on a video signal. | 309 | s_vbi_data: used to generate VBI signals on a video signal. |
306 | v4l2_sliced_vbi_data is filled with the data packets that should be | 310 | v4l2_sliced_vbi_data is filled with the data packets that should be |
307 | output. Note that if you set the line field to 0, then that VBI signal | 311 | output. Note that if you set the line field to 0, then that VBI signal |
308 | is disabled. If no valid VBI data was found, then the type field is | 312 | is disabled. If no valid VBI data was found, then the type field is |
309 | set to 0 on return. | 313 | set to 0 on return. |
310 | 314 | ||
311 | g_vbi_data: used to obtain the sliced VBI packet from a readback register. | 315 | g_vbi_data: used to obtain the sliced VBI packet from a readback register. |
312 | Not all video decoders support this. If no data is available because | 316 | Not all video decoders support this. If no data is available because |
313 | the readback register contains invalid or erroneous data -EIO is | 317 | the readback register contains invalid or erroneous data -EIO is |
314 | returned. Note that you must fill in the 'id' member and the 'field' | 318 | returned. Note that you must fill in the 'id' member and the 'field' |
315 | member (to determine whether CC data from the first or second field | 319 | member (to determine whether CC data from the first or second field |
316 | should be obtained). | 320 | should be obtained). |
317 | 321 | ||
318 | s_raw_fmt: setup the video encoder/decoder for raw VBI. | 322 | s_raw_fmt: setup the video encoder/decoder for raw VBI. |
319 | 323 | ||
320 | g_sliced_fmt: retrieve the current sliced VBI settings. | 324 | g_sliced_fmt: retrieve the current sliced VBI settings. |
321 | 325 | ||
322 | s_sliced_fmt: setup the sliced VBI settings. | 326 | s_sliced_fmt: setup the sliced VBI settings. |
323 | */ | 327 | */ |
324 | struct v4l2_subdev_vbi_ops { | 328 | struct v4l2_subdev_vbi_ops { |
325 | int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); | 329 | int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); |
326 | int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); | 330 | int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); |
327 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); | 331 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); |
328 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); | 332 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); |
329 | int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); | 333 | int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); |
330 | int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); | 334 | int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); |
331 | int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); | 335 | int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); |
332 | }; | 336 | }; |
333 | 337 | ||
334 | /** | 338 | /** |
335 | * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations | 339 | * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations |
336 | * @g_skip_top_lines: number of lines at the top of the image to be skipped. | 340 | * @g_skip_top_lines: number of lines at the top of the image to be skipped. |
337 | * This is needed for some sensors, which always corrupt | 341 | * This is needed for some sensors, which always corrupt |
338 | * several top lines of the output image, or which send their | 342 | * several top lines of the output image, or which send their |
339 | * metadata in them. | 343 | * metadata in them. |
340 | */ | 344 | */ |
341 | struct v4l2_subdev_sensor_ops { | 345 | struct v4l2_subdev_sensor_ops { |
342 | int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); | 346 | int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines); |
343 | }; | 347 | }; |
344 | 348 | ||
345 | /* | 349 | /* |
346 | [rt]x_g_parameters: Get the current operating parameters and state of the | 350 | [rt]x_g_parameters: Get the current operating parameters and state of the |
347 | the IR receiver or transmitter. | 351 | the IR receiver or transmitter. |
348 | 352 | ||
349 | [rt]x_s_parameters: Set the current operating parameters and state of the | 353 | [rt]x_s_parameters: Set the current operating parameters and state of the |
350 | the IR receiver or transmitter. It is recommended to call | 354 | the IR receiver or transmitter. It is recommended to call |
351 | [rt]x_g_parameters first to fill out the current state, and only change | 355 | [rt]x_g_parameters first to fill out the current state, and only change |
352 | the fields that need to be changed. Upon return, the actual device | 356 | the fields that need to be changed. Upon return, the actual device |
353 | operating parameters and state will be returned. Note that hardware | 357 | operating parameters and state will be returned. Note that hardware |
354 | limitations may prevent the actual settings from matching the requested | 358 | limitations may prevent the actual settings from matching the requested |
355 | settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz | 359 | settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz |
356 | was requested. An exception is when the shutdown parameter is true. | 360 | was requested. An exception is when the shutdown parameter is true. |
357 | The last used operational parameters will be returned, but the actual | 361 | The last used operational parameters will be returned, but the actual |
358 | state of the hardware be different to minimize power consumption and | 362 | state of the hardware be different to minimize power consumption and |
359 | processing when shutdown is true. | 363 | processing when shutdown is true. |
360 | 364 | ||
361 | rx_read: Reads received codes or pulse width data. | 365 | rx_read: Reads received codes or pulse width data. |
362 | The semantics are similar to a non-blocking read() call. | 366 | The semantics are similar to a non-blocking read() call. |
363 | 367 | ||
364 | tx_write: Writes codes or pulse width data for transmission. | 368 | tx_write: Writes codes or pulse width data for transmission. |
365 | The semantics are similar to a non-blocking write() call. | 369 | The semantics are similar to a non-blocking write() call. |
366 | */ | 370 | */ |
367 | 371 | ||
368 | enum v4l2_subdev_ir_mode { | 372 | enum v4l2_subdev_ir_mode { |
369 | V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* uses struct ir_raw_event records */ | 373 | V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* uses struct ir_raw_event records */ |
370 | }; | 374 | }; |
371 | 375 | ||
372 | struct v4l2_subdev_ir_parameters { | 376 | struct v4l2_subdev_ir_parameters { |
373 | /* Either Rx or Tx */ | 377 | /* Either Rx or Tx */ |
374 | unsigned int bytes_per_data_element; /* of data in read or write call */ | 378 | unsigned int bytes_per_data_element; /* of data in read or write call */ |
375 | enum v4l2_subdev_ir_mode mode; | 379 | enum v4l2_subdev_ir_mode mode; |
376 | 380 | ||
377 | bool enable; | 381 | bool enable; |
378 | bool interrupt_enable; | 382 | bool interrupt_enable; |
379 | bool shutdown; /* true: set hardware to low/no power, false: normal */ | 383 | bool shutdown; /* true: set hardware to low/no power, false: normal */ |
380 | 384 | ||
381 | bool modulation; /* true: uses carrier, false: baseband */ | 385 | bool modulation; /* true: uses carrier, false: baseband */ |
382 | u32 max_pulse_width; /* ns, valid only for baseband signal */ | 386 | u32 max_pulse_width; /* ns, valid only for baseband signal */ |
383 | unsigned int carrier_freq; /* Hz, valid only for modulated signal*/ | 387 | unsigned int carrier_freq; /* Hz, valid only for modulated signal*/ |
384 | unsigned int duty_cycle; /* percent, valid only for modulated signal*/ | 388 | unsigned int duty_cycle; /* percent, valid only for modulated signal*/ |
385 | bool invert_level; /* invert signal level */ | 389 | bool invert_level; /* invert signal level */ |
386 | 390 | ||
387 | /* Tx only */ | 391 | /* Tx only */ |
388 | bool invert_carrier_sense; /* Send 0/space as a carrier burst */ | 392 | bool invert_carrier_sense; /* Send 0/space as a carrier burst */ |
389 | 393 | ||
390 | /* Rx only */ | 394 | /* Rx only */ |
391 | u32 noise_filter_min_width; /* ns, min time of a valid pulse */ | 395 | u32 noise_filter_min_width; /* ns, min time of a valid pulse */ |
392 | unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */ | 396 | unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */ |
393 | unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */ | 397 | unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */ |
394 | u32 resolution; /* ns */ | 398 | u32 resolution; /* ns */ |
395 | }; | 399 | }; |
396 | 400 | ||
397 | struct v4l2_subdev_ir_ops { | 401 | struct v4l2_subdev_ir_ops { |
398 | /* Receiver */ | 402 | /* Receiver */ |
399 | int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, | 403 | int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, |
400 | ssize_t *num); | 404 | ssize_t *num); |
401 | 405 | ||
402 | int (*rx_g_parameters)(struct v4l2_subdev *sd, | 406 | int (*rx_g_parameters)(struct v4l2_subdev *sd, |
403 | struct v4l2_subdev_ir_parameters *params); | 407 | struct v4l2_subdev_ir_parameters *params); |
404 | int (*rx_s_parameters)(struct v4l2_subdev *sd, | 408 | int (*rx_s_parameters)(struct v4l2_subdev *sd, |
405 | struct v4l2_subdev_ir_parameters *params); | 409 | struct v4l2_subdev_ir_parameters *params); |
406 | 410 | ||
407 | /* Transmitter */ | 411 | /* Transmitter */ |
408 | int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, | 412 | int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, |
409 | ssize_t *num); | 413 | ssize_t *num); |
410 | 414 | ||
411 | int (*tx_g_parameters)(struct v4l2_subdev *sd, | 415 | int (*tx_g_parameters)(struct v4l2_subdev *sd, |
412 | struct v4l2_subdev_ir_parameters *params); | 416 | struct v4l2_subdev_ir_parameters *params); |
413 | int (*tx_s_parameters)(struct v4l2_subdev *sd, | 417 | int (*tx_s_parameters)(struct v4l2_subdev *sd, |
414 | struct v4l2_subdev_ir_parameters *params); | 418 | struct v4l2_subdev_ir_parameters *params); |
415 | }; | 419 | }; |
416 | 420 | ||
417 | struct v4l2_subdev_pad_ops { | 421 | struct v4l2_subdev_pad_ops { |
418 | int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | 422 | int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, |
419 | struct v4l2_subdev_mbus_code_enum *code); | 423 | struct v4l2_subdev_mbus_code_enum *code); |
420 | int (*enum_frame_size)(struct v4l2_subdev *sd, | 424 | int (*enum_frame_size)(struct v4l2_subdev *sd, |
421 | struct v4l2_subdev_fh *fh, | 425 | struct v4l2_subdev_fh *fh, |
422 | struct v4l2_subdev_frame_size_enum *fse); | 426 | struct v4l2_subdev_frame_size_enum *fse); |
427 | int (*enum_frame_interval)(struct v4l2_subdev *sd, | ||
428 | struct v4l2_subdev_fh *fh, | ||
429 | struct v4l2_subdev_frame_interval_enum *fie); | ||
423 | int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | 430 | int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, |
424 | struct v4l2_subdev_format *format); | 431 | struct v4l2_subdev_format *format); |
425 | int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, | 432 | int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, |
426 | struct v4l2_subdev_format *format); | 433 | struct v4l2_subdev_format *format); |
427 | }; | 434 | }; |
428 | 435 | ||
429 | struct v4l2_subdev_ops { | 436 | struct v4l2_subdev_ops { |
430 | const struct v4l2_subdev_core_ops *core; | 437 | const struct v4l2_subdev_core_ops *core; |
431 | const struct v4l2_subdev_tuner_ops *tuner; | 438 | const struct v4l2_subdev_tuner_ops *tuner; |
432 | const struct v4l2_subdev_audio_ops *audio; | 439 | const struct v4l2_subdev_audio_ops *audio; |
433 | const struct v4l2_subdev_video_ops *video; | 440 | const struct v4l2_subdev_video_ops *video; |
434 | const struct v4l2_subdev_vbi_ops *vbi; | 441 | const struct v4l2_subdev_vbi_ops *vbi; |
435 | const struct v4l2_subdev_ir_ops *ir; | 442 | const struct v4l2_subdev_ir_ops *ir; |
436 | const struct v4l2_subdev_sensor_ops *sensor; | 443 | const struct v4l2_subdev_sensor_ops *sensor; |
437 | const struct v4l2_subdev_pad_ops *pad; | 444 | const struct v4l2_subdev_pad_ops *pad; |
438 | }; | 445 | }; |
439 | 446 | ||
440 | /* | 447 | /* |
441 | * Internal ops. Never call this from drivers, only the v4l2 framework can call | 448 | * Internal ops. Never call this from drivers, only the v4l2 framework can call |
442 | * these ops. | 449 | * these ops. |
443 | * | 450 | * |
444 | * registered: called when this subdev is registered. When called the v4l2_dev | 451 | * registered: called when this subdev is registered. When called the v4l2_dev |
445 | * field is set to the correct v4l2_device. | 452 | * field is set to the correct v4l2_device. |
446 | * | 453 | * |
447 | * unregistered: called when this subdev is unregistered. When called the | 454 | * unregistered: called when this subdev is unregistered. When called the |
448 | * v4l2_dev field is still set to the correct v4l2_device. | 455 | * v4l2_dev field is still set to the correct v4l2_device. |
449 | * | 456 | * |
450 | * open: called when the subdev device node is opened by an application. | 457 | * open: called when the subdev device node is opened by an application. |
451 | * | 458 | * |
452 | * close: called when the subdev device node is closed. | 459 | * close: called when the subdev device node is closed. |
453 | */ | 460 | */ |
454 | struct v4l2_subdev_internal_ops { | 461 | struct v4l2_subdev_internal_ops { |
455 | int (*registered)(struct v4l2_subdev *sd); | 462 | int (*registered)(struct v4l2_subdev *sd); |
456 | void (*unregistered)(struct v4l2_subdev *sd); | 463 | void (*unregistered)(struct v4l2_subdev *sd); |
457 | int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); | 464 | int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); |
458 | int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); | 465 | int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); |
459 | }; | 466 | }; |
460 | 467 | ||
461 | #define V4L2_SUBDEV_NAME_SIZE 32 | 468 | #define V4L2_SUBDEV_NAME_SIZE 32 |
462 | 469 | ||
463 | /* Set this flag if this subdev is a i2c device. */ | 470 | /* Set this flag if this subdev is a i2c device. */ |
464 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) | 471 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) |
465 | /* Set this flag if this subdev is a spi device. */ | 472 | /* Set this flag if this subdev is a spi device. */ |
466 | #define V4L2_SUBDEV_FL_IS_SPI (1U << 1) | 473 | #define V4L2_SUBDEV_FL_IS_SPI (1U << 1) |
467 | /* Set this flag if this subdev needs a device node. */ | 474 | /* Set this flag if this subdev needs a device node. */ |
468 | #define V4L2_SUBDEV_FL_HAS_DEVNODE (1U << 2) | 475 | #define V4L2_SUBDEV_FL_HAS_DEVNODE (1U << 2) |
469 | /* Set this flag if this subdev generates events. */ | 476 | /* Set this flag if this subdev generates events. */ |
470 | #define V4L2_SUBDEV_FL_HAS_EVENTS (1U << 3) | 477 | #define V4L2_SUBDEV_FL_HAS_EVENTS (1U << 3) |
471 | 478 | ||
472 | /* Each instance of a subdev driver should create this struct, either | 479 | /* Each instance of a subdev driver should create this struct, either |
473 | stand-alone or embedded in a larger struct. | 480 | stand-alone or embedded in a larger struct. |
474 | */ | 481 | */ |
475 | struct v4l2_subdev { | 482 | struct v4l2_subdev { |
476 | #if defined(CONFIG_MEDIA_CONTROLLER) | 483 | #if defined(CONFIG_MEDIA_CONTROLLER) |
477 | struct media_entity entity; | 484 | struct media_entity entity; |
478 | #endif | 485 | #endif |
479 | struct list_head list; | 486 | struct list_head list; |
480 | struct module *owner; | 487 | struct module *owner; |
481 | u32 flags; | 488 | u32 flags; |
482 | struct v4l2_device *v4l2_dev; | 489 | struct v4l2_device *v4l2_dev; |
483 | const struct v4l2_subdev_ops *ops; | 490 | const struct v4l2_subdev_ops *ops; |
484 | /* Never call these internal ops from within a driver! */ | 491 | /* Never call these internal ops from within a driver! */ |
485 | const struct v4l2_subdev_internal_ops *internal_ops; | 492 | const struct v4l2_subdev_internal_ops *internal_ops; |
486 | /* The control handler of this subdev. May be NULL. */ | 493 | /* The control handler of this subdev. May be NULL. */ |
487 | struct v4l2_ctrl_handler *ctrl_handler; | 494 | struct v4l2_ctrl_handler *ctrl_handler; |
488 | /* name must be unique */ | 495 | /* name must be unique */ |
489 | char name[V4L2_SUBDEV_NAME_SIZE]; | 496 | char name[V4L2_SUBDEV_NAME_SIZE]; |
490 | /* can be used to group similar subdevs, value is driver-specific */ | 497 | /* can be used to group similar subdevs, value is driver-specific */ |
491 | u32 grp_id; | 498 | u32 grp_id; |
492 | /* pointer to private data */ | 499 | /* pointer to private data */ |
493 | void *dev_priv; | 500 | void *dev_priv; |
494 | void *host_priv; | 501 | void *host_priv; |
495 | /* subdev device node */ | 502 | /* subdev device node */ |
496 | struct video_device devnode; | 503 | struct video_device devnode; |
497 | /* number of events to be allocated on open */ | 504 | /* number of events to be allocated on open */ |
498 | unsigned int nevents; | 505 | unsigned int nevents; |
499 | }; | 506 | }; |
500 | 507 | ||
501 | #define media_entity_to_v4l2_subdev(ent) \ | 508 | #define media_entity_to_v4l2_subdev(ent) \ |
502 | container_of(ent, struct v4l2_subdev, entity) | 509 | container_of(ent, struct v4l2_subdev, entity) |
503 | #define vdev_to_v4l2_subdev(vdev) \ | 510 | #define vdev_to_v4l2_subdev(vdev) \ |
504 | container_of(vdev, struct v4l2_subdev, devnode) | 511 | container_of(vdev, struct v4l2_subdev, devnode) |
505 | 512 | ||
506 | /* | 513 | /* |
507 | * Used for storing subdev information per file handle | 514 | * Used for storing subdev information per file handle |
508 | */ | 515 | */ |
509 | struct v4l2_subdev_fh { | 516 | struct v4l2_subdev_fh { |
510 | struct v4l2_fh vfh; | 517 | struct v4l2_fh vfh; |
511 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 518 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
512 | struct v4l2_mbus_framefmt *try_fmt; | 519 | struct v4l2_mbus_framefmt *try_fmt; |
513 | struct v4l2_rect *try_crop; | 520 | struct v4l2_rect *try_crop; |
514 | #endif | 521 | #endif |
515 | }; | 522 | }; |
516 | 523 | ||
517 | #define to_v4l2_subdev_fh(fh) \ | 524 | #define to_v4l2_subdev_fh(fh) \ |
518 | container_of(fh, struct v4l2_subdev_fh, vfh) | 525 | container_of(fh, struct v4l2_subdev_fh, vfh) |
519 | 526 | ||
520 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) | 527 | #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API) |
521 | static inline struct v4l2_mbus_framefmt * | 528 | static inline struct v4l2_mbus_framefmt * |
522 | v4l2_subdev_get_try_format(struct v4l2_subdev_fh *fh, unsigned int pad) | 529 | v4l2_subdev_get_try_format(struct v4l2_subdev_fh *fh, unsigned int pad) |
523 | { | 530 | { |
524 | return &fh->try_fmt[pad]; | 531 | return &fh->try_fmt[pad]; |
525 | } | 532 | } |
526 | 533 | ||
527 | static inline struct v4l2_rect * | 534 | static inline struct v4l2_rect * |
528 | v4l2_subdev_get_try_crop(struct v4l2_subdev_fh *fh, unsigned int pad) | 535 | v4l2_subdev_get_try_crop(struct v4l2_subdev_fh *fh, unsigned int pad) |
529 | { | 536 | { |
530 | return &fh->try_crop[pad]; | 537 | return &fh->try_crop[pad]; |
531 | } | 538 | } |
532 | #endif | 539 | #endif |
533 | 540 | ||
534 | extern const struct v4l2_file_operations v4l2_subdev_fops; | 541 | extern const struct v4l2_file_operations v4l2_subdev_fops; |
535 | 542 | ||
536 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) | 543 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) |
537 | { | 544 | { |
538 | sd->dev_priv = p; | 545 | sd->dev_priv = p; |
539 | } | 546 | } |
540 | 547 | ||
541 | static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) | 548 | static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) |
542 | { | 549 | { |
543 | return sd->dev_priv; | 550 | return sd->dev_priv; |
544 | } | 551 | } |
545 | 552 | ||
546 | static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) | 553 | static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p) |
547 | { | 554 | { |
548 | sd->host_priv = p; | 555 | sd->host_priv = p; |
549 | } | 556 | } |
550 | 557 | ||
551 | static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) | 558 | static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) |
552 | { | 559 | { |
553 | return sd->host_priv; | 560 | return sd->host_priv; |
554 | } | 561 | } |
555 | 562 | ||
556 | void v4l2_subdev_init(struct v4l2_subdev *sd, | 563 | void v4l2_subdev_init(struct v4l2_subdev *sd, |
557 | const struct v4l2_subdev_ops *ops); | 564 | const struct v4l2_subdev_ops *ops); |
558 | 565 | ||
559 | /* Call an ops of a v4l2_subdev, doing the right checks against | 566 | /* Call an ops of a v4l2_subdev, doing the right checks against |
560 | NULL pointers. | 567 | NULL pointers. |
561 | 568 | ||
562 | Example: err = v4l2_subdev_call(sd, core, g_chip_ident, &chip); | 569 | Example: err = v4l2_subdev_call(sd, core, g_chip_ident, &chip); |
563 | */ | 570 | */ |
564 | #define v4l2_subdev_call(sd, o, f, args...) \ | 571 | #define v4l2_subdev_call(sd, o, f, args...) \ |
565 | (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ | 572 | (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ |
566 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) | 573 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) |
567 | 574 | ||
568 | /* Send a notification to v4l2_device. */ | 575 | /* Send a notification to v4l2_device. */ |
569 | #define v4l2_subdev_notify(sd, notification, arg) \ | 576 | #define v4l2_subdev_notify(sd, notification, arg) \ |
570 | ((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \ | 577 | ((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \ |
571 | (sd)->v4l2_dev->notify((sd), (notification), (arg))) | 578 | (sd)->v4l2_dev->notify((sd), (notification), (arg))) |
572 | 579 | ||
573 | #endif | 580 | #endif |
574 | 581 |