提交 51f0b8d5 编写于 作者: T Trent Piepho 提交者: Mauro Carvalho Chehab

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: NTrent Piepho <xyzzy@speakeasy.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 337f9d20
...@@ -2932,13 +2932,11 @@ static int bttv_g_parm(struct file *file, void *f, ...@@ -2932,13 +2932,11 @@ static int bttv_g_parm(struct file *file, void *f,
{ {
struct bttv_fh *fh = f; struct bttv_fh *fh = f;
struct bttv *btv = fh->btv; struct bttv *btv = fh->btv;
struct v4l2_standard s;
if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL; return -EINVAL;
v4l2_video_std_construct(&s, bttv_tvnorms[btv->tvnorm].v4l2_id, v4l2_video_std_frame_period(bttv_tvnorms[btv->tvnorm].v4l2_id,
bttv_tvnorms[btv->tvnorm].name); &parm->parm.capture.timeperframe);
parm->parm.capture.timeperframe = s.frameperiod;
return 0; return 0;
} }
......
...@@ -101,25 +101,27 @@ const char *v4l2_norm_to_name(v4l2_std_id id) ...@@ -101,25 +101,27 @@ const char *v4l2_norm_to_name(v4l2_std_id id)
} }
EXPORT_SYMBOL(v4l2_norm_to_name); 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 /* Fill in the fields of a v4l2_standard structure according to the
'id' and 'transmission' parameters. Returns negative on error. */ 'id' and 'transmission' parameters. Returns negative on error. */
int v4l2_video_std_construct(struct v4l2_standard *vs, int v4l2_video_std_construct(struct v4l2_standard *vs,
int id, const char *name) int id, const char *name)
{ {
u32 index = vs->index; vs->id = id;
v4l2_video_std_frame_period(id, &vs->frameperiod);
memset(vs, 0, sizeof(struct v4l2_standard)); vs->framelines = (id & V4L2_STD_525_60) ? 525 : 625;
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;
}
strlcpy(vs->name, name, sizeof(vs->name)); strlcpy(vs->name, name, sizeof(vs->name));
return 0; return 0;
} }
...@@ -1076,7 +1078,6 @@ static long __video_do_ioctl(struct file *file, ...@@ -1076,7 +1078,6 @@ static long __video_do_ioctl(struct file *file,
return -EINVAL; return -EINVAL;
v4l2_video_std_construct(p, curr_id, descr); v4l2_video_std_construct(p, curr_id, descr);
p->index = index;
dbgarg(cmd, "index=%d, id=0x%Lx, name=%s, fps=%d/%d, " dbgarg(cmd, "index=%d, id=0x%Lx, name=%s, fps=%d/%d, "
"framelines=%d\n", p->index, "framelines=%d\n", p->index,
...@@ -1565,15 +1566,11 @@ static long __video_do_ioctl(struct file *file, ...@@ -1565,15 +1566,11 @@ static long __video_do_ioctl(struct file *file,
if (ops->vidioc_g_parm) { if (ops->vidioc_g_parm) {
ret = ops->vidioc_g_parm(file, fh, p); ret = ops->vidioc_g_parm(file, fh, p);
} else { } else {
struct v4l2_standard s;
if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL; return -EINVAL;
v4l2_video_std_construct(&s, vfd->current_norm, v4l2_video_std_frame_period(vfd->current_norm,
v4l2_norm_to_name(vfd->current_norm)); &p->parm.capture.timeperframe);
p->parm.capture.timeperframe = s.frameperiod;
ret = 0; ret = 0;
} }
......
...@@ -267,6 +267,7 @@ struct v4l2_ioctl_ops { ...@@ -267,6 +267,7 @@ struct v4l2_ioctl_ops {
/* Video standard functions */ /* Video standard functions */
extern const char *v4l2_norm_to_name(v4l2_std_id id); 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, extern int v4l2_video_std_construct(struct v4l2_standard *vs,
int id, const char *name); int id, const char *name);
/* Prints the ioctl in a human-readable format */ /* Prints the ioctl in a human-readable format */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册