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