V4L/DVB (5095): Pvrusb2: Allow VIDIOC_S_FMT with -1 for resolution values
With the previous patch, mplayer started but was polling the video device forever without any video actually coming out. Further analysis showed that it does a VIDIOC_S_FMT with width and height set to -1 (!!!). The code handling this only cares that both are lower than the minimum range allowed so it ends up setting the size to 19x17 (!!) This pretty much breaks the encoder here. Even if this breakage is yet another (TM) result of my setup, setting the size to 19x17 by default would surprise most users IMHO. So, special case for -1 and interpret this to be a request for the default size, please. Users can then set their favorite size both through mplayer and through sysfs. With this patch, mplayer finally works in pvr:// mode (not that we really gain anything over operating it through sysfs with lirc, sometime I might actually get off my lazy a** and contribute this setup too) Signed-off-by: Pantelis Koukousoulas <pakt223@freemail.gr> Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
848ed3ca2a
commit
fd69496461
@ -498,7 +498,7 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
|
||||
ret = 0;
|
||||
switch(vf->type) {
|
||||
case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
|
||||
int lmin,lmax;
|
||||
int lmin,lmax,ldef;
|
||||
struct pvr2_ctrl *hcp,*vcp;
|
||||
int h = vf->fmt.pix.height;
|
||||
int w = vf->fmt.pix.width;
|
||||
@ -507,14 +507,20 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
|
||||
|
||||
lmin = pvr2_ctrl_get_min(hcp);
|
||||
lmax = pvr2_ctrl_get_max(hcp);
|
||||
if (w < lmin) {
|
||||
ldef = pvr2_ctrl_get_def(hcp);
|
||||
if (w == -1) {
|
||||
w = ldef;
|
||||
} else if (w < lmin) {
|
||||
w = lmin;
|
||||
} else if (w > lmax) {
|
||||
w = lmax;
|
||||
}
|
||||
lmin = pvr2_ctrl_get_min(vcp);
|
||||
lmax = pvr2_ctrl_get_max(vcp);
|
||||
if (h < lmin) {
|
||||
ldef = pvr2_ctrl_get_def(vcp);
|
||||
if (h == -1) {
|
||||
h = ldef;
|
||||
} else if (h < lmin) {
|
||||
h = lmin;
|
||||
} else if (h > lmax) {
|
||||
h = lmax;
|
||||
|
Loading…
Reference in New Issue
Block a user