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:
Douglas Schilling Landgraf 2007-12-27 22:20:58 -03:00 committed by Mauro Carvalho Chehab
parent 4041f1a587
commit 402aa76aa5
3 changed files with 1183 additions and 1011 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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;

View File

@ -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;