[linux-dvb] problems and workaround when tuning to a channel with
DD enabled
Oliver Endriss
o.endriss at gmx.de
Wed Jun 8 13:17:37 CEST 2005
Wolfgang Rohdewald wrote:
> On Mittwoch 08 Juni 2005 11:56, Dr. Werner Fink wrote:
> > > My idea would be: on entry of OSDSetBlock: if there is a current transfer,
> > > wait for it to finish, call ReleaseBitmap and start all over.
> >
> > This does not work. The OSD commands are queued by the
> > firmware upto the point where the data load is done.
>
> so ReleaseBitmap triggers the data load from the queue to
> the OSD image? Can I download a description of the firmware
> API somewhere?
Afaik there is no API spec.
> would this be better:
>
> remember how much has been done: add a counter to struct av7110
> which is incremented in relevant places like in LoadBitmap,
> BlitBitmap, SetFont, FlushText, WriteText etc. On next try,
> dry-run these places (i.e. do not pass anything to the firmware)
> until the counter is reached. This mechanism could be used by
> OSD_Setblock, OSD_Text and others.
>
> in case of a result other than -ERESTARTSYS (success, timeout,
> other errors) the counter would be reset to 0.
>
> or could there be a simpler solution?
Introducing another state variable would make the code even more
complicatated and harder to debug.
If you add a counter you have to make sure that the right ioctl will be
continued. I wonder whether this scenario may happen:
- task A issues SetBlock ioctl (1) which is interrupted (-ERESTARTSYS)
- task B isues a different SetBlock ioctl at the same time (2)
You have to make sure that (1) is resumed, not (2).
Oliver
--
--------------------------------------------------------
VDR Remote Plugin available at
http://www.escape-edv.de/endriss/vdr/
--------------------------------------------------------
More information about the linux-dvb
mailing list