[FFmpeg-devel] [PATCH] Add support to video4linux2 framerate auto-set.

Stefano Sabatini stefano.sabatini-lala
Wed Jan 5 13:46:21 CET 2011


On date Wednesday 2011-01-05 12:47:55 +0100, Luca Abeni encoded:
> On 01/05/2011 12:26 PM, Stefano Sabatini wrote:
> >On date Wednesday 2011-01-05 08:46:05 +0100, Luca Abeni encoded:
> >>Hi Stefano,
> >>
> >>On 01/04/2011 09:52 PM, Stefano Sabatini wrote:
> >>>In particular, fix ffmpeg grabbing timestamps when the timebase value
> >>>is not set through the CLI.
> >>
> >>The idea looks good, but, can you move the frame rate autodetection to
> >>v4l2_set_parameters(), after the call to VIDIOC_S_PARM? (more precisely,
> >>after the "if (ap->time_base.num&&  ap->time_base.den)" block)
> >>Does it work, with such a change? (I think so, but, can you verify?)
> >
> >This would require another change:
> >if (ap->time_base.num&&  ap->time_base.den) {
> >    // set the timebase in the driver
> >}
> >if (!ap->time_base.num || !ap->time_base.den) {
> >    // auto-select timebase and set it in the driver
> 
> Sorry, but why the "set" part? AFAIK, VIDIOC_G_PARM returns the current
> frame period, and VIDIOC_S_PARM sets it. So, there is no point in reading
> a value and then setting it.
> 
> My point is that we want to read the current frame period only if we did
> not set it through VIDIOC_S_PARM.
> So, I'd do
> 	if (ap->time_base.num&&  ap->time_base.den) {
> 		// set the timebase in the driver
> 	} else {
> 		// read the current frame period, and use it as a timebase
> 	}
> 
> BTW, I am wondering if VIDIOC_G_PARM is the right ioctl, here, or if the
> frame rate should be detected by looking at the video standard description.
> 
> >I put the framerate auto-select code just after the size auto-select
> >code, as that looked more symmetrical and sounded more consistent with
> >the overall design.
> >
> >As for v4l2_set_parameters(), I suppose it should be used for setting
> >parameters, so the auto-selection phase should be already done when
> >the function is called. Currently the logic implemented is:
> >
> >v4l2_read_header()
> >   1. check the size and frame rate values, if unset (i.e. if they are
> >      set to 0) then use the auto-select feature of the v4l driver for
> >      selecting the values to set
> >
> >v4l2_set_parameters()
> >   2. set the size and frame rate values (they need to be non-0 values)
> 
> v4l2_set_parameters() can set the video standard, which can change the
> video size and frame rate... So, it should be done before autodetecting
> the values. And, yes, looking at the code this seems to be currently
> broken (regarding the frame size).
> 
> I suppose we should first call v4l2_set_parameters(), and then do the
> rest of the stuff...

Got it, check the attached patches.
-- 
FFmpeg = Fiendish and Fast Meaningful Ponderous Efficient Gadget



More information about the ffmpeg-devel mailing list