V4L/DVB (4188): Add new MPEG control/ioctl definitions to videodev2.h
Hans Verkuil [Sun, 18 Jun 2006 16:27:19 +0000 (13:27 -0300)]
The old, experimental, VIDIOC_S/G_CODEC API to pass MPEG parameters is now
obsolete and is replaced by 'extended controls' which offer more flexibility
and are hopefully more future proof.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

include/linux/videodev2.h

index 9a70c56..337c314 100644 (file)
@@ -105,6 +105,8 @@ enum v4l2_ctrl_type {
        V4L2_CTRL_TYPE_BOOLEAN       = 2,
        V4L2_CTRL_TYPE_MENU          = 3,
        V4L2_CTRL_TYPE_BUTTON        = 4,
+       V4L2_CTRL_TYPE_INTEGER64     = 5,
+       V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
 };
 
 enum v4l2_tuner_type {
@@ -251,7 +253,7 @@ struct v4l2_pix_format
 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M','J','P','G') /* Motion-JPEG   */
 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J','P','E','G') /* JFIF JPEG     */
 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d','v','s','d') /* 1394          */
-#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG          */
+#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG-1/2/4    */
 
 /*  Vendor-specific formats   */
 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W','N','V','A') /* Winnov hw compress */
@@ -701,6 +703,34 @@ struct v4l2_control
        __s32                value;
 };
 
+struct v4l2_ext_control
+{
+       __u32 id;
+       __u32 reserved2[2];
+       union {
+               __s32 value;
+               __s64 value64;
+               void *reserved;
+       };
+};
+
+struct v4l2_ext_controls
+{
+       __u32 ctrl_class;
+       __u32 count;
+       __u32 error_idx;
+       __u32 reserved[2];
+       struct v4l2_ext_control *controls;
+};
+
+/*  Values for ctrl_class field */
+#define V4L2_CTRL_CLASS_USER 0x00980000        /* Old-style 'user' controls */
+#define V4L2_CTRL_CLASS_MPEG 0x00990000        /* MPEG-compression controls */
+
+#define V4L2_CTRL_ID_MASK                (0x0fffffff)
+#define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
+#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
+
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
 struct v4l2_queryctrl
 {
@@ -727,12 +757,21 @@ struct v4l2_querymenu
 /*  Control flags  */
 #define V4L2_CTRL_FLAG_DISABLED                0x0001
 #define V4L2_CTRL_FLAG_GRABBED         0x0002
+#define V4L2_CTRL_FLAG_READ_ONLY       0x0004
+#define V4L2_CTRL_FLAG_UPDATE          0x0008
+#define V4L2_CTRL_FLAG_INACTIVE        0x0010
+#define V4L2_CTRL_FLAG_SLIDER          0x0020
+
+/*  Query flag, to be ORed with the control ID */
+#define V4L2_CTRL_FLAG_NEXT_CTRL       0x80000000
 
-/*  Control IDs defined by V4L2 */
-#define V4L2_CID_BASE                  0x00980900
+/*  User-class control IDs defined by V4L2 */
+#define V4L2_CID_BASE                  (V4L2_CTRL_CLASS_USER | 0x900)
+#define V4L2_CID_USER_BASE             V4L2_CID_BASE
 /*  IDs reserved for driver specific controls */
 #define V4L2_CID_PRIVATE_BASE          0x08000000
 
+#define V4L2_CID_USER_CLASS            (V4L2_CTRL_CLASS_USER | 1)
 #define V4L2_CID_BRIGHTNESS            (V4L2_CID_BASE+0)
 #define V4L2_CID_CONTRAST              (V4L2_CID_BASE+1)
 #define V4L2_CID_SATURATION            (V4L2_CID_BASE+2)
@@ -759,6 +798,183 @@ struct v4l2_querymenu
 #define V4L2_CID_VCENTER               (V4L2_CID_BASE+23)
 #define V4L2_CID_LASTP1                        (V4L2_CID_BASE+24) /* last CID + 1 */
 
+/*  MPEG-class control IDs defined by V4L2 */
+#define V4L2_CID_MPEG_BASE                     (V4L2_CTRL_CLASS_MPEG | 0x900)
+#define V4L2_CID_MPEG_CLASS                    (V4L2_CTRL_CLASS_MPEG | 1)
+
+/*  MPEG streams */
+#define V4L2_CID_MPEG_STREAM_TYPE              (V4L2_CID_MPEG_BASE+0)
+enum v4l2_mpeg_stream_type {
+       V4L2_MPEG_STREAM_TYPE_MPEG2_PS,   /* MPEG-2 program stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_TS,   /* MPEG-2 transport stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_SS,   /* MPEG-1 system stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_DVD,  /* MPEG-2 DVD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG1_VCD,  /* MPEG-1 VCD-compatible stream */
+       V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD, /* MPEG-2 SVCD-compatible stream */
+};
+#define V4L2_CID_MPEG_STREAM_PID_PMT           (V4L2_CID_MPEG_BASE+1)
+#define V4L2_CID_MPEG_STREAM_PID_AUDIO                 (V4L2_CID_MPEG_BASE+2)
+#define V4L2_CID_MPEG_STREAM_PID_VIDEO                 (V4L2_CID_MPEG_BASE+3)
+#define V4L2_CID_MPEG_STREAM_PID_PCR           (V4L2_CID_MPEG_BASE+4)
+#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO      (V4L2_CID_MPEG_BASE+5)
+#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO      (V4L2_CID_MPEG_BASE+6)
+
+/*  MPEG audio */
+#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ      (V4L2_CID_MPEG_BASE+100)
+enum v4l2_mpeg_audio_sampling_freq {
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
+       V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000,
+};
+#define V4L2_CID_MPEG_AUDIO_ENCODING           (V4L2_CID_MPEG_BASE+101)
+enum v4l2_mpeg_audio_encoding {
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_1,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_2,
+       V4L2_MPEG_AUDIO_ENCODING_LAYER_3,
+};
+#define V4L2_CID_MPEG_AUDIO_L1_BITRATE                 (V4L2_CID_MPEG_BASE+102)
+enum v4l2_mpeg_audio_l1_bitrate {
+       V4L2_MPEG_AUDIO_L1_BITRATE_32K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_64K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_96K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_128K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_160K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_192K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_224K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_256K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_288K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_320K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_352K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_384K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_416K,
+       V4L2_MPEG_AUDIO_L1_BITRATE_448K,
+};
+#define V4L2_CID_MPEG_AUDIO_L2_BITRATE                 (V4L2_CID_MPEG_BASE+103)
+enum v4l2_mpeg_audio_l2_bitrate {
+       V4L2_MPEG_AUDIO_L2_BITRATE_32K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_48K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_56K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_64K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_80K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_96K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_112K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_128K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_160K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_192K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_224K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_256K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_320K,
+       V4L2_MPEG_AUDIO_L2_BITRATE_384K,
+};
+#define V4L2_CID_MPEG_AUDIO_L3_BITRATE                 (V4L2_CID_MPEG_BASE+104)
+enum v4l2_mpeg_audio_l3_bitrate {
+       V4L2_MPEG_AUDIO_L3_BITRATE_32K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_40K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_48K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_56K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_64K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_80K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_96K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_112K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_128K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_160K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_192K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_224K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_256K,
+       V4L2_MPEG_AUDIO_L3_BITRATE_320K,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE               (V4L2_CID_MPEG_BASE+105)
+enum v4l2_mpeg_audio_mode {
+       V4L2_MPEG_AUDIO_MODE_STEREO,
+       V4L2_MPEG_AUDIO_MODE_JOINT_STEREO,
+       V4L2_MPEG_AUDIO_MODE_DUAL,
+       V4L2_MPEG_AUDIO_MODE_MONO,
+};
+#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION     (V4L2_CID_MPEG_BASE+106)
+enum v4l2_mpeg_audio_mode_extension {
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12,
+       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16,
+};
+#define V4L2_CID_MPEG_AUDIO_EMPHASIS           (V4L2_CID_MPEG_BASE+107)
+enum v4l2_mpeg_audio_emphasis {
+       V4L2_MPEG_AUDIO_EMPHASIS_NONE,
+       V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS,
+       V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17,
+};
+#define V4L2_CID_MPEG_AUDIO_CRC                (V4L2_CID_MPEG_BASE+108)
+enum v4l2_mpeg_audio_crc {
+       V4L2_MPEG_AUDIO_CRC_NONE,
+       V4L2_MPEG_AUDIO_CRC_CRC16,
+};
+
+/*  MPEG video */
+#define V4L2_CID_MPEG_VIDEO_ENCODING           (V4L2_CID_MPEG_BASE+200)
+enum v4l2_mpeg_video_encoding {
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_1,
+       V4L2_MPEG_VIDEO_ENCODING_MPEG_2,
+};
+#define V4L2_CID_MPEG_VIDEO_ASPECT             (V4L2_CID_MPEG_BASE+201)
+enum v4l2_mpeg_video_aspect {
+       V4L2_MPEG_VIDEO_ASPECT_1x1,
+       V4L2_MPEG_VIDEO_ASPECT_4x3,
+       V4L2_MPEG_VIDEO_ASPECT_16x9,
+       V4L2_MPEG_VIDEO_ASPECT_221x100,
+};
+#define V4L2_CID_MPEG_VIDEO_B_FRAMES           (V4L2_CID_MPEG_BASE+202)
+#define V4L2_CID_MPEG_VIDEO_GOP_SIZE           (V4L2_CID_MPEG_BASE+203)
+#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE        (V4L2_CID_MPEG_BASE+204)
+#define V4L2_CID_MPEG_VIDEO_PULLDOWN           (V4L2_CID_MPEG_BASE+205)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE       (V4L2_CID_MPEG_BASE+206)
+enum v4l2_mpeg_video_bitrate_mode {
+       V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
+       V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
+};
+#define V4L2_CID_MPEG_VIDEO_BITRATE            (V4L2_CID_MPEG_BASE+207)
+#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK       (V4L2_CID_MPEG_BASE+208)
+#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
+
+/*  MPEG-class control IDs specific to the CX2584x driver as defined by V4L2 */
+#define V4L2_CID_MPEG_CX2341X_BASE                             (V4L2_CTRL_CLASS_MPEG | 0x1000)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE        (V4L2_CID_MPEG_CX2341X_BASE+0)
+enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL,
+       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER             (V4L2_CID_MPEG_CX2341X_BASE+1)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE   (V4L2_CID_MPEG_CX2341X_BASE+2)
+enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE,
+       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE         (V4L2_CID_MPEG_CX2341X_BASE+3)
+enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF,
+       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE       (V4L2_CID_MPEG_CX2341X_BASE+4)
+enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL,
+       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER            (V4L2_CID_MPEG_CX2341X_BASE+5)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE                 (V4L2_CID_MPEG_CX2341X_BASE+6)
+enum v4l2_mpeg_cx2341x_video_median_filter_type {
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT,
+       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG,
+};
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM  (V4L2_CID_MPEG_CX2341X_BASE+7)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP     (V4L2_CID_MPEG_CX2341X_BASE+8)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM        (V4L2_CID_MPEG_CX2341X_BASE+9)
+#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP   (V4L2_CID_MPEG_CX2341X_BASE+10)
+
 /*
  *     T U N I N G
  */
@@ -1020,6 +1236,9 @@ struct v4l2_streamparm
 #define VIDIOC_G_SLICED_VBI_CAP _IOR  ('V', 69, struct v4l2_sliced_vbi_cap)
 #endif
 #define VIDIOC_LOG_STATUS       _IO   ('V', 70)
+#define VIDIOC_G_EXT_CTRLS     _IOWR ('V', 71, struct v4l2_ext_controls)
+#define VIDIOC_S_EXT_CTRLS     _IOWR ('V', 72, struct v4l2_ext_controls)
+#define VIDIOC_TRY_EXT_CTRLS   _IOWR ('V', 73, struct v4l2_ext_controls)
 
 #ifdef __OLD_VIDIOC_
 /* for compatibility, will go away some day */