[media] videodev2.h: add enum/query/cap dv_timings ioctls

These new ioctls make it possible for the dv_timings API to replace
the dv_preset API eventually.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Hans Verkuil 2012-04-24 09:25:18 -03:00 committed by Mauro Carvalho Chehab
parent dedb8cb1d6
commit 06bba75d2a

View File

@ -991,29 +991,56 @@ struct v4l2_dv_enum_preset {
* D V B T T I M I N G S
*/
/* BT.656/BT.1120 timing data */
/** struct v4l2_bt_timings - BT.656/BT.1120 timing data
* @width: total width of the active video in pixels
* @height: total height of the active video in lines
* @interlaced: Interlaced or progressive
* @polarities: Positive or negative polarities
* @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
* @hfrontporch:Horizontal front porch in pixels
* @hsync: Horizontal Sync length in pixels
* @hbackporch: Horizontal back porch in pixels
* @vfrontporch:Vertical front porch in lines
* @vsync: Vertical Sync length in lines
* @vbackporch: Vertical back porch in lines
* @il_vfrontporch:Vertical front porch for the even field
* (aka field 2) of interlaced field formats
* @il_vsync: Vertical Sync length for the even field
* (aka field 2) of interlaced field formats
* @il_vbackporch:Vertical back porch for the even field
* (aka field 2) of interlaced field formats
* @standards: Standards the timing belongs to
* @flags: Flags
* @reserved: Reserved fields, must be zeroed.
*
* A note regarding vertical interlaced timings: height refers to the total
* height of the active video frame (= two fields). The blanking timings refer
* to the blanking of each field. So the height of the total frame is
* calculated as follows:
*
* tot_height = height + vfrontporch + vsync + vbackporch +
* il_vfrontporch + il_vsync + il_vbackporch
*
* The active height of each field is height / 2.
*/
struct v4l2_bt_timings {
__u32 width; /* width in pixels */
__u32 height; /* height in lines */
__u32 interlaced; /* Interlaced or progressive */
__u32 polarities; /* Positive or negative polarity */
__u64 pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */
__u32 hfrontporch; /* Horizpontal front porch in pixels */
__u32 hsync; /* Horizontal Sync length in pixels */
__u32 hbackporch; /* Horizontal back porch in pixels */
__u32 vfrontporch; /* Vertical front porch in pixels */
__u32 vsync; /* Vertical Sync length in lines */
__u32 vbackporch; /* Vertical back porch in lines */
__u32 il_vfrontporch; /* Vertical front porch for bottom field of
* interlaced field formats
*/
__u32 il_vsync; /* Vertical sync length for bottom field of
* interlaced field formats
*/
__u32 il_vbackporch; /* Vertical back porch for bottom field of
* interlaced field formats
*/
__u32 reserved[16];
__u32 width;
__u32 height;
__u32 interlaced;
__u32 polarities;
__u64 pixelclock;
__u32 hfrontporch;
__u32 hsync;
__u32 hbackporch;
__u32 vfrontporch;
__u32 vsync;
__u32 vbackporch;
__u32 il_vfrontporch;
__u32 il_vsync;
__u32 il_vbackporch;
__u32 standards;
__u32 flags;
__u32 reserved[14];
} __attribute__ ((packed));
/* Interlaced or progressive format */
@ -1024,8 +1051,42 @@ struct v4l2_bt_timings {
#define V4L2_DV_VSYNC_POS_POL 0x00000001
#define V4L2_DV_HSYNC_POS_POL 0x00000002
/* Timings standards */
#define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */
#define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */
#define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */
#define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */
/* DV timings */
/* Flags */
/* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
intervals are reduced, allowing a higher resolution over the same
bandwidth. This is a read-only flag. */
#define V4L2_DV_FL_REDUCED_BLANKING (1 << 0)
/* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
of six. These formats can be optionally played at 1 / 1.001 speed.
This is a read-only flag. */
#define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1)
/* CEA-861 specific: only valid for video transmitters, the flag is cleared
by receivers.
If the framerate of the format is a multiple of six, then the pixelclock
used to set up the transmitter is divided by 1.001 to make it compatible
with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
such frequencies, then the flag will also be cleared. */
#define V4L2_DV_FL_REDUCED_FPS (1 << 2)
/* Specific to interlaced formats: if set, then field 1 is really one half-line
longer and field 2 is really one half-line shorter, so each field has
exactly the same number of half-lines. Whether half-lines can be detected
or used depends on the hardware. */
#define V4L2_DV_FL_HALF_LINE (1 << 0)
/** struct v4l2_dv_timings - DV timings
* @type: the type of the timings
* @bt: BT656/1120 timings
*/
struct v4l2_dv_timings {
__u32 type;
union {
@ -1037,6 +1098,64 @@ struct v4l2_dv_timings {
/* Values for the type field */
#define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */
/** struct v4l2_enum_dv_timings - DV timings enumeration
* @index: enumeration index
* @reserved: must be zeroed
* @timings: the timings for the given index
*/
struct v4l2_enum_dv_timings {
__u32 index;
__u32 reserved[3];
struct v4l2_dv_timings timings;
};
/** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
* @min_width: width in pixels
* @max_width: width in pixels
* @min_height: height in lines
* @max_height: height in lines
* @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
* @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
* @standards: Supported standards
* @capabilities: Supported capabilities
* @reserved: Must be zeroed
*/
struct v4l2_bt_timings_cap {
__u32 min_width;
__u32 max_width;
__u32 min_height;
__u32 max_height;
__u64 min_pixelclock;
__u64 max_pixelclock;
__u32 standards;
__u32 capabilities;
__u32 reserved[16];
} __attribute__ ((packed));
/* Supports interlaced formats */
#define V4L2_DV_BT_CAP_INTERLACED (1 << 0)
/* Supports progressive formats */
#define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1)
/* Supports CVT/GTF reduced blanking */
#define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
/* Supports custom formats */
#define V4L2_DV_BT_CAP_CUSTOM (1 << 3)
/** struct v4l2_dv_timings_cap - DV timings capabilities
* @type: the type of the timings (same as in struct v4l2_dv_timings)
* @bt: the BT656/1120 timings capabilities
*/
struct v4l2_dv_timings_cap {
__u32 type;
__u32 reserved[3];
union {
struct v4l2_bt_timings_cap bt;
__u32 raw_data[32];
};
};
/*
* V I D E O I N P U T S
*/
@ -2513,6 +2632,12 @@ struct v4l2_create_buffers {
#define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd)
#define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
/* Experimental, these three ioctls may change over the next couple of kernel
versions. */
#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 96, struct v4l2_enum_dv_timings)
#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 97, struct v4l2_dv_timings)
#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 98, struct v4l2_dv_timings_cap)
/* Reminder: when adding new ioctls please add support for them to
drivers/media/video/v4l2-compat-ioctl32.c as well! */