On Friday 07 October 2011 09:57:42 Hans de Goede wrote: > Hi, > > Hmm, nasty... > > On 10/06/2011 01:13 PM, Hans Verkuil wrote: > > Hi Hans! > > > > I've been looking into a problem with libv4l2 that occurs when you change > > TV standard or video preset using VIDIOC_S_STD or VIDIOC_S_DV_PRESET. > > These calls will change the format implicitly (e.g. if the current > > format is set for PAL at 720x576 and you select NTSC, then the format > > will be reset to 720x480). > > > > However, libv4l2 isn't taking this into account and will keep using the > > cached dest_fmt value. It is easy to reproduce this using qv4l2. > > > > The same problem is likely to occur with S_CROP (haven't tested that yet, > > though): calling S_CROP can also change the format. > > > > To be precise: S_STD and S_DV_PRESET can change both the crop rectangle > > and the format, and S_CROP can change the format. > > First of all it would be good to actually document this behavior of > VIDIOC_S_STD or VIDIOC_S_DV_PRESET, the current docs don't mention this at > all: http://linuxtv.org/downloads/v4l-dvb-apis/standard.html Odd, I'd have sworn that it was in the docs. The full list of ioctls that can change both the crop settings and the format is: VIDIOC_S_STD VIDIOC_S_DV_PRESET VIDIOC_S_DV_TIMINGS VIDIOC_S_INPUT (can implicitly change standard/preset) VIDIOC_S_OUTPUT (ditto) VIDIOC_S_CROP Note that I suspect that there are quite a few drivers that do not handle this correctly. After all, for normal SDTV capture cards you almost never change the TV standard once it is set up at the start so I doubt if this has been tested much. For DV_PRESET it is much more common to switch from e.g. 720p to 1080p. That is how I found this issue. > I've attached 2 patches which should make libv4l2 deal with this correctly. > I assume you've a reproducer for this and I would appreciate it if you > could test if these patches actually fix the issue you are seeing. Almost working. The second patch forgot to set src_fmt.type, so I got an error back. After initializing it to BUF_TYPE_VIDEO_CAPTURE it worked fine. Regards, Hans -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html