I have seen that plugins use this in a different way.
For example in this order: DevicePlay DeviceStillPicture DeviceFreeze So the next action to display a new Stillimage would start with DevicePlay
Others call neither Freeze nor Play. The dvd-Plugin calls DeviceClear and DevicePlay before DeviceStillPicture.
I remember that Klaus once stated that DeviceStillPicture could be seen as a trickmode, so that always a Play has to follow to resume from trickmode. But is it necessary to Freeze the Stillpicture before?
And I wonder: How should a device plugin handle the StillPicture function? Is it necessary that StillPicture also calls a Clear() to clear the internal decoder buffers? It looks like that vdr is not doing this in dvbdevice.c, although I am not sure if the av7110 ioctl VIDEO_STILLPICTURE does internally clear the buffers.
I noticed problems when both plugins (that one that uses DeviceStillPicture and the device plugin) do a Clear() at the same time.
On 01/06/08 14:13, Martin Dauskardt wrote:
I have seen that plugins use this in a different way.
For example in this order: DevicePlay DeviceStillPicture DeviceFreeze So the next action to display a new Stillimage would start with DevicePlay
Others call neither Freeze nor Play. The dvd-Plugin calls DeviceClear and DevicePlay before DeviceStillPicture.
I remember that Klaus once stated that DeviceStillPicture could be seen as a trickmode, so that always a Play has to follow to resume from trickmode. But is it necessary to Freeze the Stillpicture before?
And I wonder: How should a device plugin handle the StillPicture function? Is it necessary that StillPicture also calls a Clear() to clear the internal decoder buffers? It looks like that vdr is not doing this in dvbdevice.c, although I am not sure if the av7110 ioctl VIDEO_STILLPICTURE does internally clear the buffers.
Incidentally I'm currently writing a simple picture viewer plugin, and there I just call DeviceStillPicture() without anything else.
In order to make the FF-DVB cards display both frames of a still picture (thus avoiding jagged lines) you may want to apply the following patch to the driver:
--- av7110_av.c 2007-12-30 12:59:44.000000000 +0100 +++ av7110_av.c 2007-12-31 11:19:41.000000000 +0100 @@ -1125,6 +1125,8 @@ dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout); ret = play_iframe(av7110, pic->iFrame, pic->size, file->f_flags & O_NONBLOCK); + if (!ret) + ret = vidcom(av7110, AV_VIDEO_CMD_FREEZE, 1); break; }
Klaus