On 14/12/17 10:52, Oleksandr Ostrenko wrote: > On Thursday, December 14, 2017 12:44:42 AM CET Hans Verkuil wrote: >> The pvrusb2 code appears to have a some old workaround code for xawtv that >> causes a WARN() due to an unrecognized pixelformat 0 in v4l2_ioctl.c. >> >> Since all other MPEG drivers fill this in correctly, it is a safe assumption >> that this particular problem no longer exists. >> >> While I'm at it, clean up the code a bit. >> >> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> >> --- >> I'll try to give this a spin in the morning with xawtv and my ivtv card >> (that also uses V4L2_PIX_FMT_MPEG), just to make sure xawtv no longer >> breaks if it sees it. >> >> Oleksandr, are you able to test this as well on your pvrusb2? > > Thanks, Hans, this fixes the original issue on Linux Mint with kernel > 4.8.17. Haven't tried it on openSUSE yet. Still, in xawtv I get no TV > reception but just a black screen and error messages like: > > no way to get: 128x96 32 bit TrueColor (LE: bgr-) > no way to get: 128x96 32 bit TrueColor (LE: bgr-) > no way to get: 128x96 32 bit TrueColor (LE: bgr-) > no way to get: 128x96 32 bit TrueColor (LE: bgr-) > no way to get: 384x288 32 bit TrueColor (LE: bgr-) > > Is this another bug? No. xawtv simply doesn't support MPEG formats. So this is what I would expect. Regards, Hans > > Best, > Oleksandr > >> >> Regards, >> >> Hans >> --- >> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c >> b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c index 4320bda9352d..cc90be364a30 >> 100644 >> --- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c >> +++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c >> @@ -78,18 +78,6 @@ static int vbi_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1}; >> module_param_array(vbi_nr, int, NULL, 0444); >> MODULE_PARM_DESC(vbi_nr, "Offset for device's vbi dev minor"); >> >> -static struct v4l2_fmtdesc pvr_fmtdesc [] = { >> - { >> - .index = 0, >> - .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, >> - .flags = V4L2_FMT_FLAG_COMPRESSED, >> - .description = "MPEG1/2", >> - // This should really be V4L2_PIX_FMT_MPEG, but xawtv >> - // breaks when I do that. >> - .pixelformat = 0, // V4L2_PIX_FMT_MPEG, >> - } >> -}; >> - >> #define PVR_FORMAT_PIX 0 >> #define PVR_FORMAT_VBI 1 >> >> @@ -99,17 +87,11 @@ static struct v4l2_format pvr_format [] = { >> .fmt = { >> .pix = { >> .width = 720, >> - .height = 576, >> - // This should really be V4L2_PIX_FMT_MPEG, >> - // but xawtv breaks when I do that. >> - .pixelformat = 0, // V4L2_PIX_FMT_MPEG, >> + .height = 576, >> + .pixelformat = V4L2_PIX_FMT_MPEG, >> .field = V4L2_FIELD_INTERLACED, >> - .bytesperline = 0, // doesn't make sense >> - // here >> - //FIXME : Don't know what to put here... >> - .sizeimage = (32*1024), >> - .colorspace = 0, // doesn't make sense here >> - .priv = 0 >> + /* FIXME : Don't know what to put here... */ >> + .sizeimage = 32 * 1024, >> } >> } >> }, >> @@ -407,11 +389,11 @@ static int pvr2_g_frequency(struct file *file, void >> *priv, struct v4l2_frequency >> >> static int pvr2_enum_fmt_vid_cap(struct file *file, void *priv, struct >> v4l2_fmtdesc *fd) { >> - /* Only one format is supported : mpeg.*/ >> - if (fd->index != 0) >> + /* Only one format is supported: MPEG. */ >> + if (fd->index) >> return -EINVAL; >> >> - memcpy(fd, pvr_fmtdesc, sizeof(struct v4l2_fmtdesc)); >> + fd->pixelformat = V4L2_PIX_FMT_MPEG; >> return 0; >> } > >