Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
0002 /*
0003     Public ivtv API header
0004     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
0005     Copyright (C) 2004-2007  Hans Verkuil <hverkuil@xs4all.nl>
0006 
0007     This program is free software; you can redistribute it and/or modify
0008     it under the terms of the GNU General Public License as published by
0009     the Free Software Foundation; either version 2 of the License, or
0010     (at your option) any later version.
0011 
0012     This program is distributed in the hope that it will be useful,
0013     but WITHOUT ANY WARRANTY; without even the implied warranty of
0014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0015     GNU General Public License for more details.
0016 
0017     You should have received a copy of the GNU General Public License
0018     along with this program; if not, write to the Free Software
0019     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0020  */
0021 
0022 #ifndef __LINUX_IVTV_H__
0023 #define __LINUX_IVTV_H__
0024 
0025 #include <linux/compiler.h>
0026 #include <linux/types.h>
0027 #include <linux/videodev2.h>
0028 
0029 /* ivtv knows several distinct output modes: MPEG streaming,
0030    YUV streaming, YUV updates through user DMA and the passthrough
0031    mode.
0032 
0033    In order to clearly tell the driver that we are in user DMA
0034    YUV mode you need to call IVTV_IOC_DMA_FRAME with y_source == NULL
0035    first (althrough if you don't then the first time
0036    DMA_FRAME is called the mode switch is done automatically).
0037 
0038    When you close the file handle the user DMA mode is exited again.
0039 
0040    While in one mode, you cannot use another mode (EBUSY is returned).
0041 
0042    All this means that if you want to change the YUV interlacing
0043    for the user DMA YUV mode you first need to do call IVTV_IOC_DMA_FRAME
0044    with y_source == NULL before you can set the correct format using
0045    VIDIOC_S_FMT.
0046 
0047    Eventually all this should be replaced with a proper V4L2 API,
0048    but for now we have to do it this way. */
0049 
0050 struct ivtv_dma_frame {
0051     enum v4l2_buf_type type; /* V4L2_BUF_TYPE_VIDEO_OUTPUT */
0052     __u32 pixelformat;   /* 0 == same as destination */
0053     void __user *y_source;   /* if NULL and type == V4L2_BUF_TYPE_VIDEO_OUTPUT,
0054                     then just switch to user DMA YUV output mode */
0055     void __user *uv_source;  /* Unused for RGB pixelformats */
0056     struct v4l2_rect src;
0057     struct v4l2_rect dst;
0058     __u32 src_width;
0059     __u32 src_height;
0060 };
0061 
0062 #define IVTV_IOC_DMA_FRAME      _IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame)
0063 
0064 /* Select the passthrough mode (if the argument is non-zero). In the passthrough
0065    mode the output of the encoder is passed immediately into the decoder. */
0066 #define IVTV_IOC_PASSTHROUGH_MODE   _IOW ('V', BASE_VIDIOC_PRIVATE+1, int)
0067 
0068 /* Deprecated defines: applications should use the defines from videodev2.h */
0069 #define IVTV_SLICED_TYPE_TELETEXT_B     V4L2_MPEG_VBI_IVTV_TELETEXT_B
0070 #define IVTV_SLICED_TYPE_CAPTION_525    V4L2_MPEG_VBI_IVTV_CAPTION_525
0071 #define IVTV_SLICED_TYPE_WSS_625        V4L2_MPEG_VBI_IVTV_WSS_625
0072 #define IVTV_SLICED_TYPE_VPS            V4L2_MPEG_VBI_IVTV_VPS
0073 
0074 #endif /* _LINUX_IVTV_H */