Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7c03a4488bf6d28078488c70c82357d4286cacc5
Commit:     7c03a4488bf6d28078488c70c82357d4286cacc5
Parent:     8beb058f1ecde7bc0554d18ce1baa18b5dfb02d3
Author:     Hans Verkuil <[EMAIL PROTECTED]>
AuthorDate: Sun Aug 19 18:59:42 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 22:05:53 2007 -0300

    V4L/DVB (6061): ivtv: add VIDIOC_OVERLAY
    
    Add VIDIOC_OVERLAY to enable/disable the OSD. Also add the OSD state to the
    log status report.
    
    Signed-off-by: Hans Verkuil <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/ivtv/ivtv-ioctl.c   |   45 ++++++++++++++++++++++++++----
 drivers/media/video/ivtv/ivtv-streams.c |    6 ++--
 2 files changed, 42 insertions(+), 9 deletions(-)

diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c 
b/drivers/media/video/ivtv/ivtv-ioctl.c
index de866d4..ed57076 100644
--- a/drivers/media/video/ivtv/ivtv-ioctl.c
+++ b/drivers/media/video/ivtv/ivtv-ioctl.c
@@ -1217,9 +1217,19 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file 
*filp, unsigned int cmd, void
                break;
        }
 
+       case VIDIOC_OVERLAY: {
+               int *on = arg;
+
+               if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
+                       return -EINVAL;
+               ivtv_vapi(itv, CX2341X_OSD_SET_STATE, 1, *on != 0);
+               break;
+       }
+
        case VIDIOC_LOG_STATUS:
        {
                int has_output = itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT;
+               u32 data[CX2341X_MBOX_MAX_DATA];
                struct v4l2_input vidin;
                struct v4l2_audio audin;
                int i;
@@ -1234,8 +1244,8 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file *filp, 
unsigned int cmd, void
                ivtv_call_i2c_clients(itv, VIDIOC_LOG_STATUS, NULL);
                ivtv_get_input(itv, itv->active_input, &vidin);
                ivtv_get_audio_input(itv, itv->audio_input, &audin);
-               IVTV_INFO("Video Input: %s\n", vidin.name);
-               IVTV_INFO("Audio Input: %s%s\n", audin.name,
+               IVTV_INFO("Video Input:  %s\n", vidin.name);
+               IVTV_INFO("Audio Input:  %s%s\n", audin.name,
                        (itv->dualwatch_stereo_mode & ~0x300) == 0x200 ? " 
(Bilingual)" : "");
                if (has_output) {
                        struct v4l2_output vidout;
@@ -1255,6 +1265,22 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file 
*filp, unsigned int cmd, void
                                "Mono",
                                "Swapped"
                        };
+                       static const char * const alpha_mode[] = {
+                               "None",
+                               "Global",
+                               "Local",
+                               "Global and Local"
+                       };
+                       static const char * const pixel_format[] = {
+                               "Indexed",
+                               "RGB 5:6:5",
+                               "ARGB 1:5:5:5",
+                               "ARGB 1:4:4:4",
+                               "ARGB 8:8:8:8",
+                               "5",
+                               "6",
+                               "7",
+                       };
 
                        ivtv_get_output(itv, itv->active_output, &vidout);
                        ivtv_get_audio_output(itv, 0, &audout);
@@ -1264,12 +1290,17 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file 
*filp, unsigned int cmd, void
                                audio_modes[itv->audio_bilingual_mode]);
                        if (mode < 0 || mode > OUT_PASSTHROUGH)
                                mode = OUT_NONE;
-                       IVTV_INFO("Output Mode: %s\n", output_modes[mode]);
+                       IVTV_INFO("Output Mode:  %s\n", output_modes[mode]);
+                       ivtv_vapi_result(itv, data, CX2341X_OSD_GET_STATE, 0);
+                       IVTV_INFO("Overlay:      %s, Alpha: %s, Pixel Format: 
%s\n",
+                               data[0] & 1 ? "On" : "Off",
+                               alpha_mode[(data[0] >> 1) & 0x3],
+                               pixel_format[(data[0] >> 3) & 0x7]);
                }
-               IVTV_INFO("Tuner: %s\n",
+               IVTV_INFO("Tuner:  %s\n",
                        test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags) ? "Radio" 
: "TV");
                cx2341x_log_status(&itv->params, itv->name);
-               IVTV_INFO("Status flags: 0x%08lx\n", itv->i_flags);
+               IVTV_INFO("Status flags:    0x%08lx\n", itv->i_flags);
                for (i = 0; i < IVTV_MAX_STREAMS; i++) {
                        struct ivtv_stream *s = &itv->streams[i];
 
@@ -1279,7 +1310,7 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file *filp, 
unsigned int cmd, void
                                        (s->buffers - s->q_free.buffers) * 100 
/ s->buffers,
                                        (s->buffers * s->buf_size) / 1024, 
s->buffers);
                }
-               IVTV_INFO("Read MPEG/VBI: %lld/%lld bytes\n", (long 
long)itv->mpg_data_received, (long long)itv->vbi_data_inserted);
+               IVTV_INFO("Read MPG/VBI: %lld/%lld bytes\n", (long 
long)itv->mpg_data_received, (long long)itv->vbi_data_inserted);
                IVTV_INFO("==================  END STATUS CARD #%d  
==================\n", itv->num);
                break;
        }
@@ -1501,6 +1532,7 @@ static int ivtv_v4l2_do_ioctl(struct inode *inode, struct 
file *filp,
        case VIDIOC_S_AUDOUT:
        case VIDIOC_S_EXT_CTRLS:
        case VIDIOC_S_FBUF:
+       case VIDIOC_OVERLAY:
                ret = v4l2_prio_check(&itv->prio, &id->prio);
                if (ret)
                        return ret;
@@ -1554,6 +1586,7 @@ static int ivtv_v4l2_do_ioctl(struct inode *inode, struct 
file *filp,
        case VIDIOC_TRY_ENCODER_CMD:
        case VIDIOC_G_FBUF:
        case VIDIOC_S_FBUF:
+       case VIDIOC_OVERLAY:
                if (ivtv_debug & IVTV_DBGFLG_IOCTL) {
                        printk(KERN_INFO "ivtv%d ioctl: ", itv->num);
                        v4l_printk_ioctl(cmd);
diff --git a/drivers/media/video/ivtv/ivtv-streams.c 
b/drivers/media/video/ivtv/ivtv-streams.c
index 65fa247..ebf925c 100644
--- a/drivers/media/video/ivtv/ivtv-streams.c
+++ b/drivers/media/video/ivtv/ivtv-streams.c
@@ -75,7 +75,7 @@ static struct {
        struct file_operations *fops;
 } ivtv_stream_info[] = {
        {       /* IVTV_ENC_STREAM_TYPE_MPG */
-               "encoder MPEG",
+               "encoder MPG",
                VFL_TYPE_GRABBER, 0,
                PCI_DMA_FROMDEVICE, 0, V4L2_BUF_TYPE_VIDEO_CAPTURE,
                &ivtv_v4l2_enc_fops
@@ -93,7 +93,7 @@ static struct {
                &ivtv_v4l2_enc_fops
        },
        {       /* IVTV_ENC_STREAM_TYPE_PCM */
-               "encoder PCM audio",
+               "encoder PCM",
                VFL_TYPE_GRABBER, IVTV_V4L2_ENC_PCM_OFFSET,
                PCI_DMA_FROMDEVICE, 0, V4L2_BUF_TYPE_PRIVATE,
                &ivtv_v4l2_enc_fops
@@ -105,7 +105,7 @@ static struct {
                &ivtv_v4l2_enc_fops
        },
        {       /* IVTV_DEC_STREAM_TYPE_MPG */
-               "decoder MPEG",
+               "decoder MPG",
                VFL_TYPE_GRABBER, IVTV_V4L2_DEC_MPG_OFFSET,
                PCI_DMA_TODEVICE, 0, V4L2_BUF_TYPE_VIDEO_OUTPUT,
                &ivtv_v4l2_dec_fops
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to