Commit 51f0b8d5 authored by Trent Piepho's avatar Trent Piepho Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (10813): v4l2: New function v4l2_video_std_frame_period



Some code was calling v4l2_video_std_construct() when all it cared about
was the frame period.  So make a function that just returns that and have
v4l2_video_std_construct() use it.

At this point there are no users of v4l2_video_std_construct() left outside
of v4l2-ioctl, so it could be un-exported and made static.

Change v4l2_video_std_construct() so that it doesn't zero out the struct
v4l2_standard passed in.  It's already been zeroed out in the common ioctl
code.

Signed-off-by: default avatarTrent Piepho <xyzzy@speakeasy.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 337f9d20
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -2932,13 +2932,11 @@ static int bttv_g_parm(struct file *file, void *f,
{
	struct bttv_fh *fh = f;
	struct bttv *btv = fh->btv;
	struct v4l2_standard s;

	if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
		return -EINVAL;
	v4l2_video_std_construct(&s, bttv_tvnorms[btv->tvnorm].v4l2_id,
				 bttv_tvnorms[btv->tvnorm].name);
	parm->parm.capture.timeperframe = s.frameperiod;
	v4l2_video_std_frame_period(bttv_tvnorms[btv->tvnorm].v4l2_id,
				    &parm->parm.capture.timeperframe);
	return 0;
}

+18 −21
Original line number Diff line number Diff line
@@ -101,25 +101,27 @@ const char *v4l2_norm_to_name(v4l2_std_id id)
}
EXPORT_SYMBOL(v4l2_norm_to_name);

/* Returns frame period for the given standard */
void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod)
{
	if (id & V4L2_STD_525_60) {
		frameperiod->numerator = 1001;
		frameperiod->denominator = 30000;
	} else {
		frameperiod->numerator = 1;
		frameperiod->denominator = 25;
	}
}
EXPORT_SYMBOL(v4l2_video_std_frame_period);

/* Fill in the fields of a v4l2_standard structure according to the
   'id' and 'transmission' parameters.  Returns negative on error.  */
int v4l2_video_std_construct(struct v4l2_standard *vs,
			     int id, const char *name)
{
	u32 index = vs->index;

	memset(vs, 0, sizeof(struct v4l2_standard));
	vs->index = index;
	vs->id = id;
	if (id & V4L2_STD_525_60) {
		vs->frameperiod.numerator = 1001;
		vs->frameperiod.denominator = 30000;
		vs->framelines = 525;
	} else {
		vs->frameperiod.numerator = 1;
		vs->frameperiod.denominator = 25;
		vs->framelines = 625;
	}
	v4l2_video_std_frame_period(id, &vs->frameperiod);
	vs->framelines = (id & V4L2_STD_525_60) ? 525 : 625;
	strlcpy(vs->name, name, sizeof(vs->name));
	return 0;
}
@@ -1076,7 +1078,6 @@ static long __video_do_ioctl(struct file *file,
			return -EINVAL;

		v4l2_video_std_construct(p, curr_id, descr);
		p->index = index;

		dbgarg(cmd, "index=%d, id=0x%Lx, name=%s, fps=%d/%d, "
				"framelines=%d\n", p->index,
@@ -1565,15 +1566,11 @@ static long __video_do_ioctl(struct file *file,
		if (ops->vidioc_g_parm) {
			ret = ops->vidioc_g_parm(file, fh, p);
		} else {
			struct v4l2_standard s;

			if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
				return -EINVAL;

			v4l2_video_std_construct(&s, vfd->current_norm,
						 v4l2_norm_to_name(vfd->current_norm));

			p->parm.capture.timeperframe = s.frameperiod;
			v4l2_video_std_frame_period(vfd->current_norm,
						    &p->parm.capture.timeperframe);
			ret = 0;
		}

+1 −0
Original line number Diff line number Diff line
@@ -267,6 +267,7 @@ struct v4l2_ioctl_ops {

/*  Video standard functions  */
extern const char *v4l2_norm_to_name(v4l2_std_id id);
extern void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod);
extern int v4l2_video_std_construct(struct v4l2_standard *vs,
				    int id, const char *name);
/* Prints the ioctl in a human-readable format */