vserver 2.0 rc7
[linux-2.6.git] / include / linux / videodev2.h
index 68a5ce4..4e0edce 100644 (file)
@@ -268,64 +268,92 @@ struct v4l2_timecode
 /* The above is based on SMPTE timecodes */
 
 
+#if 1
 /*
- *     C O M P R E S S I O N   P A R A M E T E R S
+ *     M P E G   C O M P R E S S I O N   P A R A M E T E R S
+ *
+ *  ### WARNING: this is still work-in-progress right now, most likely
+ *  ###          there will be some incompatible changes.
+ *
  */
-#if 0
-/* ### generic compression settings don't work, there is too much
- * ### codec-specific stuff.  Maybe reuse that for MPEG codec settings
- * ### later ... */
-struct v4l2_compression
-{
-       __u32   quality;
-       __u32   keyframerate;
-       __u32   pframerate;
-       __u32   reserved[5];
-
-/*  what we'll need for MPEG, extracted from some postings on
-    the v4l list (Gert Vervoort, PlasmaJohn).
-
-system stream:
-  - type: elementary stream(ES), packatised elementary stream(s) (PES)
-    program stream(PS), transport stream(TS)
-  - system bitrate
-  - PS packet size (DVD: 2048 bytes, VCD: 2324 bytes)
-  - TS video PID
-  - TS audio PID
-  - TS PCR PID
-  - TS system information tables (PAT, PMT, CAT, NIT and SIT)
-  - (MPEG-1 systems stream vs. MPEG-2 program stream (TS not supported
-    by MPEG-1 systems)
-
-audio:
-  - type: MPEG (+Layer I,II,III), AC-3, LPCM
-  - bitrate
-  - sampling frequency (DVD: 48 Khz, VCD: 44.1 KHz, 32 kHz)
-  - Trick Modes? (ff, rew)
-  - Copyright
-  - Inverse Telecine
-
-video:
-  - picturesize (SIF, 1/2 D1, 2/3 D1, D1) and PAL/NTSC norm can be set
-    through excisting V4L2 controls
-  - noise reduction, parameters encoder specific?
-  - MPEG video version: MPEG-1, MPEG-2
-  - GOP (Group Of Pictures) definition:
-    - N: number of frames per GOP
-    - M: distance between reference (I,P) frames
-    - open/closed GOP
-  - quantiser matrix: inter Q matrix (64 bytes) and intra Q matrix (64 bytes)
-  - quantiser scale: linear or logarithmic
-  - scanning: alternate or zigzag
-  - bitrate mode: CBR (constant bitrate) or VBR (variable bitrate).
-  - target video bitrate for CBR
-  - target video bitrate for VBR
-  - maximum video bitrate for VBR - min. quantiser value for VBR
-  - max. quantiser value for VBR
-  - adaptive quantisation value
-  - return the number of bytes per GOP or bitrate for bitrate monitoring
-
-*/
+
+
+enum v4l2_bitrate_mode {
+       V4L2_BITRATE_NONE = 0,  /* not specified */
+       V4L2_BITRATE_CBR,       /* constant bitrate */
+       V4L2_BITRATE_VBR,       /* variable bitrate */
+};
+struct v4l2_bitrate {
+       /* rates are specified in kbit/sec */
+       enum v4l2_bitrate_mode  mode;
+       __u32                   min;
+       __u32                   target;  /* use this one for CBR */
+       __u32                   max;
+};
+
+enum v4l2_mpeg_streamtype {
+       V4L2_MPEG_SS_1,         /* MPEG-1 system stream */
+       V4L2_MPEG_PS_2,         /* MPEG-2 program stream */
+       V4L2_MPEG_TS_2,         /* MPEG-2 transport stream */
+       V4L2_MPEG_PS_DVD,       /* MPEG-2 program stream with DVD header fixups */
+};
+enum v4l2_mpeg_audiotype {
+       V4L2_MPEG_AU_2_I,       /* MPEG-2 layer 1 */
+       V4L2_MPEG_AU_2_II,      /* MPEG-2 layer 2 */
+       V4L2_MPEG_AU_2_III,     /* MPEG-2 layer 3 */
+       V4L2_MPEG_AC3,          /* AC3 */
+       V4L2_MPEG_LPCM,         /* LPCM */
+};
+enum v4l2_mpeg_videotype {
+       V4L2_MPEG_VI_1,         /* MPEG-1 */
+       V4L2_MPEG_VI_2,         /* MPEG-2 */
+};
+enum v4l2_mpeg_aspectratio {
+       V4L2_MPEG_ASPECT_SQUARE = 1,   /* square pixel */
+       V4L2_MPEG_ASPECT_4_3    = 2,   /*  4 : 3       */
+       V4L2_MPEG_ASPECT_16_9   = 3,   /* 16 : 9       */
+       V4L2_MPEG_ASPECT_1_221  = 4,   /*  1 : 2,21    */
+};
+
+struct v4l2_mpeg_compression {
+       /* general */
+       enum v4l2_mpeg_streamtype       st_type;
+       struct v4l2_bitrate             st_bitrate;
+
+       /* transport streams */
+       __u16                           ts_pid_pmt;
+       __u16                           ts_pid_audio;
+       __u16                           ts_pid_video;
+       __u16                           ts_pid_pcr;
+
+       /* program stream */
+       __u16                           ps_size;
+       __u16                           reserved_1;    /* align */
+
+       /* audio */
+       enum v4l2_mpeg_audiotype        au_type;
+       struct v4l2_bitrate             au_bitrate;
+       __u32                           au_sample_rate;
+       __u8                            au_pesid;
+       __u8                            reserved_2[3]; /* align */
+
+       /* video */
+       enum v4l2_mpeg_videotype        vi_type;
+       enum v4l2_mpeg_aspectratio      vi_aspect_ratio;
+       struct v4l2_bitrate             vi_bitrate;
+       __u32                           vi_frame_rate;
+       __u16                           vi_frames_per_gop;
+       __u16                           vi_bframes_count;
+       __u8                            vi_pesid;
+       __u8                            reserved_3[3]; /* align */
+
+       /* misc flags */
+       __u32                           closed_gops:1;
+       __u32                           pulldown:1;
+       __u32                           reserved_4:30; /* align */
+
+       /* I don't expect the above being perfect yet ;) */
+       __u32                           reserved_5[8];
 };
 #endif
 
@@ -841,9 +869,9 @@ struct v4l2_streamparm
 #define VIDIOC_ENUM_FMT         _IOWR ('V',  2, struct v4l2_fmtdesc)
 #define VIDIOC_G_FMT           _IOWR ('V',  4, struct v4l2_format)
 #define VIDIOC_S_FMT           _IOWR ('V',  5, struct v4l2_format)
-#if 0
-#define VIDIOC_G_COMP          _IOR  ('V',  6, struct v4l2_compression)
-#define VIDIOC_S_COMP          _IOW  ('V',  7, struct v4l2_compression)
+#if 1 /* experimental */
+#define VIDIOC_G_MPEGCOMP       _IOR  ('V',  6, struct v4l2_mpeg_compression)
+#define VIDIOC_S_MPEGCOMP      _IOW  ('V',  7, struct v4l2_mpeg_compression)
 #endif
 #define VIDIOC_REQBUFS         _IOWR ('V',  8, struct v4l2_requestbuffers)
 #define VIDIOC_QUERYBUF                _IOWR ('V',  9, struct v4l2_buffer)