[MPlayer-dev-eng] [PATCH] add control to set v4l2 width and height together
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Sun Mar 15 15:40:28 CET 2009
Hello,
it seems there are quite a few devices where width and height can not be
set independently, attached patch fixes resolution setting for those
devices. I intend to apply shortly if there are not objections.
-------------- next part --------------
Index: stream/tv.c
===================================================================
--- stream/tv.c (revision 28054)
+++ stream/tv.c (working copy)
@@ -439,6 +439,12 @@
#endif
/* limits on w&h are norm-dependent -- JM */
+ if (tvh->tv_param->width != -1 && tvh->tv_param->height != -1) {
+ // first tell the driver both width and height, some drivers do not support setting them independently.
+ int dim[2];
+ dim[0] = tvh->tv_param->width; dim[1] = tvh->tv_param->height;
+ funcs->control(tvh->priv, TVI_CONTROL_VID_SET_WIDTH_HEIGHT, dim);
+ }
/* set width */
if (tvh->tv_param->width != -1)
{
Index: stream/tv.h
===================================================================
--- stream/tv.h (revision 28054)
+++ stream/tv.h (working copy)
@@ -175,6 +175,7 @@
#define TVI_CONTROL_VID_SET_PICTURE 0x11e
#define TVI_CONTROL_VID_SET_GAIN 0x11f
#define TVI_CONTROL_VID_GET_GAIN 0x120
+#define TVI_CONTROL_VID_SET_WIDTH_HEIGHT 0x121
/* TUNER controls */
#define TVI_CONTROL_TUN_GET_FREQ 0x201
Index: stream/tvi_v4l2.c
===================================================================
--- stream/tvi_v4l2.c (revision 28054)
+++ stream/tvi_v4l2.c (working copy)
@@ -770,6 +770,14 @@
return TVI_CONTROL_TRUE;
case TVI_CONTROL_VID_CHK_WIDTH:
return TVI_CONTROL_TRUE;
+ case TVI_CONTROL_VID_SET_WIDTH_HEIGHT:
+ if (getfmt(priv) < 0) return TVI_CONTROL_FALSE;
+ priv->format.fmt.pix.width = ((int *)arg)[0];
+ priv->format.fmt.pix.height = ((int *)arg)[1];
+ priv->format.fmt.pix.field = V4L2_FIELD_ANY;
+ if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0)
+ return TVI_CONTROL_FALSE;
+ return TVI_CONTROL_TRUE;
case TVI_CONTROL_VID_SET_WIDTH:
if (getfmt(priv) < 0) return TVI_CONTROL_FALSE;
priv->format.fmt.pix.width = *(int *)arg;
More information about the MPlayer-dev-eng
mailing list