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.

>
> 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.

        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

Reply via email to