xref: /OK3568_Linux_fs/kernel/include/uapi/linux/ivtv.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun     Public ivtv API header
4*4882a593Smuzhiyun     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
5*4882a593Smuzhiyun     Copyright (C) 2004-2007  Hans Verkuil <hverkuil@xs4all.nl>
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun     This program is free software; you can redistribute it and/or modify
8*4882a593Smuzhiyun     it under the terms of the GNU General Public License as published by
9*4882a593Smuzhiyun     the Free Software Foundation; either version 2 of the License, or
10*4882a593Smuzhiyun     (at your option) any later version.
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun     This program is distributed in the hope that it will be useful,
13*4882a593Smuzhiyun     but WITHOUT ANY WARRANTY; without even the implied warranty of
14*4882a593Smuzhiyun     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*4882a593Smuzhiyun     GNU General Public License for more details.
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun     You should have received a copy of the GNU General Public License
18*4882a593Smuzhiyun     along with this program; if not, write to the Free Software
19*4882a593Smuzhiyun     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifndef __LINUX_IVTV_H__
23*4882a593Smuzhiyun #define __LINUX_IVTV_H__
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #include <linux/compiler.h>
26*4882a593Smuzhiyun #include <linux/types.h>
27*4882a593Smuzhiyun #include <linux/videodev2.h>
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* ivtv knows several distinct output modes: MPEG streaming,
30*4882a593Smuzhiyun    YUV streaming, YUV updates through user DMA and the passthrough
31*4882a593Smuzhiyun    mode.
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun    In order to clearly tell the driver that we are in user DMA
34*4882a593Smuzhiyun    YUV mode you need to call IVTV_IOC_DMA_FRAME with y_source == NULL
35*4882a593Smuzhiyun    first (althrough if you don't then the first time
36*4882a593Smuzhiyun    DMA_FRAME is called the mode switch is done automatically).
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun    When you close the file handle the user DMA mode is exited again.
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun    While in one mode, you cannot use another mode (EBUSY is returned).
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun    All this means that if you want to change the YUV interlacing
43*4882a593Smuzhiyun    for the user DMA YUV mode you first need to do call IVTV_IOC_DMA_FRAME
44*4882a593Smuzhiyun    with y_source == NULL before you can set the correct format using
45*4882a593Smuzhiyun    VIDIOC_S_FMT.
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun    Eventually all this should be replaced with a proper V4L2 API,
48*4882a593Smuzhiyun    but for now we have to do it this way. */
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun struct ivtv_dma_frame {
51*4882a593Smuzhiyun 	enum v4l2_buf_type type; /* V4L2_BUF_TYPE_VIDEO_OUTPUT */
52*4882a593Smuzhiyun 	__u32 pixelformat;	 /* 0 == same as destination */
53*4882a593Smuzhiyun 	void __user *y_source;   /* if NULL and type == V4L2_BUF_TYPE_VIDEO_OUTPUT,
54*4882a593Smuzhiyun 				    then just switch to user DMA YUV output mode */
55*4882a593Smuzhiyun 	void __user *uv_source;  /* Unused for RGB pixelformats */
56*4882a593Smuzhiyun 	struct v4l2_rect src;
57*4882a593Smuzhiyun 	struct v4l2_rect dst;
58*4882a593Smuzhiyun 	__u32 src_width;
59*4882a593Smuzhiyun 	__u32 src_height;
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define IVTV_IOC_DMA_FRAME		_IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame)
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /* Select the passthrough mode (if the argument is non-zero). In the passthrough
65*4882a593Smuzhiyun    mode the output of the encoder is passed immediately into the decoder. */
66*4882a593Smuzhiyun #define IVTV_IOC_PASSTHROUGH_MODE	_IOW ('V', BASE_VIDIOC_PRIVATE+1, int)
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /* Deprecated defines: applications should use the defines from videodev2.h */
69*4882a593Smuzhiyun #define IVTV_SLICED_TYPE_TELETEXT_B     V4L2_MPEG_VBI_IVTV_TELETEXT_B
70*4882a593Smuzhiyun #define IVTV_SLICED_TYPE_CAPTION_525    V4L2_MPEG_VBI_IVTV_CAPTION_525
71*4882a593Smuzhiyun #define IVTV_SLICED_TYPE_WSS_625        V4L2_MPEG_VBI_IVTV_WSS_625
72*4882a593Smuzhiyun #define IVTV_SLICED_TYPE_VPS            V4L2_MPEG_VBI_IVTV_VPS
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #endif /* _LINUX_IVTV_H */
75