On Tuesday 01 May 2012 18:19:39 halli manjunatha wrote:
> On Tue, May 1, 2012 at 4:46 AM, Hans Verkuil <hverk...@xs4all.nl> wrote:
> > Hi all!
> >
> > While working on a test function for the hardware seek functionality in
> > v4l2-compliance I realized that the specification is rather vague and
> > incomplete, making it hard to write a decent test for it.
> >
> > There are a number of issues with this API:
> >
> > 1) There is no way for the application to know whether the hardware supports
> >   wrap around scanning or not (or both). It is only reported because the
> >   ioctl will return EINVAL if it doesn't support it, which is rather 
> > awkward.
> >   It's important for applications to know what to do here.
> >
> >   The solution would be to add two new capability flags to struct 
> > v4l2_tuner:
> >   V4L2_TUNER_CAP_SEEK_BOUNDED and V4L2_TUNER_CAP_SEEK_WRAP.
> >
> > 2) What happens when the seek didn't find anything? It's not a timeout, it 
> > has
> >   to return some decent error code. I propose ENODATA for this.
> >
> > 3) What should the frequency be if the seek returns an error? I think the 
> > original
> >   frequency should be restored in that case.
> Isn't this the way how it is now? means driver won't change the
> G_FREQUENCY value till it gets the new valid station during seek.

That's how it is done today, but that behavior is not specified in the v4l2 
spec.

> 
> >
> > 4) What should happen if you try to set the frequency while a seek is in 
> > operation?
> >   In that case -EBUSY should be returned by VIDIOC_S_FREQUENCY.
> >
> > 5) What should happen if you try to get the frequency while a seek is in 
> > operation?
> >   It would be nice if you could get the frequency that is currently being 
> > scanned.
> >
> >   There are two options to implement this:
> >
> >   a) Add a new 'scan_frequency' field to struct v4l2_frequency. So the 
> > frequency
> >      field would always contain the frequency that was set when the seek 
> > started,
> >      and the scan_frequency is either 0 (no seek is in progress), a special 
> > value
> >      V4L2_SCAN_IN_PROGRESS (seek is in progress, but the hardware can't 
> > tell what
> >      the current seek frequency is) or it contains the frequency that is 
> > currently
> >      being scanned.
> >
> >   b) Add a new V4L2_TUNER_CAP_HAS_SEEK_FREQ capability to struct 
> > v4l2_tuner. If
> >      set, then VIDIOC_G_FREQUENCY will return the scan frequency when 
> > scanning,
> >      otherwise it will return the normal frequency.
> >
> >   I think I like option a) better. It gives you all the information you 
> > need.
> Even I prefer option A here.
> >
> > 6) What does it mean when you get a time out? The spec just says 'Try 
> > again'. But
> >   try what? If it times out due to hardware issues, then a proper error 
> > should be
> >   returned. That leaves a time out due to the scan not finding any 
> > channels, but not
> >   reaching the end of the scan either (because that would be a ENODATA 
> > return code).
> >
> >   What should be the frequency in this case? The original frequency or the 
> > last
> >   scanned frequency? And on older hardware you may not be able to get that 
> > last scanned
> >   frequency.
> >
> >   I suggest one of two options:
> >
> >   a) Abolish the time out altogether. The driver author has to set the 
> > internal
> >      timeout to such a large value that if you time out, then you can just 
> > return
> >      -ENODATA.
> >
> >   b) Hardware that cannot detect the current scan frequency behaves as a). 
> > Hardware
> >      that can detect the scan frequency will return -EAGAIN, but sets the 
> > frequency
> >      at the last scanned frequency.

Do you have any opinion/insights into this?

Regards,

        Hans

> >
> > 7) It would be nice if the ioctl was RW instead of just a write ioctl. That 
> > way the
> >   driver could report the proper spacing value that it used. I'm not 
> > entirely sure
> >   it is worth the effort at this moment though.
> >
> > Comments? Questions?
> >
> > Regards,
> >
> >        Hans
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-media" in
> > the body of a message to majord...@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to