V4L2命令之 VIDIOC_G_PARM, VIDIOC_S_PARM

http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-g-parm.html


Name

VIDIOC_G_PARM, VIDIOC_S_PARM — Get or set streaming parameters //获取或设置数据流的参数,一般设置帧率等参数

Synopsis

int ioctl(int fd,

int request,

v4l2_streamparm *argp);
 

Arguments

fd

File descriptor returned by open().

request

VIDIOC_G_PARM, VIDIOC_S_PARM

argp

Description

The current video standard determines a nominal number of frames per second. If less than this number of frames is to be captured or output, applications can request frame skipping or duplicating on the driver side. This is especially useful when using the read() or write(), which are not augmented by timestamps or sequence counters, and to avoid unnecessary data copying.

Further these ioctls can be used to determine the number of buffers used internally by a driver in read/write mode. For implications see the section discussing the read()function.

To get and set the streaming parameters applications call the VIDIOC_G_PARM and VIDIOC_S_PARM ioctl, respectively. They take apointer to a struct v4l2_streamparm which contains a union holding separate parameters for input and output devices.

Table A.73. struct v4l2_streamparm

__u32type
The buffer (stream) type, same as struct v4l2_formattype, set by the application. See Table 3.3, “enum v4l2_buf_type”
unionparm


struct v4l2_captureparmcaptureParameters for capture devices, used whentype is V4L2_BUF_TYPE_VIDEO_CAPTURE.

struct v4l2_outputparmoutputParameters for output devices, used whentype is V4L2_BUF_TYPE_VIDEO_OUTPUT.

__u8raw_data[200]A place holder for future extensions.

Table A.74. struct v4l2_captureparm

__u32capabilitySee Table A.76, “Streaming Parameters Capabilites”.
__u32capturemodeSet by drivers and applications, see Table A.77, “Capture Parameters Flags”.
struct v4l2_fracttimeperframe

This is the desired period between successive frames captured by the driver, in seconds. The field is intended to skip frames on the driver side, saving I/O bandwidth.

Applications store here the desired frame period, drivers return the actual frame period, which must be greater or equal to the nominal frame period determined by the current video standard (struct v4l2_standard frameperiod  field). Changing the video standard (also implicitly by switching the video input) may reset this parameter to the nominal frame period. Toreset manually applications can just set this field to zero.

Drivers support this function only when they set the V4L2_CAP_TIMEPERFRAME flag in the capability  field.

__u32extendedmodeCustom (driver specific) streaming parameters. When unused, applications and drivers must set this field to zero.Applications using this field should check the driver name and version, see the section called “Querying Capabilities”.
__u32readbuffersApplications set this field to the desired number of buffers used internally by the driver in read() mode. Drivers return the actual number of buffers. When an application requests zero buffers, drivers should just return the current setting rather than the minimum or an error code. For details see the section called “Read/Write”.
__u32reserved[4]Reserved for future extensions. Drivers andapplications must set the array to zero.

Table A.75. struct v4l2_outputparm

__u32capabilitySee Table A.76, “Streaming Parameters Capabilites”.
__u32outputmodeSet by drivers and applications, see Table A.77, “Capture Parameters Flags”.
struct v4l2_fracttimeperframeThis is the desired period betweensuccessive frames output by the driver, in seconds.

The field is intended torepeat frames on the driver side in write() mode (in streamingmode timestamps can be used to throttle the output), saving I/Obandwidth.

Applications store here the desired frameperiod, drivers return the actual frame period, which must be greateror equal to the nominal frame period determined by the current videostandard (struct v4l2_standard frameperiodfield). Changing the video standard (also implicitly by switching thevideo output) may reset this parameter to the nominal frame period. Toreset manually applications can just set this field tozero.

Drivers support this function only when they set theV4L2_CAP_TIMEPERFRAME flag in thecapability field.

__u32extendedmodeCustom (driver specific) streaming parameters. Whenunused, applications and drivers must set this field to zero.Applications using this field should check the driver name andversion, see the section called “Querying Capabilities”.
__u32writebuffersApplications set this field to the desired numberof buffers used internally by the driver inwrite() mode. Drivers return the actual number ofbuffers. When an application requests zero buffers, drivers shouldjust return the current setting rather than the minimum or an errorcode. For details see the section called “Read/Write”.
__u32reserved[4]Reserved for future extensions. Drivers andapplications must set the array to zero.

Table A.76. Streaming Parameters Capabilites

V4L2_CAP_TIMEPERFRAME0x1000The frame skipping/repeating controlled by thetimeperframe field is supported.

Table A.77. Capture Parameters Flags

V4L2_MODE_HIGHQUALITY0x0001

High quality imaging mode. High quality modeis intended for still imaging applications. The idea is to get thebest possible image quality that the hardware can deliver. It is notdefined how the driver writer may achieve that; it will depend on thehardware and the ingenuity of the driver writer. High quality mode isa different mode from the the regular motion video capture modes. Inhigh quality mode:

  • The driver may be able to capture higherresolutions than for motion capture.

  • The driver may support fewer pixel formatsthan motion capture (eg; true color).

  • The driver may capture and arithmeticallycombine multiple successive fields or frames to remove color edgeartifacts and reduce the noise in the video data.

  • The driver may capture images in slices likea scanner in order to handle larger format images than would otherwisebe possible.

  • An image capture operation may besignificantly slower than motion capture.

  • Moving objects in the image might haveexcessive motion blur.

  • Capture might only work through theread() call.


Return Value

On success 0 is returned, on error -1 and the errno variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter.


例子:

        /* set framerate */
    struct v4l2_streamparm* setfps;  
    setfps=(struct v4l2_streamparm *) calloc(1, sizeof(struct v4l2_streamparm));
    memset(setfps, 0, sizeof(struct v4l2_streamparm));
    setfps->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    setfps->parm.capture.timeperframe.numerator=1;
    setfps->parm.capture.timeperframe.denominator=vd->fps;//15
    ret = ioctl(vd->fd, VIDIOC_S_PARM, setfps);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值