The problem lies in omap ispvideo driver code in 3.5.7 kernel version currently used by Gumstix. To output the video with our own codec then the driver should know what codec is used. Apply the changes to ispvideo.c located at
/home/yocto/build/work/.../drivers/media/video/omap3isp/ispvideo.c
From 2ea2a64d737236ed84f8aa481f4331eecbe6081f Mon Sep 17 00:00:00 2001
From:
Date: Thu, 9 Jan 2014 15:32:50 +0100
Subject: [PATCH] Adding missing ioctl's
---
drivers/media/video/omap3isp/ispvideo.c | 48 +++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c
index b37379d..0bf5c5b 100644
--- a/drivers/media/video/omap3isp/ispvideo.c
+++ b/drivers/media/video/omap3isp/ispvideo.c
@@ -662,6 +662,39 @@ isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
}
static int
+// My patch changes
+isp_video_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc*fmtdesc)
+{
+ struct isp_video_fh *vfh = to_isp_video_fh(fh);
+ struct isp_video *video = video_drvdata(file);
+
+ if (fmtdesc->index)
+ {
+// printk(KERN_ERR "%s: invalid index (%d)\n",__func__,fmtdesc->index);
+ return -EINVAL;
+ }
+
+ if (fmtdesc->type != video->type)
+ {
+// printk(KERN_ERR "%s: invalid type (%d). Current type:%d\n",__func__, fmtdesc->type, video->type);
+ return -EINVAL;
+ }
+
+ // trying to produce direct output in VYVY format. Hardcoded.
+ fmtdesc->flags = 0;
+ fmtdesc->description[0] = 'U';
+ fmtdesc->description[1] = 'Y';
+ fmtdesc->description[2] = 'V';
+ fmtdesc->description[3] = 'Y';
+ fmtdesc->description[4] = '0';
+ fmtdesc->pixelformat = V4L2_PIX_FMT_UYVY;
+
+ return 0;
+}
+
+static int
+
+
isp_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
{
struct isp_video_fh *vfh = to_isp_video_fh(fh);
@@ -678,6 +711,7 @@ isp_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
}
static int
+
isp_video_set_format(struct file *file, void *fh, struct v4l2_format *format)
{
struct isp_video_fh *vfh = to_isp_video_fh(fh);
@@ -1189,8 +1223,21 @@ isp_video_s_input(struct file *file, void *fh, unsigned int input)
return input == 0 ? 0 : -EINVAL;
}
+static int
+isp_video_queryctrl(struct file *file, void *fh, struct v4l2_queryctrl*queryctrl)
+{
+// printk(KERN_ERR "%s: query id (%d)\n",__func__, queryctrl->id);
+// printk(KERN_ERR "%s: query type (%d)\n",__func__, queryctrl->type);
+
+ if (queryctrl->id < V4L2_CID_BASE)
+ return -EDOM;
+
+ return -EINVAL;
+}
+
static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
.vidioc_querycap = isp_video_querycap,
+ .vidioc_enum_fmt_vid_cap = isp_video_enum_format,
.vidioc_g_fmt_vid_cap = isp_video_get_format,
.vidioc_s_fmt_vid_cap = isp_video_set_format,
.vidioc_try_fmt_vid_cap = isp_video_try_format,
@@ -1211,6 +1258,7 @@ static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
.vidioc_enum_input = isp_video_enum_input,
.vidioc_g_input = isp_video_g_input,
.vidioc_s_input = isp_video_s_input,
+ .vidioc_queryctrl = isp_video_queryctrl,
};
/* -----------------------------------------------------------------------------
--
1.7.9.5
After that commit changes of patch. Follow this tutorial to know how to create the patch.
The patch was taken from here