Commit 5da545ad authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] saa7146: move overlay information from saa7146_fh into saa7146_vv

This is global information, not per-filehandle information.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 4894b709
...@@ -436,6 +436,7 @@ static const struct v4l2_ctrl_ops saa7146_ctrl_ops = { ...@@ -436,6 +436,7 @@ static const struct v4l2_ctrl_ops saa7146_ctrl_ops = {
int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv) int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
{ {
struct v4l2_ctrl_handler *hdl = &dev->ctrl_handler; struct v4l2_ctrl_handler *hdl = &dev->ctrl_handler;
struct v4l2_pix_format *fmt;
struct saa7146_vv *vv; struct saa7146_vv *vv;
int err; int err;
...@@ -496,6 +497,15 @@ int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv) ...@@ -496,6 +497,15 @@ int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
if (dev->ext_vv_data->capabilities & V4L2_CAP_VBI_CAPTURE) if (dev->ext_vv_data->capabilities & V4L2_CAP_VBI_CAPTURE)
saa7146_vbi_uops.init(dev,vv); saa7146_vbi_uops.init(dev,vv);
fmt = &vv->ov_fb.fmt;
fmt->width = vv->standard->h_max_out;
fmt->height = vv->standard->v_max_out;
fmt->pixelformat = V4L2_PIX_FMT_RGB565;
fmt->bytesperline = 2 * fmt->width;
fmt->sizeimage = fmt->bytesperline * fmt->height;
fmt->colorspace = V4L2_COLORSPACE_SRGB;
vv->ov_fb.capability = V4L2_FBUF_CAP_LIST_CLIPPING;
vv->ov_fb.flags = V4L2_FBUF_FLAG_PRIMARY;
dev->vv_data = vv; dev->vv_data = vv;
dev->vv_callback = &vv_callback; dev->vv_callback = &vv_callback;
......
...@@ -343,9 +343,9 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa ...@@ -343,9 +343,9 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa
struct saa7146_vv *vv = dev->vv_data; struct saa7146_vv *vv = dev->vv_data;
__le32 *clipping = vv->d_clipping.cpu_addr; __le32 *clipping = vv->d_clipping.cpu_addr;
int width = fh->ov.win.w.width; int width = vv->ov.win.w.width;
int height = fh->ov.win.w.height; int height = vv->ov.win.w.height;
int clipcount = fh->ov.nclips; int clipcount = vv->ov.nclips;
u32 line_list[32]; u32 line_list[32];
u32 pixel_list[32]; u32 pixel_list[32];
...@@ -365,10 +365,10 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa ...@@ -365,10 +365,10 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa
for(i = 0; i < clipcount; i++) { for(i = 0; i < clipcount; i++) {
int l = 0, r = 0, t = 0, b = 0; int l = 0, r = 0, t = 0, b = 0;
x[i] = fh->ov.clips[i].c.left; x[i] = vv->ov.clips[i].c.left;
y[i] = fh->ov.clips[i].c.top; y[i] = vv->ov.clips[i].c.top;
w[i] = fh->ov.clips[i].c.width; w[i] = vv->ov.clips[i].c.width;
h[i] = fh->ov.clips[i].c.height; h[i] = vv->ov.clips[i].c.height;
if( w[i] < 0) { if( w[i] < 0) {
x[i] += w[i]; w[i] = -w[i]; x[i] += w[i]; w[i] = -w[i];
...@@ -485,13 +485,14 @@ static void saa7146_disable_clipping(struct saa7146_dev *dev) ...@@ -485,13 +485,14 @@ static void saa7146_disable_clipping(struct saa7146_dev *dev)
static void saa7146_set_clipping_rect(struct saa7146_fh *fh) static void saa7146_set_clipping_rect(struct saa7146_fh *fh)
{ {
struct saa7146_dev *dev = fh->dev; struct saa7146_dev *dev = fh->dev;
enum v4l2_field field = fh->ov.win.field; struct saa7146_vv *vv = dev->vv_data;
enum v4l2_field field = vv->ov.win.field;
struct saa7146_video_dma vdma2; struct saa7146_video_dma vdma2;
u32 clip_format; u32 clip_format;
u32 arbtr_ctrl; u32 arbtr_ctrl;
/* check clipcount, disable clipping if clipcount == 0*/ /* check clipcount, disable clipping if clipcount == 0*/
if( fh->ov.nclips == 0 ) { if (vv->ov.nclips == 0) {
saa7146_disable_clipping(dev); saa7146_disable_clipping(dev);
return; return;
} }
...@@ -651,8 +652,8 @@ int saa7146_enable_overlay(struct saa7146_fh *fh) ...@@ -651,8 +652,8 @@ int saa7146_enable_overlay(struct saa7146_fh *fh)
struct saa7146_dev *dev = fh->dev; struct saa7146_dev *dev = fh->dev;
struct saa7146_vv *vv = dev->vv_data; struct saa7146_vv *vv = dev->vv_data;
saa7146_set_window(dev, fh->ov.win.w.width, fh->ov.win.w.height, fh->ov.win.field); saa7146_set_window(dev, vv->ov.win.w.width, vv->ov.win.w.height, vv->ov.win.field);
saa7146_set_position(dev, fh->ov.win.w.left, fh->ov.win.w.top, fh->ov.win.w.height, fh->ov.win.field, vv->ov_fmt->pixelformat); saa7146_set_position(dev, vv->ov.win.w.left, vv->ov.win.w.top, vv->ov.win.w.height, vv->ov.win.field, vv->ov_fmt->pixelformat);
saa7146_set_output_format(dev, vv->ov_fmt->trans); saa7146_set_output_format(dev, vv->ov_fmt->trans);
saa7146_set_clipping_rect(fh); saa7146_set_clipping_rect(fh);
......
...@@ -112,8 +112,8 @@ int saa7146_start_preview(struct saa7146_fh *fh) ...@@ -112,8 +112,8 @@ int saa7146_start_preview(struct saa7146_fh *fh)
DEB_EE("dev:%p, fh:%p\n", dev, fh); DEB_EE("dev:%p, fh:%p\n", dev, fh);
/* check if we have overlay informations */ /* check if we have overlay information */
if( NULL == fh->ov.fh ) { if (vv->ov.fh == NULL) {
DEB_D("no overlay data available. try S_FMT first.\n"); DEB_D("no overlay data available. try S_FMT first.\n");
return -EAGAIN; return -EAGAIN;
} }
...@@ -139,19 +139,18 @@ int saa7146_start_preview(struct saa7146_fh *fh) ...@@ -139,19 +139,18 @@ int saa7146_start_preview(struct saa7146_fh *fh)
return -EBUSY; return -EBUSY;
} }
fmt.fmt.win = fh->ov.win; fmt.fmt.win = vv->ov.win;
err = vidioc_try_fmt_vid_overlay(NULL, fh, &fmt); err = vidioc_try_fmt_vid_overlay(NULL, fh, &fmt);
if (0 != err) { if (0 != err) {
saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP); saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP);
return -EBUSY; return -EBUSY;
} }
fh->ov.win = fmt.fmt.win; vv->ov.win = fmt.fmt.win;
vv->ov_data = &fh->ov;
DEB_D("%dx%d+%d+%d %s field=%s\n", DEB_D("%dx%d+%d+%d %s field=%s\n",
fh->ov.win.w.width, fh->ov.win.w.height, vv->ov.win.w.width, vv->ov.win.w.height,
fh->ov.win.w.left, fh->ov.win.w.top, vv->ov.win.w.left, vv->ov.win.w.top,
vv->ov_fmt->name, v4l2_field_names[fh->ov.win.field]); vv->ov_fmt->name, v4l2_field_names[vv->ov.win.field]);
if (0 != (ret = saa7146_enable_overlay(fh))) { if (0 != (ret = saa7146_enable_overlay(fh))) {
DEB_D("enabling overlay failed: %d\n", ret); DEB_D("enabling overlay failed: %d\n", ret);
...@@ -468,6 +467,7 @@ static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *f ...@@ -468,6 +467,7 @@ static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *f
*fb = vv->ov_fb; *fb = vv->ov_fb;
fb->capability = V4L2_FBUF_CAP_LIST_CLIPPING; fb->capability = V4L2_FBUF_CAP_LIST_CLIPPING;
fb->flags = V4L2_FBUF_FLAG_PRIMARY;
return 0; return 0;
} }
...@@ -601,7 +601,10 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format ...@@ -601,7 +601,10 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format
static int vidioc_g_fmt_vid_overlay(struct file *file, void *fh, struct v4l2_format *f) static int vidioc_g_fmt_vid_overlay(struct file *file, void *fh, struct v4l2_format *f)
{ {
f->fmt.win = ((struct saa7146_fh *)fh)->ov.win; struct saa7146_dev *dev = ((struct saa7146_fh *)fh)->dev;
struct saa7146_vv *vv = dev->vv_data;
f->fmt.win = vv->ov.win;
return 0; return 0;
} }
...@@ -768,17 +771,17 @@ static int vidioc_s_fmt_vid_overlay(struct file *file, void *__fh, struct v4l2_f ...@@ -768,17 +771,17 @@ static int vidioc_s_fmt_vid_overlay(struct file *file, void *__fh, struct v4l2_f
err = vidioc_try_fmt_vid_overlay(file, fh, f); err = vidioc_try_fmt_vid_overlay(file, fh, f);
if (0 != err) if (0 != err)
return err; return err;
fh->ov.win = f->fmt.win; vv->ov.win = f->fmt.win;
fh->ov.nclips = f->fmt.win.clipcount; vv->ov.nclips = f->fmt.win.clipcount;
if (fh->ov.nclips > 16) if (vv->ov.nclips > 16)
fh->ov.nclips = 16; vv->ov.nclips = 16;
if (copy_from_user(fh->ov.clips, f->fmt.win.clips, if (copy_from_user(vv->ov.clips, f->fmt.win.clips,
sizeof(struct v4l2_clip) * fh->ov.nclips)) { sizeof(struct v4l2_clip) * vv->ov.nclips)) {
return -EFAULT; return -EFAULT;
} }
/* fh->ov.fh is used to indicate that we have valid overlay informations, too */ /* vv->ov.fh is used to indicate that we have valid overlay informations, too */
fh->ov.fh = fh; vv->ov.fh = fh;
/* check if our current overlay is active */ /* check if our current overlay is active */
if (IS_OVERLAY_ACTIVE(fh) != 0) { if (IS_OVERLAY_ACTIVE(fh) != 0) {
......
...@@ -88,9 +88,6 @@ struct saa7146_fh { ...@@ -88,9 +88,6 @@ struct saa7146_fh {
/* if this is a vbi or capture open */ /* if this is a vbi or capture open */
enum v4l2_buf_type type; enum v4l2_buf_type type;
/* video overlay */
struct saa7146_overlay ov;
/* video capture */ /* video capture */
struct videobuf_queue video_q; struct videobuf_queue video_q;
struct v4l2_pix_format video_fmt; struct v4l2_pix_format video_fmt;
...@@ -119,9 +116,9 @@ struct saa7146_vv ...@@ -119,9 +116,9 @@ struct saa7146_vv
struct saa7146_fh *video_fh; struct saa7146_fh *video_fh;
/* video overlay */ /* video overlay */
struct saa7146_overlay ov;
struct v4l2_framebuffer ov_fb; struct v4l2_framebuffer ov_fb;
struct saa7146_format *ov_fmt; struct saa7146_format *ov_fmt;
struct saa7146_overlay *ov_data;
struct saa7146_fh *ov_suspend; struct saa7146_fh *ov_suspend;
/* video capture */ /* video capture */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment