mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
V4L/DVB (6911): Converted bttv to use video_ioctl2
Signed-off-by: Douglas Schilling Landgraf <dougsland@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
4041f1a587
commit
402aa76aa5
File diff suppressed because it is too large
Load Diff
@ -236,10 +236,8 @@ struct videobuf_queue_ops bttv_vbi_qops = {
|
|||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
static int
|
static int try_fmt(struct v4l2_vbi_format *f, const struct bttv_tvnorm *tvnorm,
|
||||||
try_fmt (struct v4l2_vbi_format * f,
|
__s32 crop_start)
|
||||||
const struct bttv_tvnorm * tvnorm,
|
|
||||||
__s32 crop_start)
|
|
||||||
{
|
{
|
||||||
__s32 min_start, max_start, max_end, f2_offset;
|
__s32 min_start, max_start, max_end, f2_offset;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -305,10 +303,9 @@ try_fmt (struct v4l2_vbi_format * f,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int vidioc_try_fmt_vbi(struct file *file, void *f, struct v4l2_format *frt)
|
||||||
bttv_vbi_try_fmt (struct bttv_fh * fh,
|
|
||||||
struct v4l2_vbi_format * f)
|
|
||||||
{
|
{
|
||||||
|
struct bttv_fh *fh = f;
|
||||||
struct bttv *btv = fh->btv;
|
struct bttv *btv = fh->btv;
|
||||||
const struct bttv_tvnorm *tvnorm;
|
const struct bttv_tvnorm *tvnorm;
|
||||||
__s32 crop_start;
|
__s32 crop_start;
|
||||||
@ -320,13 +317,13 @@ bttv_vbi_try_fmt (struct bttv_fh * fh,
|
|||||||
|
|
||||||
mutex_unlock(&btv->lock);
|
mutex_unlock(&btv->lock);
|
||||||
|
|
||||||
return try_fmt(f, tvnorm, crop_start);
|
return try_fmt(&frt->fmt.vbi, tvnorm, crop_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
bttv_vbi_set_fmt (struct bttv_fh * fh,
|
int vidioc_s_fmt_vbi(struct file *file, void *f, struct v4l2_format *frt)
|
||||||
struct v4l2_vbi_format * f)
|
|
||||||
{
|
{
|
||||||
|
struct bttv_fh *fh = f;
|
||||||
struct bttv *btv = fh->btv;
|
struct bttv *btv = fh->btv;
|
||||||
const struct bttv_tvnorm *tvnorm;
|
const struct bttv_tvnorm *tvnorm;
|
||||||
__s32 start1, end;
|
__s32 start1, end;
|
||||||
@ -340,11 +337,12 @@ bttv_vbi_set_fmt (struct bttv_fh * fh,
|
|||||||
|
|
||||||
tvnorm = &bttv_tvnorms[btv->tvnorm];
|
tvnorm = &bttv_tvnorms[btv->tvnorm];
|
||||||
|
|
||||||
rc = try_fmt(f, tvnorm, btv->crop_start);
|
rc = try_fmt(&frt->fmt.vbi, tvnorm, btv->crop_start);
|
||||||
if (0 != rc)
|
if (0 != rc)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
start1 = f->start[1] - tvnorm->vbistart[1] + tvnorm->vbistart[0];
|
start1 = frt->fmt.vbi.start[1] - tvnorm->vbistart[1] +
|
||||||
|
tvnorm->vbistart[0];
|
||||||
|
|
||||||
/* First possible line of video capturing. Should be
|
/* First possible line of video capturing. Should be
|
||||||
max(f->start[0] + f->count[0], start1 + f->count[1]) * 2
|
max(f->start[0] + f->count[0], start1 + f->count[1]) * 2
|
||||||
@ -352,11 +350,11 @@ bttv_vbi_set_fmt (struct bttv_fh * fh,
|
|||||||
pretend the VBI and video capture window may overlap,
|
pretend the VBI and video capture window may overlap,
|
||||||
so end = start + 1, the lowest possible value, times two
|
so end = start + 1, the lowest possible value, times two
|
||||||
because vbi_fmt.end counts field lines times two. */
|
because vbi_fmt.end counts field lines times two. */
|
||||||
end = max(f->start[0], start1) * 2 + 2;
|
end = max(frt->fmt.vbi.start[0], start1) * 2 + 2;
|
||||||
|
|
||||||
mutex_lock(&fh->vbi.lock);
|
mutex_lock(&fh->vbi.lock);
|
||||||
|
|
||||||
fh->vbi_fmt.fmt = *f;
|
fh->vbi_fmt.fmt = frt->fmt.vbi;
|
||||||
fh->vbi_fmt.tvnorm = tvnorm;
|
fh->vbi_fmt.tvnorm = tvnorm;
|
||||||
fh->vbi_fmt.end = end;
|
fh->vbi_fmt.end = end;
|
||||||
|
|
||||||
@ -370,13 +368,13 @@ bttv_vbi_set_fmt (struct bttv_fh * fh,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
bttv_vbi_get_fmt (struct bttv_fh * fh,
|
int vidioc_g_fmt_vbi(struct file *file, void *f, struct v4l2_format *frt)
|
||||||
struct v4l2_vbi_format * f)
|
|
||||||
{
|
{
|
||||||
|
struct bttv_fh *fh = f;
|
||||||
const struct bttv_tvnorm *tvnorm;
|
const struct bttv_tvnorm *tvnorm;
|
||||||
|
|
||||||
*f = fh->vbi_fmt.fmt;
|
frt->fmt.vbi = fh->vbi_fmt.fmt;
|
||||||
|
|
||||||
tvnorm = &bttv_tvnorms[fh->btv->tvnorm];
|
tvnorm = &bttv_tvnorms[fh->btv->tvnorm];
|
||||||
|
|
||||||
@ -391,28 +389,28 @@ bttv_vbi_get_fmt (struct bttv_fh * fh,
|
|||||||
max_end = (tvnorm->cropcap.bounds.top
|
max_end = (tvnorm->cropcap.bounds.top
|
||||||
+ tvnorm->cropcap.bounds.height) >> 1;
|
+ tvnorm->cropcap.bounds.height) >> 1;
|
||||||
|
|
||||||
f->sampling_rate = tvnorm->Fsc;
|
frt->fmt.vbi.sampling_rate = tvnorm->Fsc;
|
||||||
|
|
||||||
for (i = 0; i < 2; ++i) {
|
for (i = 0; i < 2; ++i) {
|
||||||
__s32 new_start;
|
__s32 new_start;
|
||||||
|
|
||||||
new_start = f->start[i]
|
new_start = frt->fmt.vbi.start[i]
|
||||||
+ tvnorm->vbistart[i]
|
+ tvnorm->vbistart[i]
|
||||||
- fh->vbi_fmt.tvnorm->vbistart[i];
|
- fh->vbi_fmt.tvnorm->vbistart[i];
|
||||||
|
|
||||||
f->start[i] = min(new_start, max_end - 1);
|
frt->fmt.vbi.start[i] = min(new_start, max_end - 1);
|
||||||
f->count[i] = min((__s32) f->count[i],
|
frt->fmt.vbi.count[i] =
|
||||||
max_end - f->start[i]);
|
min((__s32) frt->fmt.vbi.count[i],
|
||||||
|
max_end - frt->fmt.vbi.start[i]);
|
||||||
|
|
||||||
max_end += tvnorm->vbistart[1]
|
max_end += tvnorm->vbistart[1]
|
||||||
- tvnorm->vbistart[0];
|
- tvnorm->vbistart[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void bttv_vbi_fmt_reset(struct bttv_vbi_fmt *f, int norm)
|
||||||
bttv_vbi_fmt_reset (struct bttv_vbi_fmt * f,
|
|
||||||
int norm)
|
|
||||||
{
|
{
|
||||||
const struct bttv_tvnorm *tvnorm;
|
const struct bttv_tvnorm *tvnorm;
|
||||||
unsigned int real_samples_per_line;
|
unsigned int real_samples_per_line;
|
||||||
|
@ -84,6 +84,11 @@
|
|||||||
|
|
||||||
#define clamp(x, low, high) min (max (low, x), high)
|
#define clamp(x, low, high) min (max (low, x), high)
|
||||||
|
|
||||||
|
#define BTTV_NORMS (\
|
||||||
|
V4L2_STD_PAL | V4L2_STD_PAL_N | \
|
||||||
|
V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
|
||||||
|
V4L2_STD_NTSC | V4L2_STD_PAL_M | \
|
||||||
|
V4L2_STD_PAL_60)
|
||||||
/* ---------------------------------------------------------- */
|
/* ---------------------------------------------------------- */
|
||||||
|
|
||||||
struct bttv_tvnorm {
|
struct bttv_tvnorm {
|
||||||
@ -252,9 +257,9 @@ int bttv_overlay_risc(struct bttv *btv, struct bttv_overlay *ov,
|
|||||||
/* ---------------------------------------------------------- */
|
/* ---------------------------------------------------------- */
|
||||||
/* bttv-vbi.c */
|
/* bttv-vbi.c */
|
||||||
|
|
||||||
int bttv_vbi_try_fmt(struct bttv_fh *fh, struct v4l2_vbi_format *f);
|
int vidioc_try_fmt_vbi(struct file *file, void *fh, struct v4l2_format *f);
|
||||||
void bttv_vbi_get_fmt(struct bttv_fh *fh, struct v4l2_vbi_format *f);
|
int vidioc_g_fmt_vbi(struct file *file, void *fh, struct v4l2_format *f);
|
||||||
int bttv_vbi_set_fmt(struct bttv_fh *fh, struct v4l2_vbi_format *f);
|
int vidioc_s_fmt_vbi(struct file *file, void *fh, struct v4l2_format *f);
|
||||||
|
|
||||||
extern struct videobuf_queue_ops bttv_vbi_qops;
|
extern struct videobuf_queue_ops bttv_vbi_qops;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user