在网上看到下面的一段话
/*
VIDIOC_S_PARM
set stream param
设置流参数,这个和video capture是相同的,这里的param.type是V4L2_BUF_TYPE_VIDEO_CAPTURE,其中timeperframe的分母是需要设定的帧率,而分子是1。
ioctl(camera_device, VIDIOC_S_PARM, &parm) ;
[PS]这里补充一点stream param方面的spec:
一般来说当前的帧率是由当前的视频标准来决定的,如果默认采用视频标准的帧率就不需要设置流参数,但是如果想获得或者设定自己的帧率就需要使用VIDIOC_G_PARM, VIDIOC_S_PARM:
int ioctl(int fd, int request, v4l2_streamparm *argp);
struct v4l2_stramparam包含以下主要成员:
enum v4l2_buf_type type
union param
struct v4l2_captureparm capture
struct v4l2_outputparam output
//要注意的是在这里,不管是overaly还是capture,这里的buffer type都是选择的V4L2_BUF_TYPE_VIDEO_CAPTURE。
Struct v4l2_captureparam包含以下主要成员:
__u32 capturemode
//是否支持高质量图像捕捉
struct v4l2_fract timeperframe
//设置帧率,通过分母分子实现
这里要注意的是,通过 VIDIOC_S_PARM设置帧率不一定成功,driver会根据硬件限制来设置这些参数,所以一般设置以后可以通过VIDIOC_G_PARM来看设定是否成功。
*/
但是在v4l2中的所有程序没有找到v4l2_streamparm的结构体初始化,请问DM365的帧率是在v4l2驱动中设置吗?还是在别的什么地方设置?
Ternence_Hsu:
你好;
在 dvsdk_2_10_01_18/dvsdk_demos_2_10_00_17/dm365/encode/main.c 中有一个配置帧率的参数,你可以修改为对应的帧率
if (args.videoStd == VideoStd_D1_PAL) {videoEnv.videoFrameRate= 25000;} else {videoEnv.videoFrameRate= 30000;}