Hans Verkuil wrote:
> On Saturday 14 October 2006 18:34, Duncan Webb wrote:
>> Hi all,
>>
>> I've got two question, hopefully not too stupid:
>> >From the ivtv-0.8.0 ChangeLog
>>
>> - Replaced IVTV_IOC_S/G_CODEC by the new V4L2 MPEG encoding API.
>> - Replaced IVTV_IOC_S/G_VBI_EMBED by the new V4L2 MPEG encoding API.
>>
>> 1) What are the new VIDIOC controls, for the old IVTV_IOC?
> 
> The reference section for these ioctls is already available in the v4l2 
> spec, but not yet the user-level explanation. I've finished that part 
> today and just mailed it to the v4l2 spec maintainer, but I've also 
> attached it to this mail for you to read.

Great, thanks.

>> It's not obvious from the documentation or the test programs what
>> they are.
>>
>> 2) What is the difference between set/get-set-vbi and
>> set/get-vbi-passthrough?
> 
> passthrough is for the PVR350 only: if you choose passthrough mode (e.g. 
> the tuner input is internally redirected to the TV-out) then you can 
> use this to also passthrough the VBI data, although that is limited to 
> CC for NTSC and VPS and WSS for PAL.
> 
> To be honest, I've no idea if it still works and how well it works, it's 
> rarely tested.

May get better tested now, as the svn version of MPlayer will be able to
send audio and video to the PVR-350 TV output. WSS signals will be very
good as more and more programs are coming out as 16x9. My TV adjusts
automatically to WSS data, I think.

>       Hans
> 
> 
> ------------------------------------------------------------------------
> 
> 1.9. Extended Controls
> 
> 1.9.1 Introduction
> 
> The control mechanism as originally designed was meant to be used for
> user settings (brightness, saturation, etc). However, it turned out to be a
> very useful model for implementing more complicated driver APIs where each
> driver implements only a subset of a larger API.
> 
> The MPEG encoding API was the driving force behind designing and implementing
> this extended control mechanism: the MPEG standard is quite large and the
> currently supported hardware MPEG encoders each only implement a subset of 
> this
> standard. Further more, many parameters relating to how the video is encoded 
> into
> an MPEG stream are specific to the MPEG encoding chip since the MPEG standard
> only defines the format of the resulting MPEG stream, not how the video is
> actually encoded into that format.
> 
> Unfortunately, the original control API lacked some features needed for these
> new uses and so it was extended into the (not terribly originally named) 
> extended
> control API.
> 
> 1.9.2 The Extended Control API
> 
> Three new ioctls are available: VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS
> and VIDIOC_TRY_EXT_CTRLS. These ioctls act on arrays of controls (as opposed
> to the VIDIOC_G_CTRL and VIDIOC_S_CTRL ioctls that act on a single control).
> This is needed since it is often required to set several controls 
> simulatenously
> (atomically).
> 
> Each of the new ioctls expects a pointer to a struct v4l2_ext_controls. This
> structure contains a pointer to the control array, a count of the number of
> controls in that array and a control class. Control classes are used to
> group similar controls into a single class. For example, control class 
> V4L2_CTRL_CLASS_USER
> contains all user controls (i.e. all controls that can also be set using
> the old VIDIOC_S_CTRL ioctl). Control class V4L2_CTRL_CLASS_MPEG contains
> all controls relating to MPEG encoding, etc.
> 
> All controls in the control array must belong to the specified control class.
> An error is returned if this is not the case.
> 
> It is also possible to use an empty control array (count == 0) to check 
> whether
> the specified control class is supported.
> 
> The control array is a struct v4l2_ext_control array. The v4l2_ext_control 
> struct
> is very similar to the v4l2_control struct, except for the fact that it also
> allows for 64-bit values and pointers to be passed (although the latter is not
> yet used anywhere).
> 
> It is important to realize that due to the flexibility of controls it is
> necessary to check whether the control you want to set actually is supported
> in the driver and what the valid range of values is. So use the 
> VIDIOC_QUERYCTRL
> and VIDIOC_QUERYMENU ioctls to check this. Also note that it is possible that
> some of the menu indices in a control of type V4L2_CTRL_TYPE_MENU may not
> be supported (VIDIOC_QUERYMENU will return an error). A good example is the
> list of supported MPEG audio bitrates. Some drivers only support one or two
> bitrates, others support a wider range. 
> 
> 1.9.3 Enumerating Extended Controls
> 
> The recommended way to enumerate over the extended controls is by using
> VIDIOC_QUERYCTRL in combination with the V4L2_CTRL_FLAG_NEXT_CTRL flag:
> 
>       struct v4l2_queryctrl qctrl;
> 
>       qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
>       while (ioctl(fd, VIDIOC_QUERYCTRL, &qctrl) == 0) {
>               // ...
>               qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
>       }
> 
> The initial control ID is set to 0 ORed with the V4L2_CTRL_FLAG_NEXT_CTRL 
> flag.
> The VIDIOC_QUERYCTRL will return the first control with a higher ID than the
> specified one. When no such controls are found an error is returned.
> 
> If you want to get all controls within a specific control class, then you can 
> set
> the initial qctrl.id value to the control class and add an extra check to
> break out of the loop when a control of another control class is found:
> 
>       qctrl.id = V4L2_CTRL_CLASS_MPEG | V4L2_CTRL_FLAG_NEXT_CTRL;
>       while (ioctl(fd, VIDIOC_QUERYCTRL, &qctrl) == 0) {
>               if (V4L2_CTRL_ID2CLASS(qctrl.id) != V4L2_CTRL_CLASS_MPEG)
>                       break;
>               // ...
>               qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
>       }
> 
> The 32-bit qctrl.id value is subdivided into three bit ranges: the top 4 bits
> are reserved for flags (e.g. V4L2_CTRL_FLAG_NEXT_CTRL) and are not actually 
> part
> of the ID. The remaining 28 bits form the control ID, of which the most 
> significant
> 12 bits define the control class and the least significant 16 bits identify
> the control within the control class. It is guaranteed that these last 16 bits
> are always non-zero for controls. The range of 0x1000 and up are reserved for
> driver-specific controls. The macro V4L2_CTRL_ID2CLASS(id) returns the
> control class ID based on a control ID.
> 
> If the driver does not support extended controls, then VIDIOC_QUERYCTRL will
> fail when used in combination with V4L2_CTRL_FLAG_NEXT_CTRL. In that case the 
> old
> method of enumerating control should be used (see 1.8). But if it is 
> supported, then
> it is guaranteed to enumerate over all controls, including driver-private 
> controls.
> 
> 1.9.4 Creating Control Panels
> 
> It is possible to create control panels for a graphical user interface where 
> the
> user can select the various controls. Basically you will have to iterate over 
> all
> controls using the method described above. Each control class starts with a
> control of type V4L2_CTRL_TYPE_CTRL_CLASS. VIDIOC_QUERYCTRL will return the 
> name
> of this control class which can be used as the title of a tab page within a
> control panel.
> 
> The flags field of the v4l2_queryctrl struct also contains hints on the 
> behavior
> of the control. See the VIDIOC_QUERYCTRL documentation for more details.
> 
> 1.9.5 MPEG Control Reference
> 
> Below all controls within the MPEG control class are described. First the
> generic controls, then controls specific for certain hardware.
> 
> 1.9.5.1 Generic MPEG Controls
> 
> Table 1-1. MPEG Control IDs
> ID Type Description
> 
> V4L2_CID_MPEG_CLASS class 
> The MPEG class descriptor. Calling
> VIDIOC_QUERYCTRL for this control will return a description of this control
> class. This description can be used as the caption of a Tab page in a GUI, for
> example.
> 
> V4L2_CID_MPEG_STREAM_TYPE enum 
> The MPEG-1, -2 or -4 output stream type. One
> cannot assume anything here. Each hardware MPEG encoder tends to
> support different subsets of the available MPEG stream types.
> 
> The currently defined stream types are:
> 
>       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
> 
> V4L2_CID_MPEG_STREAM_PID_PMT integer 
> Program Map Table Packet ID for the MPEG transport stream (default 16)
> 
> V4L2_CID_MPEG_STREAM_PID_AUDIO integer 
> Audio Packet ID for the MPEG transport stream (default 256)
> 
> V4L2_CID_MPEG_STREAM_PID_VIDEO integer 
> Video Packet ID for the MPEG transport stream (default 260)
> 
> V4L2_CID_MPEG_STREAM_PID_PCR integer 
> Packet ID for the MPEG transport stream carrying PCR fields (default 259)
> 
> V4L2_CID_MPEG_STREAM_PES_ID_AUDIO integer 
> Audio ID for MPEG PES.
> 
> V4L2_CID_MPEG_STREAM_PES_ID_VIDEO integer 
> Video ID for MPEG PES.
> 
> V4L2_CID_MPEG_STREAM_VBI_FMT enum 
> Some cards can embed VBI data (e.g. Closed
> Captions, teletext, etc) into the MPEG stream. This control selects whether
> VBI data should be embedded, and if so, what embedding method should be used.
> The list of possible VBI formats depends on the driver.
> 
> The currently defined VBI format types are:
> 
>       V4L2_MPEG_STREAM_VBI_FMT_NONE No VBI in the MPEG stream
>       V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI in private packets, IVTV format
> (documented in README.vbi)
> 
> V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ enum 
> MPEG Audio sampling frequency. Possible values are:
> 
>       V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 44.1 kHz
>       V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 48 kHz
>       V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 32 kHz
> 
> V4L2_CID_MPEG_AUDIO_ENCODING enum 
> MPEG Audio encoding. Possible values are:
> 
>       V4L2_MPEG_AUDIO_ENCODING_LAYER_1 MPEG Layer I encoding
>       V4L2_MPEG_AUDIO_ENCODING_LAYER_2 MPEG Layer II encoding
>       V4L2_MPEG_AUDIO_ENCODING_LAYER_3 MPEG Layer III encoding
> 
> V4L2_CID_MPEG_AUDIO_L1_BITRATE enum 
> Layer I bitrate. Possible values are:
> 
>       V4L2_MPEG_AUDIO_L1_BITRATE_32K  32 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_64K  64 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_96K  96 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_128K 128 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_160K 160 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_192K 192 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_224K 224 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_256K 256 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_288K 288 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_320K 320 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_352K 352 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_384K 384 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_416K 416 kbit/s
>       V4L2_MPEG_AUDIO_L1_BITRATE_448K 448 kbit/s
> 
> V4L2_CID_MPEG_AUDIO_L2_BITRATE enum 
> Layer II bitrate. Possible values are:
> 
>       V4L2_MPEG_AUDIO_L2_BITRATE_32K  32 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_48K  48 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_56K  56 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_64K  64 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_80K  80 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_96K  96 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_112K 112 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_128K 128 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_160K 160 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_192K 192 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_224K 224 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_256K 256 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_320K 320 kbit/s
>       V4L2_MPEG_AUDIO_L2_BITRATE_384K 384 kbit/s
> 
> V4L2_CID_MPEG_AUDIO_L3_BITRATE enum 
> Layer III bitrate. Possible values are:
> 
>       V4L2_MPEG_AUDIO_L3_BITRATE_32K  32 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_40K  40 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_48K  48 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_56K  56 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_64K  64 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_80K  80 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_96K  96 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_112K 112 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_128K 128 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_160K 160 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_192K 192 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_224K 224 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_256K 256 kbit/s
>       V4L2_MPEG_AUDIO_L3_BITRATE_320K 320 kbit/s
> 
> V4L2_CID_MPEG_AUDIO_MODE enum 
> MPEG Audio mode. Possible values are:
> 
>       V4L2_MPEG_AUDIO_MODE_STEREO       Stereo
>       V4L2_MPEG_AUDIO_MODE_JOINT_STEREO Joint Stereo
>       V4L2_MPEG_AUDIO_MODE_DUAL         Bilingual
>       V4L2_MPEG_AUDIO_MODE_MONO         Mono
> 
> V4L2_CID_MPEG_AUDIO_MODE_EXTENSION enum 
> Joint Stereo audio mode extension.
> In Layer I and II they indicate which subbands are in intensity stereo. All
> other subbands are coded in stereo. Layer III is not (yet) supported.
> 
> Possible values are:
> 
>       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  subbands 4-31 in intensity 
> stereo
>       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  subbands 8-31 in intensity 
> stereo
>       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 subbands 12-31 in intensity 
> stereo
>       V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 subbands 16-31 in intensity 
> stereo
> 
> V4L2_CID_MPEG_AUDIO_EMPHASIS enum 
> Audio Emphasis. Possible values are:
> 
>       V4L2_MPEG_AUDIO_EMPHASIS_NONE         None
>       V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS 50/15 microsecond emphasis
>       V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    CCITT J.17
> 
> V4L2_CID_MPEG_AUDIO_CRC enum 
> CRC method. Possible values are:
> 
>       V4L2_MPEG_AUDIO_CRC_NONE  None
>       V4L2_MPEG_AUDIO_CRC_CRC16 16 bit parity check
> 
> V4L2_CID_MPEG_VIDEO_ENCODING enum 
> MPEG Video encoding method. Possible values are:
>       V4L2_MPEG_VIDEO_ENCODING_MPEG_1 MPEG-1 Video encoding.
>       V4L2_MPEG_VIDEO_ENCODING_MPEG_2 MPEG-2 Video encoding.
> 
> V4L2_CID_MPEG_VIDEO_ASPECT enum 
> Video aspect. Possible values are:
> 
>       V4L2_MPEG_VIDEO_ASPECT_1x1
>       V4L2_MPEG_VIDEO_ASPECT_4x3
>       V4L2_MPEG_VIDEO_ASPECT_16x9
>       V4L2_MPEG_VIDEO_ASPECT_221x100
> 
> V4L2_CID_MPEG_VIDEO_B_FRAMES integer 
> Number of B-Frames. (Default 2)
> 
> V4L2_CID_MPEG_VIDEO_GOP_SIZE integer 
> GOP size. (Default 12)
> 
> V4L2_CID_MPEG_VIDEO_GOP_CLOSURE bool 
> GOP closure. (Default 1)
> 
> V4L2_CID_MPEG_VIDEO_PULLDOWN bool 
> Enable 3:2 pulldown (Default 0)
> 
> V4L2_CID_MPEG_VIDEO_BITRATE_MODE enum 
> Video bitrate mode. Possible values are:
> 
>       V4L2_MPEG_VIDEO_BITRATE_MODE_VBR Variable bitrate
>       V4L2_MPEG_VIDEO_BITRATE_MODE_CBR Constant bitrate
> 
> V4L2_CID_MPEG_VIDEO_BITRATE integer 
> Video bitrate in bits per second.
> 
> V4L2_CID_MPEG_VIDEO_BITRATE_PEAK integer 
> Peak video bitrate in bits per second.
> Must be larger or equal to the average video bitrate. It is ignored if the
> video bitrate mode is set to Constant bitrate.
> 
> V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION integer 
> For every captured frame, skip this many subsequent frames. (Default 0).
> 
> 1.9.5.2 CX2341x MPEG Controls
> 
> Table 1-2. CX2341x MPEG Control IDs
> ID Type Description
> 
> The following MPEG class controls deal
> with MPEG encoding settings that are specific to the Conexant CX23415/6 MPEG 
> encoding
> chips.
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE enum 
> Sets the Spatial Filter mode (Default: manual). Possible values are:
> 
>       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL Choose the filter
> manually
>       V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO  Choose the filter
> automatically
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER integer (0-15) 
> The setting for the Spatial Filter. 0 = off, 15 = maximum. (Default 0)
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE enum 
> Select the algorithm to use for the Luma Spatial Filter (Default 1D_HOR). 
> Possible values:
> 
>       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF No filter
>       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR One-dimensional 
> horizontal
>       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT 
> One-dimensional vertical
>       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE 
> Two-dimensional separable
>       V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE 
> Two-dimensional symmetrical non-separable
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE enum 
> Select the algorithm for the Chroma Spatial Filter (Default 1D_HOR). Possible 
> values are:
> 
>       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF No filter
>       V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR
> One-dimensional horizontal
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE enum 
> Sets the Temporal Filter mode (Default: manual). Possible values are:
> 
>       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL Choose the filter
> manually
>       V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO Choose the filter
> automatically
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER integer (0-31) 
> The setting for the Temporal Filter. 0 = off, 31 = maximum. (Default is 8 for 
> full-scale capturing
> and 0 for scaled capturing).
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE enum 
> Median Filter Type (Default OFF). Possible values are:
> 
>       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF No filter
>       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR  Horizontal filter
>       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT Vertical filter
>       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT Horizontal and
> Vertical filter
>       V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG Diagonal filter
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM integer (0-255) 
> Threshold above which the luminance median filter is enabled.  (Default 0)
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP integer (0-255) 
> Threshold below which the luminance median filter is enabled (Default 255)
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM       integer (0-255) 
> Threshold above which the chroma median filter is enabled (Default 0)
> 
> V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP integer (0-255) 
> Threshold below which the chroma median filter is enabled (Default 255)
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> ivtv-devel mailing list
> [email protected]
> http://ivtvdriver.org/mailman/listinfo/ivtv-devel



_______________________________________________
ivtv-devel mailing list
[email protected]
http://ivtvdriver.org/mailman/listinfo/ivtv-devel

Reply via email to